最近在研究STM32的74HC595数码管显示,在51上写可以,但是移植到STM32就显示不出来,囧囧的!!!求大神帮忙!!
#ifndef __display_H_
#define __display_H_
#include "sys.h"
#define DS PAout(13)
#define RCK PAout(14)
#define CLK PAout(15)
void writ_595(u8 dat,u8 wei);
void guanjiao_init(void);
#endif
#include <stm32f10x_lib.h>
#include "delay.h"
#include"guanjiao.h"
void guanjiao_init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0XFF0FFFFF;
GPIOA->CRH|=0X00300000;//PA13 推挽输出
GPIOA->ODR|=1<<13; //PA13 输出高
GPIOA->CRH&=0XF0FFFFFF;
GPIOA->CRH|=0X03000000;//PA14推挽输出
GPIOA->ODR|=1<<14; //PA14输出高
GPIOA->CRH&=0X0FFFFFFF;
GPIOA->CRH|=0X30000000; //p15推挽输出
GPIOA->ODR|=1<<15; //PA15输出高
}
void writ_595(u8 dat,u8 wei) //dat 需显示的数码管编码,wei 需在哪一位显示 3 2 1 0
{
u8 i;
for(i=0;i<4;i++)
{
CLK=0;
DS=1;
CLK=1; //移位输入时钟,上升沿输入
}
for(i=0;i<4;i++)
{
CLK=0;
if(wei==i)
DS=0;
else
DS=1;
CLK=1; //移位输入时钟,上升沿输入
}
for(i=0;i<8;i++)
{
CLK=0;
if((dat&0x80) == 0x80)
DS = 1; //串行数据输出
else
DS = 0;
CLK=1; //移位输入时钟,上升沿输入
dat<<=1;
}
RCK=0; //并行输出时钟
RCK=1;
}
#include <stm32f10x_lib.h>
#include "delay.h"
#include "guanjiao.h"
#include "sys.h"
u8 seg_table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置,外部高速时钟HSE,9倍频
delay_init(72); //延时初始化,设置在系统时钟下,必须始终初始化一致
guanjiao_init();
writ_595(seg_table[6],3);
}
|