|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
char s;
uchar num=0;
char time=20;
char datitime=30;
uint tt,t1;
bit flag,s_flag=1,b_flag,fall_flag,fw_flag;
sbit K0=P3^0;
sbit beep=P3^7;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit D1=P1^4;
sbit D2=P1^5;
sbit D3=P1^6;
sbit D4=P1^7;
sbit K_fw=P3^2;
sbit K_Time=P3^5;
void delay(uchar ms)
{
uchar y;
for(;ms>0;ms--)
for(y=120;y>0;y--);
}
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code tablewe[]={0XFE,0XFD,0XFB,0XF7};
void T0_Init(void)
{
TMOD=0X01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EX0=1;
EA=1;
IT0=1;
P0=0;
}
void Key_Scan(void)
{
if(K0==0)
{
delay(10);
if(K0==0)
{
while(!K0);
TR0=1;
s=time;
tt=0;
flag=1;
s_flag=1;
b_flag=1;
num=0;
beep=1;
fall_flag=0;
}
}
}
void Scan(void)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
while(!K1);
num=1;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K2==0)
{
delay(10);
if(K2==0)
{
while(!K2);
num=2;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K3==0)
{
delay(10);
if(K3==0)
{
while(!K3);
num=3;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K4==0)
{
delay(10);
if(K4==0)
{
while(!K4);
num=4;
TR0=0;
TR1=1;
s_flag=0;
}
}
}
void display(void)
{
if(flag==1)
{
if(num!=0)
{
P0=tabledu[num];
P2=tablewe[0];
delay(2);
P0=0;
P2=0XFF;
}
else
{
P0=0;
P2=0XFF;
}
P0=tabledu[s/10];
P2=tablewe[2];
delay(2);
P0=0;
P2=0XFF;
P0=tabledu[s%10];
P2=tablewe[3];
delay(2);
P2=0XFF;
P0=0;
}
else
{
if(fall_flag==1)
{
if(num!=0)
{
P0=tabledu[num];
P2=tablewe[0];
delay(2);
P0=0;
P2=0XFF;
P0=tabledu[15];
P2=tablewe[2];
delay(2);
P0=0;
P2=0XFF;
P0=tabledu[15];
P2=tablewe[3];
delay(2);
P0=0;
P2=0XFF;
}
else
{
P0=0;
P2=0XFF;
}
}
else
{
P0=tabledu[15];
P2=tablewe[0];
delay(2);
P0=0;
P0=tabledu[15];
P2=tablewe[2];
delay(2);
P0=0;
P2=0XFF;
P0=tabledu[15];
P2=tablewe[3];
delay(2);
P0=0;
P2=0XFF;
}
}
}
void main(void)
{
T0_Init();
while(1)
{
if(K0==0)
{
D1=0;
}
}
{
Key_Scan();
if((flag==0)&(s_flag==1))
if((flag==1)&(s_flag==0))
{
if(K_Time==0)
{
delay(10);
if(K_Time==0)
{
while(!K_Time);
s=datitime;
TR0=1;
tt=0;
TR1=1;
}
}
}
if((flag==0)&(s_flag==1))
{
Scan();
if(num!=0)
{
fall_flag=1;
}
}
if((flag==1)&(s_flag==1))
{
Scan();
}
display();
}
}
void int0(void) interrupt 0
{
if(K_fw==0)
{
while(!K_fw)
{
while(K0==1)
{P0=tabledu[15];
P2=tablewe[0];
delay(2);
P0=0;
P0=tabledu[15];
P2=tablewe[2];
delay(2);
P0=0;
P2=0xFF;
P0=tabledu[15];
P2=tablewe[3];
delay(2);
P0=0;
P2=0xFF;}
}
}
}
void timer0(void) interrupt 1
{
TH0=(65536-2000)/256; //2ms
TL0=(65536-2000)%256;
if(b_flag)
{
beep=~beep;
}
else
beep=1;
if(s<5)
{
if(s%2==0)
{
b_flag=1;
}
else
{
b_flag=0;
}
}
tt++;
if(tt==500)
{
tt=0;
s--;
b_flag=0;
if(s==-1)
{
s=20;
TR0=0;
flag=0;
s_flag=1;
num=0;
}
}
}
void timer1(void) interrupt 3
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
beep=~beep;
t1++;
if(t1==500)
{
t1=0;
TR1=0;
}
}
單片機設計把led燈的代碼加到主函數后數碼管就不亮了,但是把led燈的拿掉后又出來了.
|
|