|
实验目标:灯一亮一灭是1s,然后秒表计数,采用两个定时器实现。
问题:我觉得这个灯一亮一灭是没问题的。灯闪和计数我用的是T0、T1定时器。但是在实验过程中,我发现这个数码管更新不及时,感觉很慢。因为51的定时器应该是准的,但是我不知道为啥这个数码管更新就是很慢。
主程序如下:
#include <reg51.h>
#include "Delay.h"
#include "Display.h"
#define uint unsigned int
#define uchar unsigned char
sbit led1 = P1^0;
uchar num0 = 0, num1 = 0, num = 55, shi, ge;
void main(void)
{
shi = num / 10;
ge = num % 10;
display(shi, ge)
TMOD = 0x11;
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
EA = 1;
ET1 = 1;
TR1 = 1;
ET0 = 1;
TR0 = 1;
while (1) {
shi = num / 10;
ge = num % 10;
display(shi, ge);
}
}
void T0_time() interrupt 1 {
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
++num0;
if (num0 == 10) { //0.5s
num0 = 0;
led1 = ~led1;
}
}
void T1_time() interrupt 3 {
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256; //50ms
++num1;
if (num1 == 20) { //1s
++num;
if (num == 60)
num = 0;
}
}
仿真图已经呈上:主要就是单片机的P0口控制两个74HC573锁存器分别送段码和位码。然后是两个中断程序。
|
|