源文件包含:仿真,代码以及参考报告
仿真电路图:
代码展示:(完整版代码请加球球领取(因为某种不可抗的因素某些地方展示出来是乱码,因此此处代码部分地方不全,给您带来不便还请谅解))
#define uint unsigned int
#define uchar unsigned char
#define CF P0
uchar flag_set=0;
uint hour=23;
uint min = 59;
uint sec=57;
sbit K1=P3^2;
sbit K2=P3^1;
sbit K3=P3^0;
sbit Key1=P3^3;
sbit Key2=P3^4;
sbit Key3=P3^5;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
uchar disbuff[]={0,0,0,0,0,0,0,0};
uchar const num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void Count();
void KEY();
void DigDisplay();
void delay(int s)
{
uint i,j;
for(i=0;i<s;i++)
for(j=114;j>0;j--);
}
void DigDisplay()
{
LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=0;
CF = disbuff[0];
delay(5);
CF=0x00;//ÏûÒþ
LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=0;LED8=1;
CF=disbuff[1];
delay(5);
CF=0x00; //ÏûÒþ
LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;LED7=1;LED8=1;
CF=disbuff[2];
delay(5);
CF=0x00; //ÏûÒþ
LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=1;LED7=1;LED8=1;
CF=disbuff[3];
delay(5);
CF=0x00; //ÏûÒþ
LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;LED6=1;LED7=1;LED8=1;
CF=disbuff[4];
delay(5);
CF=0x00; //ÏûÒþ
LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
CF=disbuff[5];
delay(5);
CF=0x00; //ÏûÒþ
LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
CF=disbuff[6];
delay(5);
CF=0x00; //ÏûÒþ LED5=1;LED6=1;LED7=1;LED8=1;
LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;
CF=disbuff[7];
delay(5);
CF=0x00; //ÏûÒþ
}
void Count()
{
disbuff[0]=num[sec%10];
disbuff[1]=num[sec/10%10];
disbuff[2]=0x40; //0x40±íʾ-ºá¸Ü
disbuff[3]=num[min%10];
disbuff[4]=num[min/10%10];
disbuff[6]=num[hour%10];
disbuff[7]=num[hour/10%10];
}
void KEY()
{
if(Key1==0)
{
delay(10);
if(Key1==0)
{
flag_set++;
if(flag_set==4)
{flag_set=0;
TR0=1;
}
}
while(!Key1)DigDisplay(); Count(); //°´¼üÊÍ·Å
}
if(flag_set==1)
{
//TR0=0;
if(Key2==0)
{
delay(10);
if(Key2==0)
{
sec++;
if(sec>59){
sec=0;
}
while(!Key2) DigDisplay(); Count(); }
}
if(Key3==0)
{
delay(10);
if(Key3==0)
{
if(sec>0)
sec--;
else{
sec=59;Count();
}
while(!Key3) DigDisplay(); Count(); }
}
}
if(flag_set==2)
{
if(Key2==0)
{
delay(10);
if(Key2==0)
{
min++;
if(min>59){
min=0;
}
while(!Key2) DigDisplay(); Count(); }
}
if(Key3==0)
{
delay(10);
if(Key3==0)
{
if(min>0)
min--;
else
min=59;Count();
while(!Key3) DigDisplay(); Count(); }
}
}
if(flag_set==3)
{
if(Key3==0)
{
delay(10);
if(Key3==0)
{
if(hour>0)
hour--;
else
hour=23;Count();
while(!Key3) DigDisplay(); Count();
}
}
if(Key2==0)
{
delay(10);
if(Key2==0)
{
hour++;
if(hour>23){
hour=0;
}
}
while(!Key2) DigDisplay(); Count();
}
}
if(K1==0)
{TR0=1;}
while(!K1) DigDisplay();Count();
if(K2==0)
{
delay(5);
if(K2==0)
{
TR0=0; //¹Ø±Õ¶¨Ê±Æ÷
}
} while(!K2)DigDisplay();Count();
if(K3==0)
{
delay(10);
if(K3==0)
{
sec=0;hour=0;min=0;
TH0=0x3c;//É趨T0³õʼֵ£¨¸ß°Ë룩
TL0=0xb0;
}
}while(!K3) DigDisplay();Count();
}
void main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
ET0=1;
EA=1;
TR0=1;
while(1)
{
KEY();
Count();
DigDisplay();
}
}
void time1() interrupt 1
{
uchar m;
TH0=0x3c;
TL0=0xb0;
m++;
if(m==20)
{
m=0;
if(flag_set==0)
{
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)
{
hour=0;
}
}
}
}
}
}
感谢您对我分享的支持。为了进一步提供深入、精彩的代码,我考虑将源码设为付费订阅(0米即可!!!这不收费呦,如果你想支持我就请关注我的公众号!我会不定期发一些stm32和单片机工程的!希望您能用得上!)。您的支持对我来说非常非常非常重要!!如果您接受的话还请麻烦您移步微信公众号:CV工程师猫猫头1号 回复:最简单的数码管时钟
Ciallo~(∠・ω< )⌒☆