#include<reg52.h> // 包含51單片機寄存器定義的頭文件
unsigned char code Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//數碼管顯示0~9的段碼表
unsigned char int_time; //記錄中斷次數
unsigned char second; //儲存秒
void delay(void)
{
unsigned char i;
for(i=0;i<200;i )
;
}
void DisplaySecond(unsigned char k)
{
P2=0xbf; //P2.6引腳輸出低電平, DS6點亮
P0=Tab[k/10]; //顯示十位
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
P2=0x7f; //P2.7引腳輸出低電平, DS7點亮
P0=Tab[k]; //顯示個位
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
P2=0xff; //關閉所有數碼管
P0=0xff; //顯示個位
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
}
void main(void) //主函數
{
TMOD=0x01; //使用定時器T0
TH0=(65536-46083)/256; //將定時器計時時間設定為46083×1.085微秒
//=50000微秒=50毫秒
TL0=(65536-46083)%6;
EA=1; //開啟總中斷
ET0=1; //定時器T0中斷允許
TR0=1; //啟動定時器T0開始運行
int_time=0; //中斷次數初始化
second=0; //秒初始化
while(1)
{
DisplaySecond(second); //調用秒的顯示子程序
}
}
//********************************************************
//函數功能:定時器T0的中斷服務程序
//*******************************************************
void interserve(void ) interrupt 1 using 1
{
TR0=0; //關閉定時器T0
int_time ; //每來一次中斷,中斷次數int_time自加1
if(int_time==20) //夠20次中斷,即1秒鐘進行一次檢測結果采樣
{
int_time=0; //中斷次數清0
second ; //秒加1
if(second==60)
second =0; //秒等于60就返回0
}
TH0=(65536-46083)/256; //重新給計數器T0賦初值
TL0=(65536-46083)%6;
TR0=1; //啟動定時器T0
} |