想利用八段数码管做一个电子表。
数码管一个有四片。
最后一片显示秒数。利用延时函数成功实现了,到9的时候,需要进位,想让倒数第二片数码管显示进位的数,但是
问题出现了,按理第四片到9,第三片就应该变成1,然后第四片循环,直到下一次到9,第三片才变成2,以此类推。为什么我没有办法让第三片数码管停止在一个数不动,就是等到需要进位的时候第三片的状态完全跟第四片一样了!
[mw_shl_code=c,true]
u8 const CharCode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳段码表
//数码管显示
int main(void)
{
// u8 i;
// u8 t;
u8 a; //秒个位(第四片)
u8 b; //秒十位(第三片)
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
SEG_Init(); //数码管初始化
SEG_DATAOUT(0); //取段码数据
KEY_Init();
/*
数码管第四片显示秒的个位数
*/
b=0;
for(a=1;;a++)
{
if(a==10)
{
delay_ms(1000);
a=0;
b=b+1;
{
SEG_DATAOUT(CharCode<<8);
PC8=0;
}
{
SEG_DATAOUT(CharCode[0]<<8);
PC9=0;
}
}
else if(a<=9)
{
delay_ms(1000);
SEG_DATAOUT(CharCode[a]<<8);
PC9=0;
}
}[/mw_shl_code]
一般可以开1个1毫秒的定时器,这1毫秒显示第一片内容, 下一毫秒显示第二片内容,.......
或者用个for循环扫描
一周热门 更多>