|
實驗目標:燈一亮一滅是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鎖存器分別送段碼和位碼。然后是兩個中斷程序。
|
|