|
|
P0=table1[sec/10]; //显示秒十位数 if( count1==1&&flag_flash==1) P2=0x00; else P2=table2[6]; delay_5ms(); P0=0xff; P0=table1[sec%10]; //显示秒个位数 if( count1==1&&flag_flash==1) P2=0x00; else P2=table2[7]; delay_5ms(); P0=0xff; |
|
一、设个闪烁的标志,开定时中断T1,0.5秒求反一次。 void T1_500ms(void) interrupt 3 { static unsigned char count2 = 0; TR1 = 0; TH1 = (65536 - 50000 ) / 256; //设置T1初始值为:15536 TL1 = (65536 - 50000 ) % 256; //记数为50000次//50000*1us=50ms TR1 = 1; count2++; if(count2 == 10) { count2 = 0; flag_flash=!flag_flash;// 调整时的闪烁标志 } } 二、显示函数里根据调秒和闪烁标志,控制显示和熄灭(这里仅以秒的闪烁为例) P0=table1[sec/10]; //显示秒十位数 if( count1==1&&flag_flash==1) P2=0x00; else P2=table2[6]; delay_5ms(); P0=0xff; P0=table1[sec%10]; //显示秒个位数 if( count1==1&&flag_flash==1) P2=0x00; else P2=table2[7]; delay_5ms(); P0=0xff; |
hhh402 发表于 2019-7-6 00:50 “你这个程序只要一按按键数码管显示就混乱。因为你的按键程序有待按键释放,按键后就不运行数码管显示程序了。” while(key_1==0) disp_led(); //等待按键释放,并且调用显示程序 没问题 |
| 你的程序直接用学习板的程序是不行的,单片机学习板的程序只是为了说明单片机原理,真正的程序要多用中断,少用延时,这种语句 while(key_2==0)基本不用。实际按键程序不需要按键消抖,不需要等,实际按键程序需要放在约10-20ms中断中执行,数码管显示程序也是放在中断中执行的。你这个程序只要一按按键数码管显示就混乱。因为你的按键程序有待按键释放,按键后就不运行数码管显示程序了。 |