#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit gewe=P1^3; //个位选通
sbit shwe=P1^2;
sbit bawe=P1^1;
sbit qiwe=P1^0;
sbit led1=P2^0; //二极管
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delayms(uint);
void display1(uchar,uchar,uchar,uchar);
//void dispiay2(uchar,uchar);
uchar num1,num2,qian,bai,shi,ge;
uint num;
void display1(uchar qian,uchar bai,uchar shi,uchar ge)
{
qiwe=0; //千位选通打开
P0=table[qian]; //千位段选
delayms(2); //延时
qiwe=1; //千位选通关闭
bawe=0;
P0=table[bai];
delayms(2);
bawe=1;
shwe=0;
P0=table[shi];
delayms(2);
shwe=1;
gewe=0;
P0=table[ge];
delayms(2);
gewe=1;
}
void main()
{
TMOD=0x01; //设置定时器0和1为工作方式1
TH0=(65536-45872)/256;//装初值
TL0=(65536-45872)%256;
// TH1=(65536-45872)/256;
// TL1=(65536-45872)%256;
EA=1; //开总中断
ET0=1 ; //开定时器0中断
TR0=1; // 启动定时器0
// ET1=1;
// TR1=1;
while(1)
{
qian=table[num/1000];
bai=table[num%1000/100]; //把一个四位数送数码管
shi=table[num%1000%100/10];
ge=table[num%1000%100%10];
// display2(shi,ge);
display1(qian,bai,shi,ge);
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //延时函数约延时xms
for(j=110;j>0;j--);
}
void TO_time() interrupt 1
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num1++;
num2++;
if(num1>=4) //到了4次=200ms
{
num1=0; //把num1清零再计20次
led1=~led1;
}
if(num2>=20) //如果到了20次约为1秒
{
num2=0; //把num2清零再计20次
num++;
if(num>=3600) //数码管计到3600后归零
num=0;
}
}
/*
void T1_time() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num2++;
if(num2=20) //如果到了20次约为1秒
{
num2=0; //把num2清零再计20次
num++;
if(num==3600) //数码管计到3600后归零
num=0;
qian=num/1000;
bai=num%1000/100 ; //把一个四位数送数码管
shi=num%1000%100/10;
ge=num%1000%100%10;
}
}*/ |