久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

51單片機(jī)控制8位一體數(shù)碼管或兩個(gè)4位一體數(shù)碼管實(shí)現(xiàn)萬年歷功能(時(shí)間、日期、鬧鐘)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

要求
顯示當(dāng)前時(shí)間與日期。
手動(dòng)修改時(shí)間、日期信息,修改該位信息時(shí)該數(shù)碼管閃爍。
手動(dòng)開啟/關(guān)閉鬧鐘功能,而且有鬧鐘狀態(tài)指示燈。
手動(dòng)設(shè)置鬧鐘,而且當(dāng)達(dá)到設(shè)置好的時(shí)間點(diǎn)時(shí)報(bào)警,報(bào)警時(shí)長(zhǎng)為5s。
分析
萬年歷的整體設(shè)計(jì)如圖所示:

51單片機(jī)核心模塊包括51單片機(jī)最小系統(tǒng)模塊,是設(shè)計(jì)應(yīng)用的控制核心;顯示模塊用于顯示時(shí)間與日期、設(shè)計(jì)鬧鐘時(shí)間等信息;指示燈包括時(shí)間日期暫停計(jì)數(shù)指示燈和鬧鐘開啟或關(guān)閉狀態(tài)指示燈;鬧鐘采用蜂鳴器發(fā)出聲音警報(bào);鍵盤輸入模塊用來設(shè)置和切換時(shí)間、日期,開啟或關(guān)閉鬧鐘,設(shè)置鬧鐘時(shí)間等。

制作出來的實(shí)物圖如下:


可用安卓接口5V供電,也可接學(xué)生電源或兩個(gè)3.7V的電池通過LM7805穩(wěn)壓管供電。

功能介紹:
    程序初始化處于時(shí)間計(jì)數(shù)狀態(tài)(已設(shè)置初始值為12:12:00),按下Key2選擇位校準(zhǔn)位,按下第一次選中秒鐘,第二次選中分鐘,第三次選中時(shí)鐘,第四次退出校時(shí)功能,被選中位不斷閃爍,并且按下Key3可進(jìn)行被選擇位逐漸加一,實(shí)現(xiàn)校時(shí)。按下Key4,數(shù)碼管顯示界面跳轉(zhuǎn)為日期顯示,按下按鍵Key2Key3 可實(shí)現(xiàn)與時(shí)間同一校準(zhǔn)時(shí)間的功能,再次按下Key4切換為時(shí)間界面。在時(shí)間顯示或者日期顯示狀態(tài)下,按下按鍵Key1可獨(dú)立暫停時(shí)間計(jì)數(shù)或日期的增加,并且LED1指示燈亮。
    按下按鍵K3開啟鬧鐘功能,LED2亮,再次按下則關(guān)閉鬧鐘,LED2滅。按下K4切換為鬧鐘設(shè)置狀態(tài)(已設(shè)置鬧鐘初始值為12:12:00),按下K1進(jìn)行分鐘位加一,按下Key2切換為時(shí)鐘位調(diào)時(shí),按下K1進(jìn)行時(shí)鐘位加一,在鬧鐘狀態(tài)下秒鐘不可調(diào)。在進(jìn)入鬧鐘設(shè)置功能前,需先開啟鬧鐘功能,否則鬧鐘不會(huì)到點(diǎn)鬧鈴。按下K2退出鬧鐘設(shè)置界面,等到實(shí)時(shí)時(shí)間與所設(shè)置鬧鐘時(shí)間一致時(shí),蜂鳴器響5s鐘,中途可按下K3關(guān)閉蜂鳴器,并且關(guān)閉鬧鐘功能。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


