[mw_shl_code=c,true] while (1)
{
if(ly_tt==20){ //20*50ms为1秒
ly_tt=0;
ly_miao++;
if(ly_miao==60){
ly_miao=0;
ly_fen++;
if(ly_fen==60){ //满60分清0
ly_fen=0;
}
}
}
display(ly_fen,ly_miao); //显示变量内容
}
}
[/mw_shl_code]
[mw_shl_code=c,true]#define DS PBout(15)
#define SCK PBout(13)
#define RCK PBout(12)
unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char wei[]={0x10,0x20,0x40,0x80};
void h595_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = DS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//最大输出速度为2MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;////通用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SCK;//|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//最大输出速度为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;////通用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = RCK;//|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//最大输出速度为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;////通用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, DS|SCK|RCK);
}
void Delay2(void)
{
unsigned char i=10;
while(i--);
}
void Delay3(void)
{
unsigned char i=40;
while(i--);
}
void WR1_595(unsigned char segdata) //输入一字节数码管数据进595
{
unsigned char i,num;
num=segdata;
for(i=0;i<8;i++)
{
SCK=0;
delay_ms(5);
if((num&0x80)==0x80)
DS=1;
else
DS=0;
num<<=1;
SCK=1;
delay_ms(5);
LED0=!LED0;
}
}
void WR2_595(unsigned char wei) //输入一字节数码管数据进595
{
unsigned char i,num;
num=wei;
for(i=0;i<8;i++)
{
SCK=0;
delay_us(3);
if((num&0x80)==0x80)
DS=1;
else
DS=0;
num<<=1;
SCK=1;
delay_us(3);
}
}
void OUT_595(void) //上升沿将数据送到输出锁存器
{
RCK=0;
delay_ms(5);
RCK=1;
delay_ms(5);
RCK=0;
}
//显示函数,参数为显示内容,只显示两位数
void display(unsigned char fen,unsigned char miao)
{
int a,b,c,d;
//选择千位数码管,在这里显示的是小时的十位
d=duan[fen/10]; //
WR1_595(d); //
WR2_595(wei[3]); //
OUT_595();
//选择百位数码管,在这里显示的是小时的个位
c=duan[fen%10];
if(ly_tt>=10)
c&=0x7f; //小数点以半秒的时间闪烁
Delay2(); //
WR1_595(c); //
WR2_595(wei[2]); //
OUT_595();
//选择十位数码管,在这里显示的是分的十位
b=duan[miao/10]; //
Delay2(); //
WR1_595(b); //
WR2_595(wei[1]); //
OUT_595();
//选择个位数码管,在这里显示的是分的个位
a=duan[miao%10]; //
Delay2(); // //
WR1_595(a); //
WR2_595(wei[0]);
OUT_595();
}[/mw_shl_code]
怎么不显示相应的数字而是乱码,是怎么回事
|