|
#include<reg51.h> //頭文件
typedef unsigned char u8;//定義u8類型
typedef unsigned int u16; //定義 u16類型
#define uchar unsigned char //定義 uchar類型
u8 disp[8]; //數(shù)碼管緩存
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x80}; //數(shù)碼管段碼
sbit LSA=P2^2; //74HC138控制腳
sbit LSB=P2^3; //74HC138控制腳
sbit LSC=P2^4; //74HC138控制腳
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
u16 pp=0;
char shi=0,fen=0,miao=0;
void delay(uchar i) //延時(shí)函數(shù)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*******************************************************************************
* 函數(shù)名 :DigDisplay()
* 函數(shù)功能 :數(shù)碼管顯示函數(shù)
* 輸入 : 無(wú)
* 輸出 : 無(wú)
*******************************************************************************/
void display()
{
u8 i;
disp[7]=smgduan[shi/10];
disp[6]=smgduan[shi%10];
disp[5]=smgduan[17];
disp[4]=smgduan[fen/10];
disp[3]=smgduan[fen%10];
disp[2]=smgduan[17];
disp[1]=smgduan[miao/10];
disp[0]=smgduan[miao%10];
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
{
case(7):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(6):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(5):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(4):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(3):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(2):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
case(1):
LSA=0;LSB=1;LSC=1; break;//顯示第4位
case(0):
LSA=1;LSB=1;LSC=1; break;//顯示第5位
}
P0=disp[7-i];//發(fā)送數(shù)據(jù)
delay(2); //間隔一段時(shí)間掃描
P0=0x00;//消隱
}
}
void key()
{
if(key1==0)
{
delay(2);
if(key1==0)
{
while(!key1);
TR0=1;
}
}
if(key2==0)
{
delay(2);
if(key2==0)
{
while(!key2);
TR0=0;
}
}
if(key3==0)
{
delay(2);
if(key3==0)
{
while(!key3);
TR0=0;
miao=0;
fen=0;
}
}
}
void main()
{
TMOD = 0X01; //初始化定時(shí)器
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
EA = 1; //開(kāi)總中斷
ET0 = 1; //開(kāi)T0中斷
TR0=0;
while(1)
{
display();
key();
}
}
void T0_ISR(void) interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
pp++;
if(pp==20)
{
pp=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)shi=0;
}
}
}
}
|
|