#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++;
}
|