#include<reg52.h>
#define DataPort P0
#define WEIMA P2
sbit key_up = P1^0;
sbit key_down = P1^1;
sbit key_left = P1^2;
sbit key_right = P1^3;
sbit LATCH1=P1^6;
sbit LATCH2=P1^7;
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 共阴显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
void Display(unsigned char FirstBit,unsigned char Num);
void DelayMs(unsigned char t);
void DelayUs2x(unsigned char t);
unsigned char keyscan();
unsigned char TempData[8];
char hour = 0;
char min = 0;
char sec = 0;
char msec = 0;
char wei = 2;
/*void Delay(unsigned int t)
{
while(--t);
}*/
void time0_isr(void) interrupt 1
{
ET0 = 0;
TH0 = 0XD8;
TL0 = 0XF0;
msec++;
if(msec == 100)
{
msec = 0;
sec++;
if(sec == 60)
{
sec = 0;
min++;
if(min == 60)
{
min = 0;
hour++;
if(hour == 24)
hour = 0;
}
}
}
ET0 = 1;
}
void time1_isr(void) interrupt 3
{
ET1 = 0;
TH1 = 0XFC;
TL1 = 0X18;
TempData[0] = dofly_DuanMa[hour/10];
TempData[1] = dofly_DuanMa[hour%10]|0x80;
TempData[2] = dofly_DuanMa[min/10];
TempData[3] = dofly_DuanMa[min%10]|0x80;
TempData[4] = dofly_DuanMa[sec/10];
TempData[5] = dofly_DuanMa[sec%10]|0x80;
TempData[6] = dofly_DuanMa[msec/10];
TempData[7] = dofly_DuanMa[msec%10];
Display(0,8);
WEIMA = ~dofly_DuanMa[3-wei];
ET1 = 1;
}
void exit0_isr(void) interrupt 0
{
EX0 = 0;
ET0 = ~ET0;
EX0 = 1;
}
void exit1_isr(void) interrupt 2
{
EX1 = 0;
hour = 0;
min = 0;
sec = 0;
msec = 0;
wei = 2;
EX1 = 1;
}
void main(void)
{
//char wei = 0;
/*unsigned char i;
bit flashflag = 0;*/
unsigned char num;
TMOD = 0X11;
TH0 = 0XD8;
TL0 = 0XF0;
TH1 = 0XFC;
TL1 = 0X18;
EA = 1;
ET0 = 0;
TR0 = 1;
ET1 = 1;
TR1 = 1;
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1 = 1;
while(1)
{
num = keyscan();
if(num != 0)
{
if(num == 1)
{
wei++;
if(wei == 3)
wei = 0;
}
else if(num == 2)
{
wei--;
if(wei < 0)
wei = 2;
}
else if(num == 3)
{
if(wei == 0)
{
msec = 0;
sec = 0;
}
else if(wei == 1)
{
min++;
if(min == 60)
min = 0;
}
else if(wei == 2)
{
hour++;
if(hour == 24)
hour = 0;
}
}
else if(num == 4)
{
if(wei == 0)
{
msec = 0;
sec = 0;
}
else if(wei == 1)
{
min--;
if(min < 0)
min = 59;
}
else if(wei == 2)
{
hour--;
if(hour < 0)
hour = 23;
}
}
}
}
}
unsigned char keyscan()
{
if(!key_left)
{
DelayMs(10);
if(!key_left)
{
while(!key_left);
return 1;
}
}
else if(!key_right)
{
DelayMs(10);
if(!key_right)
{
while(!key_right);
return 2;
}
}
else if(!key_up)
{
DelayMs(10);
if(!key_up)
{
while(!key_up);
return 3;
}
}
else if(!key_down)
{
DelayMs(10);
if(!key_down)
{
while(!key_down);
return 4;
}
}
return 0;
}
void DelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i;
/*for(i=0;i<Num;i++)
{*/
DataPort= 0x00;
LATCH1=1;
LATCH1=0;
DataPort=dofly_WeiMa[i+FirstBit];
LATCH2=1;
LATCH2=0;
DataPort = TempData[i];
LATCH1=1;
LATCH1=0;
/*DelayUs2x(200);
}*/
i++;
if(i == Num)
i = 0;
}
电子表(开关,复位,调时)
最新推荐文章于 2022-07-26 16:26:10 发布