程序流程圖:


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uChar unsigned char
  3. #define uInt  unsigned int

  4. uChar a[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};        //數(shù)碼管段選碼,0——9     
  5. uChar b[]={~0xfe,~0xfd,~0xfb,~0xf7,~0xef,~0xdf,~0xbf,~0x7f};        //數(shù)碼管位選碼,高——低   
  6. uChar second=0,minute=12,hour=12,month=1,day=13,count; uInt year=2019;
  7. uChar f_nao=12,s_nao=12;                //鬧鐘分計(jì)數(shù),鬧鐘時(shí)計(jì)數(shù)
  8. uChar wave=0;                //定時(shí)器1對(duì)0.1ms定時(shí)時(shí)間進(jìn)行計(jì)數(shù),控制蜂鳴器響的頻率
  9. bit flag_nao;                //控制鬧鐘開關(guān)變量         flag_nao= 0-off;1--on

  10. sbit K1   = P3^0;       //設(shè)置鬧鐘分/時(shí)位加一
  11. sbit K2   = P3^1;                //退出設(shè)置鬧鐘
  12. sbit K3   = P3^2;            //鬧鐘開關(guān)
  13. sbit K4   = P3^3;       //進(jìn)入設(shè)置鬧鐘狀態(tài)
  14. sbit Key1 = P3^4;       //計(jì)時(shí)停止
  15. sbit Key2 = P3^5;                //調(diào)位(校準(zhǔn))
  16. sbit Key3 = P3^6;            //所調(diào)位加一        
  17. sbit Key4 = P3^7;       //切換時(shí)-分-秒、年-月-日
  18. sbit BEEP = P2^2;                //蜂鳴器端口
  19. sbit LED1 = P2^0;                  //計(jì)時(shí)停止時(shí)LED1亮
  20. sbit LED2 = P2^1;                //鬧鐘開啟時(shí)LED2亮
  21.                                                 
  22. //函數(shù)聲明
  23. void Delayms(uInt t);         //長(zhǎng)延時(shí)函數(shù)
  24. void Dispaly1(uChar second,uChar minute,uChar hour);        //時(shí)-分-秒顯示
  25. void Dispaly2(uChar day,uChar month,uInt year);                        //年-月-日顯示
  26. void Keyscan1();                                                                                //按鍵Key4按下次數(shù)為雙數(shù)時(shí)(按鍵Key1~3控制時(shí)-分-秒)
  27. void Keyscan2();                                                                                //按鍵Key4按下次數(shù)為單數(shù)時(shí)(按鍵Key1~3控制年-月-日)
  28. void nao_judge();                                                                                //判斷鬧鐘
  29.    
  30. /*************時(shí)-分-秒、年-月-日閃爍函數(shù)聲明*********************/
  31. void delay(uInt t);                                                                                         /***/
  32. void Bright1(uChar second,uChar minute,uChar hour);                         /***/
  33. void Hour_flicker(uChar second,uChar minute,uChar hour);         /***/
  34. void Minute_flicker(uChar second,uChar minute,uChar hour);         /***/
  35. void Second_flicker(uChar second,uChar minute,uChar hour);          /***/
  36. void Bright2(uChar day,uChar month,uInt year);                                 /***/
  37. void Year_flicker(uChar day,uChar month,uInt year);                         /***/
  38. void Month_flicker(uChar day,uChar month,uInt year);                 /***/
  39. void Day_flicker(uChar day,uChar month,uInt year);                          /***/
  40. /*************時(shí)-分-秒、年-月-日閃爍函數(shù)聲明*********************/

  41. //主函數(shù)
  42. void main()
  43. {
  44.         TMOD=0x11;        //置T0、T1都為工作方式1   
  45.            TH0=(65536-10000)/256;
  46.         TL0=(65536-10000)%256;           
  47.         TR0=1;        //開啟T0
  48.         ET0=1;        //打開T0中斷允許位
  49.         IT1=1;        //設(shè)置外部中斷1為下降沿觸發(fā)
  50.         IT0=0;        //設(shè)置外部中斷0為低電平觸發(fā)
  51.         EX1=1;        //打開外部中斷1允許位
  52.         EX0=1;        //打開外部中斷0允許位
  53.         PT0=1;        //設(shè)置內(nèi)部定時(shí)中斷優(yōu)先級(jí)大于外部中斷優(yōu)先級(jí)
  54.         EA=1;        //打開中斷總允許位

  55.         BEEP=1;         
  56.         flag_nao=0;
  57.         while(1)
  58.         {
  59.                 static        uChar h=0;         
  60.                 nao_judge();                                       
  61.                 if(Key4==0)                                                                                       
  62.                 {
  63.                         Delayms(10);                                                                                
  64.                         if(Key4==0)
  65.                                 while(!Key4);        //空操作,等待按鍵釋放
  66.                         h++;
  67.                 }
  68.                         if(h%2==1)                                                                                       
  69.                         {
  70.                                 Dispaly2(day,month,year);
  71.                                 Keyscan2();        
  72.                         }               
  73.                         if(h%2==0)
  74.                         {
  75.                                 Dispaly1(second,minute,hour);
  76.                                 nao_judge();
  77.                                 Keyscan1();                                
  78.                         }
  79.         }
  80. }

  81. //長(zhǎng)延時(shí)函數(shù)
  82. void Delayms(uInt t)
  83. {                  
  84.         uInt i,j;
  85.         for(i=0;i<t;i++)
  86.                 for(j=0;j<125;j++)
  87.                         ;
  88. }

  89. //時(shí)-分-秒顯示
  90. void Dispaly1(uChar second,uChar minute,uChar hour)
  91. {
  92.                 P0=b[0];
  93.                 P1=a[hour/10];
  94.                 Delayms(1);
  95.                 P1=0xff;

  96.                 P0=b[1];
  97.                 P1=a[hour%10];
  98.                 Delayms(1);
  99.                 P1=0xff;

  100.                 P0=b[2];               
  101.                 P1=0xbf;        
  102.                 Delayms(1);
  103.                 P1=0xff;

  104.                 P0=b[3];               
  105.                 P1=a[minute/10];               
  106.                 Delayms(1);
  107.                 P1=0xff;

  108.                 P0=b[4];               
  109.                 P1=a[minute%10];        
  110.                 Delayms(1);
  111.                 P1=0xff;

  112.                 P0=b[5];        
  113.                 P1=0xbf;               
  114.                 Delayms(1);
  115.                 P1=0xff;

  116.                 P0=b[6];                        
  117.                 P1=a[second/10];        
  118.                 Delayms(1);
  119.                 P1=0xff;

  120.                 P0=b[7];        
  121.                 P1=a[second%10];               
  122.                 Delayms(1);         
  123.                 P1=0xff;
  124. }

  125. //年-月-日顯示
  126. void Dispaly2(uChar day,uChar month,uInt year)
  127. {
  128.                 P0=b[7];
  129.                 P1=a[day%10];
  130.                 Delayms(1);           
  131.                 P1=0xff;

  132.                 P0=b[6];
  133.                 P1=a[day/10];
  134.                 Delayms(1);            
  135.                 P1=0xff;

  136.                 P0=b[5];               
  137.                 P1=a[month%10]&0x7f;                                
  138.                 Delayms(1);           
  139.                 P1=0xff;

  140.                 P0=b[4];               
  141.                 P1=a[month/10];        
  142.                 Delayms(1);            
  143.                 P1=0xff;

  144.                 P0=b[3];        
  145.                 P1=a[year%10]&0x7f;               
  146.                 Delayms(1);            
  147.                 P1=0xff;

  148.                 P0=b[2];                                
  149.                 P1=a[(year%100)/10];               
  150.                 Delayms(1);                  
  151.                 P1=0xff;

  152.                 P0=b[1];        
  153.                 P1=a[(year/100)%10];               
  154.                 Delayms(1);                     
  155.                 P1=0xff;

  156.                 P0=b[0];        
  157.                 P1=a[(year/1000)];               
  158.                 Delayms(1);                           
  159.                 P1=0xff;
  160. }

  161. //按鍵Key4按下次數(shù)為雙數(shù)時(shí)(控制時(shí)-分-秒),按鍵Key1~3的控制
  162. void Keyscan1()
  163. {
  164.         static        uChar i=0,j=0;        //static-保存變量數(shù)據(jù),不會(huì)清零                                       
  165.         if(Key1==0)                                                                                                
  166.         {
  167.                 Delayms(10);                //消抖                                                                                
  168.                 if(Key1==0)           
  169.                         while(!Key1);          //等待按鍵彈起
  170.                 i++;
  171.         }        
  172.                 if(i%2==1)                //若Key1按下次數(shù)為單數(shù)時(shí),停止計(jì)數(shù)                                                                                                
  173.                 {
  174.                         LED1=0;
  175.                         TR0=0;
  176.                 }        
  177.                 if(i%2==0)                //若Key1按下次數(shù)為雙數(shù)時(shí),開始計(jì)數(shù)
  178.                 {
  179.                         LED1=1;               
  180.                         TR0=1;                                
  181.                 }
  182.          
  183.         if(Key2==0)                //按鍵Key2選擇調(diào)位                                                                                
  184.         {
  185.                 Delayms(10);                                                                                
  186.                 if(Key2==0)
  187.                         while(!Key2);
  188.                 j++;                                                                                
  189.         }
  190.                 if(j%4==1)        //按鍵按下一次
  191.                 {                        
  192.                         Second_flicker(second,minute,hour);                //秒顯示位閃爍  
  193.                         if(Key3==0)               
  194.                         {
  195.                                 Delayms(10);                                                                                
  196.                                 if(Key3==0)                //按鍵Key3進(jìn)行選定位加一
  197.                                         while(!Key3);
  198.                                 second++;
  199.                                 if(second==60)
  200.                                         second=0;
  201.                         }
  202.                 }        
  203.                 if(j%4==2)//按鍵按下兩次
  204.                 {
  205.                         Minute_flicker(second,minute,hour);         //分顯示位閃爍
  206.                         if(Key3==0)
  207.                         {
  208.                                 Delayms(10);                                                                                
  209.                                 if(Key3==0)
  210.                                         while(!Key3);
  211.                                 minute++;
  212.                                 if(minute==60)
  213.                                         minute=0;                                       
  214.                         }
  215.                 }
  216.                 if(j%4==3)//按鍵按下三次
  217.                 {                  
  218.                         Hour_flicker(second,minute,hour);                //時(shí)顯示位閃爍
  219.                         if(Key3==0)
  220.                         {               
  221.                                 Delayms(10);                                                                                
  222.                                 if(Key3==0)
  223.                                         while(!Key3);
  224.                                 hour++;                        
  225.                                 if(hour==24)
  226.                                         hour=0;                                
  227.                         }
  228.                 }
  229. }

  230. //按鍵Key4按下次數(shù)為單數(shù)時(shí)(控制年-月-日),按鍵Key1~3的控制
  231. void Keyscan2()
  232. {
  233.         static        uChar m=0,n=0;                                                
  234.         if(Key1==0)                                                                                                
  235.         {
  236.                 Delayms(10);                                                                                
  237.                 if(Key1==0)
  238.                         while(!Key3);
  239.                 m++;
  240.         }
  241.                 if(m%2==1)                                                                                                
  242.                 {
  243.                         LED1=0;
  244.                         TR0=0;
  245.                 }                                                                                                                                                                                          
  246.                 if(m%2==0)
  247.                 {
  248.                         LED1=1;
  249.                         TR0=1;                                                
  250.                 }

  251.         if(Key2==0)                                                                                                
  252.         {
  253.                 Delayms(10);                                                                                
  254.                 if(Key2==0)
  255.                         while(!Key2);
  256.                 n++;                                                                                
  257.         }
  258.                 if(n%4==1)
  259.                 {
  260.                         Day_flicker(day,month,year);        //日顯示位閃爍
  261.                         if(Key3==0)
  262.                         {
  263.                                 Delayms(10);                                                                                
  264.                                 if(Key3==0)
  265.                                         while(!Key3);
  266.                                 day++;
  267.                                 if(day==32)
  268.                                         day=1;
  269.                         }
  270.                 }        
  271.                 if(n%4==2)
  272.                 {
  273.                         Month_flicker(day,month,year);        //月顯示位閃爍
  274.                         if(Key3==0)
  275.                         {               
  276.                                 Delayms(10);                                                                                
  277.                                 if(Key3==0)
  278.                                         while(!Key3);
  279.                                 month++;
  280.                                 if(month==13)
  281.                                         month=1;                                       
  282.                         }
  283.                 }        
  284.                 if(n%4==3)
  285.                 {
  286.                         Year_flicker(day,month,year);        //年顯示位閃爍
  287.                         if(Key3==0)
  288.                         {               
  289.                                 Delayms(10);                                                                                
  290.                                 if(Key3==0)
  291.                                         while(!Key3);
  292.                                 year++;
  293.                                 if(year==10000)
  294.                                         year=0;                                
  295.                         }
  296.                 }
  297. }

  298. //判斷鬧鐘,當(dāng)時(shí)間和設(shè)置鬧鐘時(shí)間相等時(shí),鬧鈴響5S
  299. void nao_judge()
  300. {
  301.         if(flag_nao==1)                 //如果flag_nao為真,鬧鐘開啟
  302.         {
  303.                 if((minute==f_nao)&&(hour==s_nao))                //判斷實(shí)時(shí)時(shí)間和鬧鐘時(shí)間的分、時(shí)是否同時(shí)相等
  304.                 {
  305.                         while(second<5&&flag_nao)                //如果second<=5和flag_nao都為真,鬧鈴響5s
  306.                         {
  307.                                 BEEP=0;         //TR1=1;        //開啟T0                                                        
  308.                                 Dispaly1(second,minute,hour);
  309.                         }
  310.                 }
  311.         }
  312.         BEEP=1;
  313. }

  314. //定時(shí)器中斷0,時(shí)鐘計(jì)數(shù)(不斷執(zhí)行)
  315. void time0_int(void) interrupt 1
  316. {
  317.         TH0=(65536-10000)/256;
  318.         TL0=(65536-10000)%256;
  319.         count++;
  320.         if(count==100)
  321.         {
  322.                 count=0;
  323.                 second++;
  324.                 if(second==60)
  325.                 {
  326.                         second=0;
  327.                         minute++;
  328.                         if(minute==60)
  329.                         {
  330.                                 minute=0;
  331.                                 hour++;
  332.                                 if(hour==24)
  333.                                 {
  334.                                         hour=0;
  335.                                         day++;
  336.                                         if(day==32)
  337.                                         {
  338.                                                 day=1;
  339.                                                 month++;
  340.                                                 if(month==13)
  341.                                                 {
  342.                                                         month=1;
  343.                                                         year++;
  344.                                                         if(year==10000)
  345.                                                         {
  346.                                                                 year=0;
  347.                                                         }
  348.                                                 }
  349.                                         }
  350.                                 }
  351.                         }
  352.                 }
  353.         }
  354. }

  355. //外部中斷0,鬧鐘開關(guān),控制flag_nao,按下K3關(guān)閉鬧鐘
  356. void guan_naozhong() interrupt 0           
  357. {
  358.         flag_nao=~flag_nao;
  359.         LED2=~LED2;
  360.         TR1 = 0;        //K3按下,開啟外部中斷0,關(guān)閉定時(shí)器中斷1,鬧鐘停止響鈴               
  361.         while(!K3)
  362.                 Dispaly1(second,minute,hour);
  363. }

  364. //外部中斷1,調(diào)節(jié)鬧鐘時(shí)間
  365. void naozhong() interrupt 2
  366. {
  367.         static uChar n=0;         
  368. //        s_nao=12;        //設(shè)置鬧鐘時(shí)鐘初始值
  369. //        f_nao=31;        //設(shè)置鬧鐘分鐘初始值
  370.         while(K2)        //等待按下K2退出,否則循環(huán)執(zhí)行鬧鐘時(shí)間設(shè)置
  371.         {
  372.                 Dispaly1(0,f_nao,s_nao);        //顯示鬧鐘設(shè)置
  373.                 if(Key2==0)                        //鬧鐘調(diào)位調(diào)時(shí)鐘、分鐘                                                                                       
  374.                 {
  375.                         Delayms(10);                                                                                
  376.                         if(Key2==0)
  377.                                 while(!Key2);
  378.                         n++;
  379.                 }
  380.                         if(n%2==1)                //調(diào)節(jié)鬧鐘時(shí)鐘                                                                                       
  381.                         {
  382.                                 if(K1==0)                                                                                                
  383.                                 {  
  384.                                         Dispaly1(0,f_nao,s_nao);
  385.                                         if(K1==0)                                                                                                
  386.                                         {  
  387.                                                 if(s_nao==23)        
  388.                                                         s_nao=0;
  389.                                                 else s_nao++;
  390.                                         }
  391.                                         while(!K1)
  392.                                                 Dispaly1(0,f_nao,s_nao);                        
  393.                                 }               
  394.                         }
  395.                         if(n%2==0)                //調(diào)節(jié)鬧鐘分鐘
  396.                         {
  397.                                 if(K1==0)                                                                                                
  398.                                 {  
  399.                                         Dispaly1(0,f_nao,s_nao);
  400.                                         if(K1==0)                                                                                                
  401.                                         {                                          
  402.                                                 if(f_nao==59)        
  403.                                                         f_nao=0;
  404.                                                 else f_nao++;
  405.                                         }
  406.                                         while(!K1)
  407.                                                 Dispaly1(0,f_nao,s_nao);        
  408.                                 }               
  409.                         }                                                                        
  410.         }
  411. }

  412.                                                   
  413. /************************************************/        
  414. /****************調(diào)位時(shí)選擇位閃爍****************/
  415. /************************************************/        
  416. //短延時(shí)
  417. void delay(uInt t)                                 
  418. {
  419.         uInt i;
  420.         for(i=0;i<t;i++)
  421.                 ;
  422. }

  423. //數(shù)碼管0~7位分別顯示時(shí)-分-秒
  424. void Bright1(uChar second,uChar minute,uChar hour)
  425. {
  426.         uChar p,k=10;
  427.         for(p=0;p<50;p++)
  428.         {
  429.                 P0=b[0];
  430.                 P1=a[hour/10];
  431.                 delay(k);
  432.                 P1=0xff;

  433.                 P0=b[1];
  434.                 P1=a[hour%10];
  435.                 delay(k);
  436.                 P1=0xff;

  437.                 P0=b[2];               
  438.                 P1=0xbf;        
  439.                 delay(k);
  440.                 P1=0xff;

  441.                 P0=b[3];               
  442.                 P1=a[minute/10];               
  443.                 delay(k);
  444.                 P1=0xff;

  445.                 P0=b[4];               
  446.                 P1=a[minute%10];        
  447.                 delay(k);
  448.                 P1=0xff;

  449.                 P0=b[5];        
  450.                 P1=0xbf;               
  451.                 delay(k);
  452.                 P1=0xff;

  453.                 P0=b[6];                        
  454.                 P1=a[second/10];        
  455.                 delay(k);
  456.                 P1=0xff;           

  457.                 P0=b[7];        
  458.                 P1=a[second%10];               
  459.                 delay(k);         
  460.                 P1=0xff;        
  461.         }
  462. }

  463. //秒顯示位閃爍
  464. void Second_flicker(uChar second,uChar minute,uChar hour)
  465. {
  466.         uChar p,k=10;
  467.         Bright1(second,minute,hour);
  468.         for(p=0;p<50;p++)
  469.         {
  470.                 P0=b[0];
  471.                 P1=a[hour/10];
  472.                 delay(k);
  473.                 P1=0xff;

  474.                 P0=b[1];
  475.                 P1=a[hour%10];
  476.                 delay(k);
  477.                 P1=0xff;

  478.                 P0=b[2];               
  479.                 P1=0xbf;        
  480.                 delay(k);
  481.                 P1=0xff;

  482.                 P0=b[3];               
  483.                 P1=a[minute/10];               
  484.                 delay(k);
  485.                 P1=0xff;

  486.                 P0=b[4];               
  487.                 P1=a[minute%10];        
  488.                 delay(k);
  489.                 P1=0xff;

  490.                 P0=b[5];        
  491.                 P1=0xbf;               
  492.                 delay(k);
  493.                 P1=0xff;

  494.                 P0=b[6];        //該位數(shù)碼管滅                        
  495.                 P1=0xff;         
  496.                 delay(k);

  497.                 P0=b[7];        //該位數(shù)碼管滅  
  498.                 P1=0xff;                        
  499.                 delay(k);        
  500.         }
  501. }

  502. //分顯示位閃爍
  503. void Minute_flicker(uChar second,uChar minute,uChar hour)
  504. {
  505.         uChar p,k=10;
  506.         Bright1(second,minute,hour);
  507.         for(p=0;p<50;p++)
  508.         {
  509.                 P0=b[0];
  510.                 P1=a[hour/10];
  511.                 delay(k);
  512.                 P1=0xff;

  513.                 P0=b[1];
  514.                 P1=a[hour%10];
  515.                 delay(k);
  516.                 P1=0xff;

  517.                 P0=b[2];               
  518.                 P1=0xbf;        
  519.                 delay(k);
  520.                 P1=0xff;

  521.                 P0=b[3];                           ////熄滅
  522.                 P1=0xff;                                
  523.                 delay(k);

  524.                 P0=b[4];                           ////熄滅
  525.                 P1=0xff;                        
  526.                 delay(k);

  527.                 P0=b[5];        
  528.                 P1=0xbf;               
  529.                 delay(k);
  530.                 P1=0xff;

  531.                 P0=b[6];                        
  532.                 P1=a[second/10];        
  533.                 delay(k);
  534.                 P1=0xff;           

  535.                 P0=b[7];        
  536.                 P1=a[second%10];               
  537.                 delay(k);         
  538.                 P1=0xff;        
  539.         }
  540. }

  541. //時(shí)顯示位閃爍
  542. void Hour_flicker(uChar second,uChar minute,uChar hour)
  543. {
  544.         uChar p,k=10;
  545.         Bright1(second,minute,hour);
  546.         for(p=0;p<50;p++)
  547.         {
  548.                 P0=b[0];                              ////熄滅
  549.                 P1=0xff;
  550.                 delay(k);

  551.                 P0=b[1];                              ////熄滅
  552.                 P1=0xff;
  553.                 delay(k);

  554.                 P0=b[2];               
  555.                 P1=0xbf;        
  556.                 delay(k);
  557.                 P1=0xff;

  558.                 P0=b[3];               
  559.                 P1=a[minute/10];               
  560.                 delay(k);
  561.                 P1=0xff;

  562.                 P0=b[4];               
  563.                 P1=a[minute%10];        
  564.                 delay(k);
  565.                 P1=0xff;

  566.                 P0=b[5];        
  567.                 P1=0xbf;               
  568.                 delay(k);
  569.                 P1=0xff;

  570.                 P0=b[6];                        
  571.                 P1=a[second/10];        
  572.                 delay(k);
  573.                 P1=0xff;           

  574.                 P0=b[7];        
  575.                 P1=a[second%10];               
  576.                 delay(k);         
  577.                 P1=0xff;
  578.         }
  579. }


  580. //數(shù)碼管0~7位分別顯示年-月-日
  581. void Bright2(uChar day,uChar month,uInt year)
  582. {
  583.         uChar p,k=10;
  584.         for(p=0;p<50;p++)
  585.         {
  586.                 P0=b[7];
  587.                 P1=a[day%10];
  588.                 delay(k);           
  589.                 P1=0xff;

  590.                 P0=b[6];
  591.                 P1=a[day/10];
  592.                 delay(k);     
  593.                 P1=0xff;

  594.                 P0=b[5];               
  595.                 P1=a[month%10]&0x7f;        
  596.                 delay(k);     
  597.                 P1=0xff;

  598.                 P0=b[4];               
  599.                 P1=a[month/10];        
  600.                 delay(k);     
  601.                 P1=0xff;

  602.                 P0=b[3];        
  603.                 P1=a[year%10]&0x7f;        
  604.                 delay(k);     
  605.                 P1=0xff;

  606.                 P0=b[2];                                
  607.                 P1=a[(year%100)/10];
  608.                 delay(k);     
  609.                 P1=0xff;

  610.                 P0=b[1];        
  611.                 P1=a[(year/100)%10];
  612.                 delay(k);     
  613.                 P1=0xff;

  614.                 P0=b[0];        
  615.                 P1=a[(year/1000)];        
  616.                 delay(k);        
  617.                 P1=0xff;
  618.         }
  619. }

  620. //日顯示位閃爍
  621. void Day_flicker(uChar day,uChar month,uInt year)
  622. {
  623.         uChar p,k=10;
  624.         Bright2(day,month,year);
  625.         for(p=0;p<50;p++)
  626.         {
  627.                 P0=b[7];                           ////熄滅
  628.                 P1=0xff;
  629.                 delay(k);     

  630.                 P0=b[6];                       ////熄滅
  631.                 P1=0xff;
  632.                 delay(k);     

  633.                 P0=b[5];               
  634.                 P1=a[month%10]&0x7f;        
  635.                 delay(k);     
  636.                 P1=0xff;

  637.                 P0=b[4];               
  638.                 P1=a[month/10];        
  639.                 delay(k);     
  640.                 P1=0xff;

  641.                 P0=b[3];        
  642.                 P1=a[year%10]&0x7f;               
  643.                 delay(k);     
  644.                 P1=0xff;

  645.                 P0=b[2];                                
  646.                 P1=a[(year%100)/10];        
  647.                 delay(k);     
  648.                 P1=0xff;

  649.                 P0=b[1];        
  650.                 P1=a[(year/100)%10];        
  651.                 delay(k);     
  652.                 P1=0xff;

  653.                 P0=b[0];        
  654.                 P1=a[(year/1000)];        
  655.                 delay(k);     
  656.                 P1=0xff;
  657.         }
  658. }

  659. //月顯示位閃爍
  660. void Month_flicker(uChar day,uChar month,uInt year)
  661. {
  662.         uChar p,k=10;
  663.         Bright2(day,month,year);
  664.         for(p=0;p<50;p++)
  665.         {
  666.                 P0=b[7];
  667.                 P1=a[day%10];
  668. ……………………

  669. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
萬年歷-原理圖 功能介紹 程序 PCB.zip (14.17 MB, 下載次數(shù): 158)



評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:470643 發(fā)表于 2019-1-19 20:24 | 只看該作者
74LS245是數(shù)碼管驅(qū)動(dòng)芯片,Proteus仿真軟件不用也可以正常實(shí)現(xiàn)功能,但是實(shí)物就必須有驅(qū)動(dòng)芯片。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1 發(fā)表于 2019-1-20 01:26 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

地板
ID:405588 發(fā)表于 2019-1-20 10:38 | 只看該作者
膜拜大神,謝謝分享!
回復(fù)

使用道具 舉報(bào)

5#
ID:669941 發(fā)表于 2019-12-21 17:05 | 只看該作者
大佬大佬,琢磨不透,要多多跟你學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

6#
ID:283591 發(fā)表于 2019-12-21 23:00 | 只看該作者
好東東,感謝分享!!
回復(fù)

使用道具 舉報(bào)

7#
ID:674458 發(fā)表于 2019-12-26 12:59 | 只看該作者

好資料,謝謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:236035 發(fā)表于 2019-12-26 14:37 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费在线黄| 97精品超碰一区二区三区 | 成人乱人乱一区二区三区软件 | 国产四区| 伊人久久综合 | 97精品国产一区二区三区 | 一区二区三区视频免费看 | 国产精品自产拍 | 在线观看国产三级 | 国产福利在线 | 一区二区三区日本 | 国产一区二区精品在线观看 | 在线国产一区二区 | 国产精品久久久久久久久久三级 | 国产精品视频在线播放 | 国产精品美女一区二区三区 | 成人国产精品久久 | 国产精品久久精品 | 中文字幕精品一区 | 国产精品成人一区 | 国产aa| 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 视频在线一区 | 黄色片在线看 | 国产精品久久久久久久久婷婷 | 亚洲精品无 | 一区二区三区国产精品 | 亚洲精品电影网在线观看 | 亚洲精品成人免费 | 亚洲少妇综合网 | 国产a区| 2018中文字幕第一页 | 中文字幕韩在线第一页 | 国产婷婷 | 精品视频在线一区 | 欧美片网站免费 | 成人在线播放 | 自拍视频网 | 国产超碰人人爽人人做人人爱 | 国产成人在线视频 | 婷婷久久精品一区二区 |