#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
//用數組來存儲數碼管的真值表,數組將在下一章詳細介紹
unsigned char code LedChar[] = {
? ? 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
? ? 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
void main()
{
? ? unsigned char cnt = 0; ?//記錄T0中斷次數
? ? unsigned char sec = 0; ?//記錄經過的秒數
? ? ENLED = 0; ? ?//使能U3,選擇數碼管DS1
? ? ADDR3 = 1;
? ? ADDR2 = 0;
? ? ADDR1 = 0;
? ? ADDR0 = 0;
? ? TMOD = 0x01; ?//設置T0為模式1
? ? TH0 ?= 0xB8; ?//為T0賦初值0xB800
? ? TL0 ?= 0x00;
? ? TR0 ?= 1; ? ? //啟動T0
? ??
? ? while (1)
? ? {
? ? ? ? if (TF0 == 1) ? ? ? ?//判斷T0是否溢出
? ? ? ? {
? ? ? ? ? ? TF0 = 0; ? ? ? ? //T0溢出后,清零中斷標志
? ? ? ? ? ? TH0 = 0xB8; ? ? ?//并重新賦初值
? ? ? ? ? ? TL0 = 0x00;
? ? ? ? ? ? cnt++; ? ? ? ? ? //計數值自加1
? ? ? ? ? ? if (cnt >= 50) ? //判斷T0溢出是否達到50次
? ? ? ? ? ? {
? ? ? ? ? ? ? ? cnt = 0; ? ? ? ? ? ?//達到50次后計數值清零
? ? ? ? ? ? ? ? P0 = LedChar[sec]; ?//當前秒數對應的真值表中的值送到P0口
? ? ? ? ? ? ? ? sec++; ? ? ? ? ? ? ?//秒數記錄自加1
? ? ? ? ? ? ? ? if (sec >= 16) ? ? ?//當秒數超過0x0F(15)后,重新從0開始
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? sec = 0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
?