这是我看他的视频写的。你参考下
#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++; }
|