本帖最后由 1269210768 于 2020-6-23 08:43 编辑
按下A键启动,数码管的时、分、秒显示00.00.00CL,从零开始,按照钟表走时,再次按下A键停止,数码管保持显示当前时间,其中,CL代表时钟状态clock。
按“B” 键一次,秒钟加一,按多次则加多次,秒钟到59再按则为0;
按“C” 键一次,分钟加一,按多次则加多次,分钟到59再按则为0;
按“D” 键一次,时钟加一,按多次则加多次,时钟到23再按则为0;
这个是我源程序,A按键应该怎么改,我要怎么改A才能控制启停,求教!!
#include<regx51.h>
#define uchar unsigned char
#define uint unsigned int
#define TIME=1200
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
unsigned int cnt=0;
unsigned char i=0;
unsigned long sec=0;
unsigned char second = 0;
unsigned char minute = 0;
unsigned char hour = 0;
unsigned char code segment_code[10] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f};
unsigned char digital_tube[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x39,0x38};
void ScanLed()
{
static unsigned char display_bit = 0;
switch (display_bit)
{
case 0:
P2=0xfe;
break;
case 1:
P2=0xfd;
break;
case 2:
P2=0xfb;
break;
case 3:
P2=0xf7;
break;
case 4:
P2=0xef;
break;
case 5:
P2=0xdf;
break;
case 6:
P2=0xbf;
break;
case 7:
P2=0x7f;
break;
default:
break;
}
P0=digital_tube[display_bit];
display_bit++;
if (display_bit == 8)
display_bit = 0;
}
void main()
{
TMOD = 0x01;
TH0 = 64536 / 256;
TL0 = 64536 % 256;
EA = 1;
ET0 = 1;
TR0 = 1;
while (1)
;
}
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--);
}
void Timer0() interrupt 1
{
static int index = 0;
TH0 = 64536 / 256;
TL0 = 64536 % 256;
index++;
ScanLed();
if (index == 1000)
{
index = 0;
second++;
}
if (second == 60)
{
second = 0;
minute++;
}
if (minute == 60)
{
minute = 0;
hour++;
}
if (hour == 24)
{
hour = 0;
}
if(K4==0)
{
delay(10);
if(K4==0)
{
hour++;
if(hour==24) hour=0;
}
while(!K4);
}
if(K3==0)
{
delay(10);
if(K3==0)
{
minute++;
if(minute==60) minute=0;
}
while(!K3);
}
if(K2==0)
{
delay(10);
if(K2==0)
{
second++;
if(second==24) second=0;
}
while(!K2);
}
if(K1==0)
{
delay(10);
if(K1==0)
{
hour=0;
minute=0;
second=0;
}
while(!K1);
}
digital_tube[0] = segment_code[hour / 10];
digital_tube[1] = segment_code[hour % 10]+0x80;
digital_tube[2] = segment_code[minute / 10];
digital_tube[3] = segment_code[minute % 10]+0x80;
digital_tube[4] = segment_code[second / 10];
digital_tube[5] = segment_code[second % 10]+0x80;
digital_tube[6] = 0x39;
digital_tube[7] = 0x38;
}
|