這是我看他的視頻寫的。你參考下
#include<reg52.h>//導入頭文件 #define uchar unsigned char//宏定義 #define uint unsigned int//宏定義 sbit dula=P2^6;//定義段選口 sbit wela=P2^7;//定義位選口 //數碼表 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
uchar temp,bai,shi,ge,aa;//變量聲明
void display(uchar bai,uchar shi,uchar ge);//三位數顯示函數聲明 void delay(uint z);//延時函數聲明 void init();//初始化聲明 void main() { init();//調用初始化函數 while(1) { if(aa==20)//判斷定時器1S時間 { aa=0;//定時器清0 temp++; if(temp==100) { temp=0; }//只規定從0加到100 bai=temp/100;//求百位數 shi=temp%100/10;//求十位數 ge=temp%10;//求個位數 } display(bai,shi,ge);//調用三位數顯示函數 } } //1MS延時函數 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //三位數顯示函數 void display(uchar bai,uchar shi,uchar ge) { dula=1; P0=table[bai];//P0口送百位數碼 dula=0; P0=0xff;//消隱 wela=1; P0=0xfe; wela=0; delay(5);//延時5MS,不能超過定時器的時間,不然會出錯
dula=1; P0=table[shi];//P0口送十位數碼 dula=0; P0=0xff;//消隱 wela=1; P0=0xfd; wela=0; delay(5);//延時5MS,不能超過定時器的時間,不然會出錯
dula=1; P0=table[ge];//P0口送個位數碼 dula=0; P0=0xff;//消隱 wela=1; P0=0xfb; wela=0; delay(5);//延時5MS,不能超過定時器的時間,不然會出錯 } //程序初始化函數 void init() { dula=0;//消隱,上電時關掉段鎖存器 wela=0;//消隱,上電時關掉位鎖存器 TMOD=0x01;//給TMOD賦值確定T0和T1的工作方式 //50MS定時 TH0=(65536-50000)/256;//高八位存入60轉換成十六進制數是3C TL0=(65536-50000)%256;//低八位存入176轉換成十六進制數是B0 EA=1;//開總中斷 ET0=1;//開定時器0中斷 TR0=1;//啟動定時器0
}
void timer0() interrupt 1//值為0時是外部中斷0,為1時是定時器計數器0 { ////再裝一次初值,因為值裝滿后清0,這樣下次進入中斷就會變成0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }
|