标题: 51单片机的一个电子日历c程序如何才能切换到年月日? [打印本页]

作者: 819513722    时间: 2019-12-20 11:36
标题: 51单片机的一个电子日历c程序如何才能切换到年月日?
单片机上有八位共阴数码管和一位共阳数码管
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);
                                   }
                                  }
                                 }
                }

}

51黑论坛_LY-51S V2.3 电路原理图.pdf

108.24 KB, 下载次数: 12


作者: csmyldl    时间: 2019-12-20 15:00
把要显示的数建立一个与显示位数相同的数组,数组中的内容一段时间放时间数据,一段时间放日历数据,单片机只要不断循环去数组中取数据进行显示,这些就实现了切换
作者: imxuheng    时间: 2019-12-20 15:18
这个程序没有包含年月日计算功能




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1