|
以下是代碼,可以自行更改端口
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //聲明u1鎖存器端口
sbit wela=P2^7; // u2
sbit pausekey=P3^4; //按鍵端口
int num0,num1,num2;
uchar sh0,sh1,sh2,ge0,ge1,ge2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms) //延時(shí)
{
uint i,k;
for(i=xms;i>0;i--)
for(k=110;k>0;k--) ;
}
void init() //初始化
{
TMOD=0x10; //設(shè)置定時(shí)器1工作方式1
TH1=(65536-9175)/256; //10ms
TL1=(65536-9175)%256;
EA=1;
ET1=1;
}
void keyscan() //鍵盤(pán)輸入
{
if(pausekey==0)
{
delayms(10);
if(pausekey==0)
{
while(!pausekey); //持續(xù)按著
TR1=~TR1; //啟動(dòng)或停止定時(shí)器1
}
}
}
void display(uchar sh0,uchar sh1,uchar sh2,
uchar ge0,uchar ge1,uchar ge2) //顯示
{
dula=1;
P0=table[ge0];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(5);
dula=1;
P0=table[sh0];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(5);
dula=1;
P0=table[ge1];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(5);
dula=1;
P0=table[sh1];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
delayms(5);
dula=1;
P0=table[ge2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
dula=1;
P0=table[sh2];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
}
void T1_time() interrupt 3
{
TH1=(65536-9175)/256; //重裝初值
TL1=(65536-9175)%256;
num0++;
if(num0==100)
{
num1++;
num0=0;
}
if(num1==60)
{
num2++;
num1=0;
}
if(num2==100)
{
num0=0;
num1=0;
num2=0;
}
sh0=num0/10;
ge0=num0%10;
sh1=num1/10;
ge1=num1%10;
sh2=num2/10;
ge2=num2%10;
}
void main()
{
init();
while(1)
{
keyscan();
display(sh0,sh1,sh2,ge0,ge1,ge2);
}
}
|
|