|
100黑币
单片机上有八位共阴数码管和一位共阳数码管
1、可以显示时分秒:xx-xx-xx 按键可调
2、按键后可切换至年月日 例如20191220 按键可调
3、单一以为的共阳数码管显示对应的星期数,比如星期一星期二
已经能够写出单一显示时分秒的程序了。但是不知道该怎么写才能切换到年月日 还要显示星期数求大佬指点
感激不尽
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^3;
sbit du = P2^2;
sbit S2 = P3^0;
sbit S3 = P3^1;
uchar counter,second,min,hour;
uchar code leddata[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
0x5e , 0x79 , 0x71 , 0x00};
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for (y = 120;y > 0 ;y--);
}
void main()
{
TMOD = 0x10;// 定时器1工作模式1 16模式位定时器
TH1 = 0x4b;
TL1 = 0xfe;//定时50ms
TR1 = 1;//启动定时器
while(1)
{
if(TF1 ==1)
{
TF1 = 0;
TH1 = 0x4b;
TL1 = 0xfe;
counter++;
}
if(counter == 19)
{
counter = 0;
second++;
if(second == 60)//记满一分钟
{
second = 0;
min++;
if(min == 60)//记满一小时
{
min = 0;
hour++;
if(hour == 24)
{
hour = 0;
}
}
}
}
P1 = 0xff;
we = 1;
P1 = 0x7f;
we = 0;
du = 1;
P1 = leddata[second%10];
du = 0;
delay(1);
we = 1;
P1 = 0xbf;
we = 0;
du = 1;
P1 = leddata[second/10];
du = 0;
delay(1);
we = 1;
P1 = 0xef;
we = 0;
du = 1;
P1 = leddata[min%10];
du = 0;
delay(1);
we = 1;
P1 = 0xf7;
we = 0;
du = 1;
P1 = leddata[min/10];
du = 0;
delay(1);
we = 1;
P1 = 0xfd;
we = 0;
du = 1;
P1 = leddata[hour%10];
du = 0;
delay(1);
we = 1;
P1 = 0xfe;
we = 0;
du = 1;
P1 = leddata[hour/10];
du = 0;
delay(1);
we = 1;
P1 = 0xdf;
we = 0;
du = 1;
P1 = 0x40;
du = 0;
delay(1);
we = 1;
P1 = 0xfb;
we = 0;
du = 1;
P1 = 0x40;
du = 0;
delay(1);
if(S2 == 0)
{
delay(1);
if(S2 == 0)
{
delay(1);
if(S2 == 0)
{
min++;
if(min == 60)
{min = 0; hour++;}
while(!S2);
}
}
}
if(S3 == 0)
{
delay(1);
if(S3 == 0)
{
delay(1);
if(S3 == 0)
{
hour++;
if(hour == 24)
{hour = 0;}
while(!S3);
}
}
}
}
}
|
|