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