if(dispbuf[pos]==0)dispbuf[pos]=9; else dispbuf[pos]--; } }
2、秒表模式下,无法很好地区分当前计时所达到的具体数值。在秒的个位数位子设置一个小数点,使秒表的显示更加直观。
修改后代码如下:
在程序开始处,添加如下代码: unsigned char code segtab_dot[]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; 数点的数码管代码
在void t0int(void) interrupt 1 using 1之中添加如下代码: if(mode==4&&P1==0xfd) //秒表处显示小数点的if语句 {
P0=segtab_dot[dispbuf[dispindex]]; } else {
P0=segtab[dispbuf[dispindex]]; }
//带小
3、在秒表运行一遍后,进入其他模式操作完毕,再次进入秒表模式下发现秒表无法清零。检查代码后发现,在闹钟模式下,进入秒表模式时,未对秒表清零。
修改后代码如下:
附完整实验代码:
/*********************************************************************** 基于单片机的数字时钟 功能:时钟、闹钟、秒表
模式0:时钟显示模式-分、秒
模式0下,数码管显示时钟时间-分、秒。
按键说明:
按键1:选择下一模式。
模式1:时钟显示模式-时、分
模式1下,数码管显示时钟时间-时、分。
按键说明:
按键1:选择下一模式。
模式2:时钟调整模式
模式2下,调整时钟时间,仅调整时、分时间。
按键说明:
按键1:选择下一模式。
按键2:增加选中数码管的数值。
if(keyval==0x7f)//1号按键 模式 进入秒表模式 {
mode=4; old_ss=0; old_ms=0;
miaobiao_ss=old_ss; miaobiao_ms=old_ms;
dispbuf[0]=miaobiao_ss/10; dispbuf[1]=miaobiao_ss; dispbuf[2]=miaobiao_ms/10; dispbuf[3]=miaobiao_ms; clocksing=0; }
按键3:减少选中数码管的数值。
按键4:移位键,按键选择下一数码管。
模式3:闹钟模式
模式3下,设置闹铃时间之后,等时钟到达相应时间,发出铃声。
按键说明:
按键1:选择下一模式。
按键2:增加选中数码管的数值。 按键3:减少选中数码管的数值。
按键4:移位键,按键选择下一数码管。
按键5:设置闹铃时间后,按键确认,数码管显示当前时钟时间。
模式4:秒表模式
模式4为秒表模式,可记录0-59秒。最小时间单位为0.01秒。
按键说明:
按键1:选择下一模式。 按键2:清除秒表当前数值。 按键3:清除秒表当前数值。 按键4:开始、暂停秒表。
**