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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11072|回復: 7
打印 上一主題 下一主題
收起左側

51單片機控制8位一體數碼管或兩個4位一體數碼管實現萬年歷功能(時間、日期、鬧鐘)

  [復制鏈接]
跳轉到指定樓層
樓主

要求
顯示當前時間與日期。
手動修改時間、日期信息,修改該位信息時該數碼管閃爍。
手動開啟/關閉鬧鐘功能,而且有鬧鐘狀態指示燈。
手動設置鬧鐘,而且當達到設置好的時間點時報警,報警時長為5s。
分析
萬年歷的整體設計如圖所示:

51單片機核心模塊包括51單片機最小系統模塊,是設計應用的控制核心;顯示模塊用于顯示時間與日期、設計鬧鐘時間等信息;指示燈包括時間日期暫停計數指示燈和鬧鐘開啟或關閉狀態指示燈;鬧鐘采用蜂鳴器發出聲音警報;鍵盤輸入模塊用來設置和切換時間、日期,開啟或關閉鬧鐘,設置鬧鐘時間等。

制作出來的實物圖如下:


可用安卓接口5V供電,也可接學生電源或兩個3.7V的電池通過LM7805穩壓管供電。

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

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


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


程序流程圖:


單片機源程序如下:
  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};        //數碼管段選碼,0——9     
  5. uChar b[]={~0xfe,~0xfd,~0xfb,~0xf7,~0xef,~0xdf,~0xbf,~0x7f};        //數碼管位選碼,高——低   
  6. uChar second=0,minute=12,hour=12,month=1,day=13,count; uInt year=2019;
  7. uChar f_nao=12,s_nao=12;                //鬧鐘分計數,鬧鐘時計數
  8. uChar wave=0;                //定時器1對0.1ms定時時間進行計數,控制蜂鳴器響的頻率
  9. bit flag_nao;                //控制鬧鐘開關變量         flag_nao= 0-off;1--on

  10. sbit K1   = P3^0;       //設置鬧鐘分/時位加一
  11. sbit K2   = P3^1;                //退出設置鬧鐘
  12. sbit K3   = P3^2;            //鬧鐘開關
  13. sbit K4   = P3^3;       //進入設置鬧鐘狀態
  14. sbit Key1 = P3^4;       //計時停止
  15. sbit Key2 = P3^5;                //調位(校準)
  16. sbit Key3 = P3^6;            //所調位加一        
  17. sbit Key4 = P3^7;       //切換時-分-秒、年-月-日
  18. sbit BEEP = P2^2;                //蜂鳴器端口
  19. sbit LED1 = P2^0;                  //計時停止時LED1亮
  20. sbit LED2 = P2^1;                //鬧鐘開啟時LED2亮
  21.                                                 
  22. //函數聲明
  23. void Delayms(uInt t);         //長延時函數
  24. void Dispaly1(uChar second,uChar minute,uChar hour);        //時-分-秒顯示
  25. void Dispaly2(uChar day,uChar month,uInt year);                        //年-月-日顯示
  26. void Keyscan1();                                                                                //按鍵Key4按下次數為雙數時(按鍵Key1~3控制時-分-秒)
  27. void Keyscan2();                                                                                //按鍵Key4按下次數為單數時(按鍵Key1~3控制年-月-日)
  28. void nao_judge();                                                                                //判斷鬧鐘
  29.    
  30. /*************時-分-秒、年-月-日閃爍函數聲明*********************/
  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. /*************時-分-秒、年-月-日閃爍函數聲明*********************/

  41. //主函數
  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;        //設置外部中斷1為下降沿觸發
  50.         IT0=0;        //設置外部中斷0為低電平觸發
  51.         EX1=1;        //打開外部中斷1允許位
  52.         EX0=1;        //打開外部中斷0允許位
  53.         PT0=1;        //設置內部定時中斷優先級大于外部中斷優先級
  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. //長延時函數
  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. //時-分-秒顯示
  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按下次數為雙數時(控制時-分-秒),按鍵Key1~3的控制
  162. void Keyscan1()
  163. {
  164.         static        uChar i=0,j=0;        //static-保存變量數據,不會清零                                       
  165.         if(Key1==0)                                                                                                
  166.         {
  167.                 Delayms(10);                //消抖                                                                                
  168.                 if(Key1==0)           
  169.                         while(!Key1);          //等待按鍵彈起
  170.                 i++;
  171.         }        
  172.                 if(i%2==1)                //若Key1按下次數為單數時,停止計數                                                                                                
  173.                 {
  174.                         LED1=0;
  175.                         TR0=0;
  176.                 }        
  177.                 if(i%2==0)                //若Key1按下次數為雙數時,開始計數
  178.                 {
  179.                         LED1=1;               
  180.                         TR0=1;                                
  181.                 }
  182.          
  183.         if(Key2==0)                //按鍵Key2選擇調位                                                                                
  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進行選定位加一
  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);                //時顯示位閃爍
  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按下次數為單數時(控制年-月-日),按鍵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. //判斷鬧鐘,當時間和設置鬧鐘時間相等時,鬧鈴響5S
  299. void nao_judge()
  300. {
  301.         if(flag_nao==1)                 //如果flag_nao為真,鬧鐘開啟
  302.         {
  303.                 if((minute==f_nao)&&(hour==s_nao))                //判斷實時時間和鬧鐘時間的分、時是否同時相等
  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. //定時器中斷0,時鐘計數(不斷執行)
  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,鬧鐘開關,控制flag_nao,按下K3關閉鬧鐘
  356. void guan_naozhong() interrupt 0           
  357. {
  358.         flag_nao=~flag_nao;
  359.         LED2=~LED2;
  360.         TR1 = 0;        //K3按下,開啟外部中斷0,關閉定時器中斷1,鬧鐘停止響鈴               
  361.         while(!K3)
  362.                 Dispaly1(second,minute,hour);
  363. }

  364. //外部中斷1,調節鬧鐘時間
  365. void naozhong() interrupt 2
  366. {
  367.         static uChar n=0;         
  368. //        s_nao=12;        //設置鬧鐘時鐘初始值
  369. //        f_nao=31;        //設置鬧鐘分鐘初始值
  370.         while(K2)        //等待按下K2退出,否則循環執行鬧鐘時間設置
  371.         {
  372.                 Dispaly1(0,f_nao,s_nao);        //顯示鬧鐘設置
  373.                 if(Key2==0)                        //鬧鐘調位調時鐘、分鐘                                                                                       
  374.                 {
  375.                         Delayms(10);                                                                                
  376.                         if(Key2==0)
  377.                                 while(!Key2);
  378.                         n++;
  379.                 }
  380.                         if(n%2==1)                //調節鬧鐘時鐘                                                                                       
  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)                //調節鬧鐘分鐘
  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. /****************調位時選擇位閃爍****************/
  415. /************************************************/        
  416. //短延時
  417. void delay(uInt t)                                 
  418. {
  419.         uInt i;
  420.         for(i=0;i<t;i++)
  421.                 ;
  422. }

  423. //數碼管0~7位分別顯示時-分-秒
  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];        //該位數碼管滅                        
  495.                 P1=0xff;         
  496.                 delay(k);

  497.                 P0=b[7];        //該位數碼管滅  
  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. //時顯示位閃爍
  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. //數碼管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. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

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



評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:470643 發表于 2019-1-19 20:24 | 只看該作者
74LS245是數碼管驅動芯片,Proteus仿真軟件不用也可以正常實現功能,但是實物就必須有驅動芯片。
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

5#
ID:669941 發表于 2019-12-21 17:05 | 只看該作者
大佬大佬,琢磨不透,要多多跟你學習
回復

使用道具 舉報

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

使用道具 舉報

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

好資料,謝謝分享
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区在线观看 | 日韩欧美综合在线视频 | 日韩成人免费在线视频 | 欧美日韩亚 | 国产一区二区视频在线 | 高清国产午夜精品久久久久久 | 国产欧美精品区一区二区三区 | 亚洲高清在线观看 | 91麻豆精品一区二区三区 | 91精品久久久久久久久中文字幕 | 超碰97人人人人人蜜桃 | 国产精品久久久久久久久久 | 色精品 | 天堂国产 | 天天躁人人躁人人躁狂躁 | 色视频在线免费观看 | 男人天堂网址 | 亚洲一区二区在线免费观看 | 日本免费在线观看视频 | 精品视频在线播放 | 日日夜夜天天 | 欧美1区2区 | 夜夜爽99久久国产综合精品女不卡 | 真人女人一级毛片免费播放 | 久久99精品视频 | 高清视频一区二区三区 | 久久99精品久久久久久青青日本 | 国产黄色大片网站 | 午夜视频一区二区三区 | 国产精品乱码一区二区三区 | 黄色一级视频免费 | 国产午夜精品久久久 | 久久婷婷av | 色男人的天堂 | 97国产精品 | 九九精品视频在线 | 91精品国产91 | 国产免费看 | www.狠狠干 | 精品伊人久久 | 日韩三级在线 |