#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;
sbit key2=P2^1;
uint num=0; //變量unm為要顯示的數、
//共陽極數碼管字段碼
uchar code a[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
//位選碼
uchar code b[4]={0Xfe,0Xfd,0xfb,0xf7};
//延時函數
void delay(uint x)
{
uint y;
for(;x>0;x--)
for(y=600;y>0;y--);
}
//定時器T0初始化函數
void initT0()
{
TMOD=0x01; //定時器T0工作方式一,工作在定時模式
TH0=(65536-10000)/256; //給定時器T0的高八位賦初值
TL0=(65536-10000)%256; //給定時器T0的低八位賦初值
EA=1; //開關中斷
ET0=1; //定時器T0中斷允許
TR0=1; //啟動定時器T0
}
//主函數
void main()
{
initT0(); //調用定時器T0初始化函數
num=0;
if(key1==0)
while(1)
{
P0=a[num%10]; //送字段碼
P1=b[0]; //送位選碼
delay(1);
P0=a[num/10%10];
P1=b[1];
delay(1);
P0=a[num/100%10]&0x7f;
P1=b[2];
delay(1);
P0=a[num/1000%100];
P1=b[3];
delay(1);
if(key2==0)
TR0=0;
if(key1==0)
TR0=1;
if(num>9999|key1==0) //顯示數清零
num=0;
}
}
//定時器T0中斷服務函數
void T0int()interrupt 1
{
TH0=(65536-10000)/256; //給定時器T0的高八位賦初值
TL0=(65536-10000)%256; //給定時器T0的低八位賦初值
num++;
}
|