找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5449|回复: 2
打印 上一主题 下一主题
收起左侧

基于51单片机电子时钟的实现

[复制链接]
跳转到指定楼层
楼主
ID:302179 发表于 2018-4-4 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit we = P2^7;
sbit du = P2^6;
sbit k1= P3^0 ;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uchar code leddata[]={

                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"  
                0x40,  //"-"
                0x00,  //熄灭               
                         };

void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}
void main()
{
                  uchar a;
                uchar sec,min,hour;
                uint year=2016;
                uint mou=12;
                uint day=9;       
                uint Yqian,Ybai,Yshi,Yge,Mshi,Mge,Dshi,Dge;
                uint shi1,ge1,shi2,ge2,shi3,ge3;
                TR0 = 1;       
                TMOD = 0x01;
                TH0 = (65535-5000)/0xff;
                TL0 = (65535-5000)%0xff;//0x4bfc        定时50ms               
                while(1)
                {
                        if(TF0 == 1)
                        {
                                TH0 = (65535-5000)/0xff;
                        TL0 = (65535-5000)%0xff;
                                TF0 = 0;
                                a++;
                        }
                        if(a == 40)
                        {       
                            sec++;
                            a = 0;                               
                        }
                        if(sec==60)
                        {
                            min++;
                            sec=0;       
                        }
                        if(min==60)
                        {
                            hour++;
                            min=0;
                        }       
                        if(hour==60)
                        {
                            hour=0;
                                hour++;
                        }
                        if(hour==24)
                        {
                                day++;
                                hour=0;        
                        }
                        if(day==31)
                        {
                                 mou++;
                                day=0;
                        }
                        if(mou==13)
                        {
                                year++;
                                mou=0;
                        }       
                     shi1=hour%10;
                         ge1=hour/10;
                        shi2=min%10;
                        ge2=min/10;
                        shi3=sec%10;
                        ge3=sec/10;

                        P0 = 0xff;
                        we = 1;
                        P0 = 0xbf;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[ge3];
                        du = 0;       
                        delay(3);            //

                        P0 = 0xff;
                        we = 1;
                        P0 = 0x7f;
                        we = 0;
                               
                        du = 1;       
                        P0 = leddata[shi3];
                        du = 0;       
                        delay(3);            //
                         
                        P0 = 0xff;
                        we = 1;
                        P0 = 0xdf;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[10];
                        du = 0;       
                        delay(3);            //

                        P0 = 0xff;
                        we = 1;
                        P0 = 0xfb;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[10];
                        du = 0;       
                        delay(3);            //
       
                        P0 = 0xff;
                        we = 1;       
                        P0 = 0xef;
                        we = 0;
                                       
                        du = 1;
                        P0 = leddata[shi2];
                        du = 0;       
                        delay(3);            //
                          
                        P0 = 0xff;
                        we = 1;       
                        P0 = 0xf7;
                        we = 0;       
                               
                        du = 1;
                        P0 = leddata[ge2];
                        du = 0;       
                        delay(3);            //

                            P0 = 0xff;
                        we = 1;       
                        P0 = 0xfd;
                        we = 0;       
                               
                        du = 1;
                        P0 = leddata[shi1];
                        du = 0;       
                        delay(3);           //

                            P0 = 0xff;
                        we = 1;       
                        P0 = 0xfe;
                        we = 0;       
                               
                        du = 1;
                        P0 = leddata[ge1];
                        du = 0;       
                        delay(3);
                if(k1==0)               
                {       
                  delay(1000);   //消除抖动 一般大约10ms
                  if(k1==0)         //再次判断按键是否按下
                  {       
                   while(!k1)   //按键时显示日期
                       {
                    Yqian=year/1000;
                        Ybai=year%1000/100;
                        Yshi=year%1000%100/10;
                        Yge=year%10;
                        Mshi=mou/10;
                        Mge=mou%10;
                        Dshi=day/10;
                        Dge=day%10;
               
                          P0 = 0xff;
                        we = 1;
                        P0 = 0xfe;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[Yqian];
                        du = 0;       
                        delay(3);            //

                        P0 = 0xff;
                        we = 1;
                        P0 = 0xfd;
                        we = 0;
                               
                        du = 1;       
                        P0 = leddata[Ybai];
                        du = 0;       
                        delay(3);            //
                         
                        P0 = 0xff;
                        we = 1;
                        P0 = 0xfb;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[Yshi];
                        du = 0;       
                        delay(3);            //

                        P0 = 0xff;
                        we = 1;
                        P0 = 0xf7;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[Yge];
                        du = 0;       
                        delay(3);            //
       
                        P0 = 0xff;
                        we = 1;       
                        P0 = 0xef;
                        we = 0;
                                       
                        du = 1;
                        P0 = leddata[Mshi];
                        du = 0;       
                        delay(3);            //
                          
                        P0 = 0xff;
                        we = 1;       
                        P0 = 0xdf;
                        we = 0;       
                               
                        du = 1;
                        P0 = leddata[Mge];
                        du = 0;       
                        delay(3);            //

                            P0 = 0xff;
                        we = 1;       
                        P0 = 0xbf;
                        we = 0;       
                               
                        du = 1;
                        P0 = leddata[Dshi];
                        du = 0;       
                        delay(3);           //

                            P0 = 0xff;
                        we = 1;       
                        P0 = 0x7f;
                        we = 0;       
                               
                        du = 1;
                        P0 = leddata[Dge];
                        du = 0;       
                        delay(3);
                        }
                  }
                  while(!k1);         
            }
          if(k2==0)         
          {
            delay(1000);
                if(k2==0)
                {
                  while(!k2)
                  {
                     uchar i;
                         uchar sec2,Sshi,Sge;
                         Sshi=sec2/10;
                         Sge=sec2%10;
                     TR0 = 1;       
                     TMOD = 0x01;
                     TH0 = (65535-5000)/0xff;
                     TL0 = (65535-5000)%0xff;//0x4bfc        定时50ms       
                         if(TF0 == 1)
                        {
                          
                                TH0 = (65535-5000)/0xff;
                        TL0 = (65535-5000)%0xff;
                                TF0 = 0;
                                i++;
                        }
                        if(i== 160)
                        {       
                            sec2++;
                            i = 0;                               
                        }
                        if(sec2==60)
                        {
                            sec2=0;       
                        }
                        P0 = 0xff;
                        we = 1;
                        P0 = 0xbf;
                        we = 0;
                               
                        du = 1;
                        P0 = leddata[Sshi];
                        du = 0;       
                        delay(3);            //

                        P0 = 0xff;
                        we = 1;
                        P0 = 0x7f;
                        we = 0;
                               
                        du = 1;       
                        P0 = leddata[Sge];
                        du = 0;       
                        delay(3);            //
                         
                  }
                  while(!k2)  ;
                }
          }
          if(k3==0)
          {
            delay(1000);
                 if(k3==0)
                  {
                  while(!k3)
                    { TR0=0;
                          sec--;
                         while(!k3);}
                  }while(!k3);
          }
          if(k4==0)
          {
           delay(1000);
           if(k4==0)
           {
            TR0=1;
           }
          }     
        }

               
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:441102 发表于 2018-12-23 12:44 | 只看该作者
有没有仿真图?
回复

使用道具 举报

板凳
ID:544367 发表于 2019-6-10 14:05 | 只看该作者
大佬不带仿真图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表