實驗目的:掌握定時器的工作原理
實驗內容:利用按鍵K3來啟動數碼管(0~9)進行倒計時9秒,數碼管初始狀態顯示為滅(要求在主函數里完成顯示);按下K3則使數碼管從“9”一直顯示到"0";要求寫出定時器和外部中斷的中斷函數
實驗代碼:
#include<reg51.h>
int main(){
EA=1;//總允許打開
EX0=1;//外中斷0允許
IT0=1;//外中斷0下降沿判斷
while(1){
P1=0xff;} //初始狀態顯示為滅
}
void int0(void) interrupt 0 using 0{
char a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//數碼管顯示(0~9)
int i=9,n=0; //循環9次
TMOD=0x10;//定時器1開啟工作方式1(16位)
TR1=1;//啟動定時器
while(i!=-1){
P1=a[i ];
TH1=(65536-46080)/256; //s=65536-t*f/12,TH1=s/256,高8位賦值 ,t為定時時間單位為us,f為晶震頻率11.0592M
TL1=(65536-46080)%256;
while(TF1==0);
TF1=0;
n++;
/*do{
TF1=0; //定時器1溢出置0
}while(!TF1); */
if(n==20){
n=0;
i--;
}
}
}
|