用定时器中断里面放状态机,周期性刷数码管,保证流畅不闪,随便给你贴个参考代码,别60Hz不闪,我直接干到300多Hz对单片机也没任何负担
- //刷数码管定时器 1000Hz 三个数码管平均333Hz
- void Timer2_Isr(void) interrupt 12
- {
- static u8 sta;
- COM1 = 0; COM2 = 0; COM3 = 0; //关闭数码管
- switch (sta)
- {
- case 1:
- P1 = number[0];
- COM1 = 1; //百位
- sta = 2;
- break;
- case 2:
- P1 = number[1];
- COM2 = 1; //十位
- sta = 3;
- break;
- case 3:
- P1 = number[2];
- COM3 = 1; //个位
- sta = 1;
- break;
- default:
- sta = 1;
- break;
- }
- }
-
-
- 调用方法,直接赋值即可:
- number[0] = display[tmp_now / 100]; //拆分出十位
- number[1] = display[(tmp_now % 100) / 10]&0x7F; //拆分出个位
- number[2] = display[tmp_now % 10]; //拆分出小数点后一位
-
-
复制代码
|