找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8058|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機電子時鐘+萬歷表+鬧鐘(代碼+原理圖+PCB文件)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:323044 發(fā)表于 2019-6-26 11:13 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
                        電 子 時 鐘 萬 年 歷 + 鬧 鐘 設(shè) 置
實 現(xiàn) 功 能 :1 . 一 上 電 顯 示 00-00-00 ,且 ‘-’ 一 秒 閃 爍 一 次
                    2 . 按 鍵 功 能 :
                      k1:設(shè) 置 位
                      k2:加 位
                      k3:減 位
                      k4:萬 年 歷 、鬧 鐘 、時 鐘 切 換 位      
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)

單片機源程序如下:
  1. /********************************************************
  2.                         電 子 時 鐘 萬 年 歷 + 鬧 鐘 設(shè) 置
  3. 實 現(xiàn) 功 能 :1 . 一 上 電 顯 示 00-00-00 ,且 ‘-’ 一 秒 閃 爍 一 次
  4.                       2 . 按 鍵 功 能 :
  5.                             k1:設(shè) 置 位
  6.                             k2:加 位
  7.                       k3:減 位
  8.                       k4:萬 年 歷 、鬧 鐘 、時 鐘 切 換 位                                   
  9. *********************************************************/
  10. #include <reg52.h>
  11. typedef         unsigned char u8;
  12. typedef  unsigned int  u16;

  13. u16 i,j,k;
  14. u8 anjian,jia,jian,beep;
  15. u8 sec,min,hour,shine;
  16. u8 N_sec,N_min,N_hour;                //鬧鐘
  17. u8 shine1;
  18. u16 year=2019,month=6,day=17;

  19. sbit buzzer=P3^7;
  20. sbit k2=P3^1;
  21. sbit k1=P3^0;
  22. sbit k3=P3^2;
  23. sbit k4=P3^3;

  24. u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //數(shù)碼管顯示0123456789- 空

  25. u8 code smgwei[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};         //選擇1-8位數(shù)碼管

  26. /********延時函數(shù)*************/
  27. void delay(i)
  28. {
  29.         while(i--);
  30. }

  31. /***********數(shù)碼管段位選********/
  32. void time(j,k)
  33. {        
  34.         P2=smgwei[j];          //數(shù)碼管位選
  35.         P0=smgduan[k];          //數(shù)碼管段選
  36.         delay(100);                  //間隔一段時間
  37. }

  38. /**********數(shù)碼管時間循環(huán)流動**********/
  39. void time_Display()
  40. {
  41.    if(shine == 1)    //3、6位數(shù)碼管'-'閃爍
  42.         {
  43.                  time(2,11);
  44.                  time(5,11);           
  45.         }
  46.         else if(shine==0)
  47.         {
  48.                  time(2,10);
  49.                  time(5,10);
  50.         }

  51.    if(anjian==0)        //一上電,時鐘顯示00-00-00
  52.           {
  53.             time(0,sec%10);
  54.                 time(1,sec/10);
  55.                 time(3,min%10);
  56.                 time(4,min/10);
  57.                 time(6,hour%10);
  58.                 time(7,hour/10);
  59.         }

  60.         else if(anjian==1)        //切換設(shè)置模式,選擇位為秒位
  61.         {
  62.                 TR0=0;                        //關(guān)閉定時器0,在設(shè)置模式下時鐘不運行
  63.                 TR1=1;                        //打開定時器1,開始計數(shù)
  64.         if(shine1<=50)        //在shine1為0-50區(qū)間內(nèi),即1秒滅
  65.         {
  66.                 time(0,11);
  67.                 time(1,11);
  68.         }
  69.         else if((shine1>50)&&(shine1<=100))         //在shine1為50-100區(qū)間內(nèi),即1秒亮
  70.         {
  71.                 time(0,sec%10);
  72.                 time(1,sec/10);
  73.         }
  74.                 time(3,min%10);        //其他不變
  75.             time(4,min/10);
  76.             time(6,hour%10);
  77.              time(7,hour/10);
  78.         }

  79.         else if(anjian==2)        //設(shè)置模式下,選擇位為分位
  80.         {
  81.                 TR0=0;                        //關(guān)閉定時器0,在設(shè)置模式下時鐘不運行
  82.                 TR1=1;                        //打開定時器1,開始計數(shù)
  83.                 if(shine1<=50)        //在shine1為0-50區(qū)間內(nèi),即1秒滅
  84.                 {
  85.                         time(3,11);
  86.                         time(4,11);
  87.             }
  88.            else if((shine1>50)&&(shine1<=100)) //在shine1為50-100區(qū)間內(nèi),即1秒亮
  89.            {
  90.                  time(3,min%10);
  91.              time(4,min/10);
  92.            }
  93.             time(0,sec%10);        //其他不變           
  94.              time(1,sec/10);
  95.                 time(6,hour%10);
  96.              time(7,hour/10);
  97.         }
  98.         else if(anjian==3)        //設(shè)置模式下,選擇位為時位
  99.         {
  100.                 TR0=0;                        //關(guān)閉定時器0,在設(shè)置模式下時鐘不運行
  101.                 TR1=1;                        //打開定時器1,開始計數(shù)
  102.                 if(shine1<=50)        //在shine1為0-50區(qū)間內(nèi),即1秒滅
  103.                 {
  104.                         time(6,11);
  105.                         time(7,11);
  106.                         }
  107.                 else if((shine1>50)&&(shine1<=100))        //在shine1為50-100區(qū)間內(nèi),即1秒亮
  108.                 {
  109.                         time(6,hour%10);
  110.                         time(7,hour/10);
  111.                 }
  112.                         time(0,sec%10);         //其他不變
  113.                         time(1,sec/10);
  114.                         time(3,min%10);
  115.                         time(4,min/10);
  116.                 }

  117.         //k2加一功能        
  118.         if(jia==1&&anjian==1)  //選擇秒位時,按下k2加一
  119.         {        
  120.                 jia=0;
  121.                 sec++;
  122.                 if(sec>59)
  123.                 sec=0;
  124.                 TR0=0;                          //時鐘暫停
  125.         }

  126.         if(jia==1&&anjian==2)        //選擇分位時,按下k2加一
  127.         {        
  128.                 jia=0;
  129.                 min++;
  130.                 if(min>59)
  131.                 min=0;
  132.                 TR0=0;                           //時鐘暫停
  133.         }

  134.         if(jia==1&&anjian==3)  //選擇時位時,按下k2加一
  135.         {        
  136.                 jia=0;
  137.                 hour++;
  138.                 if(hour==24)
  139.                 hour=0;
  140.                 TR0=0;                           //時鐘暫停
  141.         }

  142.         //k3減一功能
  143.         if(jian==1&&anjian==1)        //選擇秒位時,按下k3減一
  144.         {        
  145.                 jian=0;
  146.                 sec--;
  147.                 if(sec==-1)
  148.                 sec=59;
  149.                 TR0=0;                                //時鐘暫停
  150.         }
  151.         if(jian==1&&anjian==2)        //選擇分位時,按下k3減一
  152.         {        
  153.                 jian=0;
  154.                 min--;
  155.                 if(min==-1)
  156.                 min=59;
  157.                 TR0=0;                            //時鐘暫停
  158.         }


  159.         if(jian==1&&anjian==3)        //選擇時位時,按下k3減一
  160.         {        
  161.                 jian=0;
  162.                 hour--;
  163.                 if(hour==-1)
  164.                 hour=23;
  165.                 TR0=0;                            //時鐘暫停
  166.         }
  167. }
復(fù)制代碼
詳細代碼在附件中


全部資料51hei下載地址:
51單片機電子時鐘 萬歷表 鬧鐘(代碼 原理圖 PCB).zip (2.04 MB, 下載次數(shù): 146)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:409824 發(fā)表于 2019-7-10 10:48 | 只看該作者
里面文件少了,和帖子里面的有誤差
回復(fù)

使用道具 舉報

板凳
ID:323044 發(fā)表于 2019-7-10 12:09 | 只看該作者
電子愛好者1號 發(fā)表于 2019-7-10 10:48
里面文件少了,和帖子里面的有誤差

少了啥?
回復(fù)

使用道具 舉報

地板
ID:782897 發(fā)表于 2020-6-18 15:08 來自手機 | 只看該作者
老哥,仿真圖不來一張?
回復(fù)

使用道具 舉報

5#
ID:1091598 發(fā)表于 2024-6-4 12:14 | 只看該作者
請問燒錄口是在USB口嗎
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表