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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機課設源碼 時鐘+鬧鐘 數碼管顯示

[復制鏈接]
跳轉到指定樓層
樓主
時鐘(帶鬧鐘功能)單片機課設


單片機源程序:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit key1=P3^0;  //   時鐘/鬧鐘/關鬧鐘
  5. sbit key2=P3^1;  //   分鐘加
  6. sbit key3=P3^2;         //   時鐘加
  7. sbit key4=P3^3;         //  
  8. sbit beep=P1^6; //  鬧鈴
  9. sbit led1=P1^7;//秒用燈的閃爍表示
  10. sbit smg_q=P3^7;
  11. sbit smg_b=P3^6;
  12. sbit smg_s=P3^5;
  13. sbit smg_g=P3^4;

  14. uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    // 0-9
  15. uchar tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; // 0.-9.(帶小數點)


  16. uint t,flag,flag1;
  17. uint bbh,bbm,bbs;
  18. uint sec,min,hour; // 定義 秒,分,時

  19. void delay( unsigned int t);
  20. void inter_init();
  21. void time24();
  22. void clock();
  23. void alarm_clock();
  24. void display();
  25. void display_bb();


  26. //---------------------主函數--------------------------------
  27. void main()
  28. {
  29.   inter_init();
  30. bbh=1;
  31. bbm=2;     
  32.    hour=23;         
  33.    min=59;
  34.    sec=50;
  35.    
  36. while(1)
  37.   {
  38.       time24();  
  39.            if(key1==0)
  40.       {
  41.              flag1=~flag1;
  42.          flag=~flag;
  43.              while(!key1);
  44.       }
  45.       if(flag==0)
  46.       {
  47.           clock();
  48.           display();    /*調用顯示函數來顯示*/  
  49.       }
  50.       else
  51.       {
  52.           alarm_clock();
  53.               display_bb();
  54.       }
  55.    
  56.            if(hour==bbh && min==bbm && flag1==0)
  57.          {  
  58.              beep=~beep;
  59.                  delay(1);
  60.      }           
  61.    
  62.   }
  63.    
  64.   
  65. }

  66. /*---------------------延時----------------------- */
  67. void delay( unsigned int t)         //  延時函數
  68. {
  69.     unsigned int i;
  70.     while(t--)
  71.                 for(i=0;i<125;i++);
  72. }

  73. /*---------------------中斷初始化-------------------------*/
  74. void inter_init()   
  75.   { sec=min=hour=0; // 將0賦給時分秒

  76.          TMOD=0x01; //  方式1
  77.          TH0=0x3c;  //  65536-50000=15536=0x3cb0(50ms)  
  78.          TL0=0xb0;
  79.          EA=1;      //  開總中斷
  80.          TR0=1;            //  定時/計數器0開啟
  81.          ET0=1;            //  定時器/計數器0溢出中斷啟動  
  82.   }
  83. /*---------------------24小時制--------------------------*/
  84. void time24()      
  85.   {
  86.               if(TF0==1)   // 定時器/計數器溢出
  87.                  {
  88.                           TF0=0;  // 清中斷標志位
  89.                           t++;
  90.                           if(t==20)        // (50ms*20=1s)
  91.                             {
  92.                                    t=0;
  93.                                    led1=~led1;
  94.                                    sec++;      //  秒加1
  95.                                    if(sec==60) //  秒為60,則清零,分加1
  96.                                {
  97.                                        sec=0;
  98.                                        min++;
  99.                                    }
  100.                                if(min==60) // 分為60,則清零,時加1
  101.                                {
  102.                                        min=0;
  103.                                        hour++;
  104.                                    }
  105.                                if(hour==24)// 時為24,則清零
  106.                                    {
  107.                                        hour=0;
  108.                                    }
  109.                       }
  110.          }

  111.   }

  112. /*-----------按鍵調整子函數(時鐘和鬧鐘)-------------------------------------*/
  113. void clock()   //時鐘調整
  114. {
  115.   
  116.       if(key2==0)
  117.         {
  118.            delay(10);
  119.            if(key2==0)
  120.             {
  121.                min++;
  122.                while(!key2);
  123.                if(min==60)
  124.                  {
  125.                    min=0;
  126.                   }
  127.              }
  128.          }
  129.        if(key3==0)
  130.        {
  131.           delay(10);
  132.           if(key3==0)
  133.           {
  134.               hour++;
  135.            while(!key3);
  136.            if(hour==24)
  137.             {
  138.                hour=0;
  139.             }
  140.           }
  141.        }

  142. }

  143. void alarm_clock() /*鬧鐘調整*/
  144. {
  145.   if(key2==0)
  146.         {
  147.            delay(10);
  148.            if(key2==0)
  149.             {
  150.                bbm++;
  151.                while(!key2);
  152.                if(bbm==60)
  153.                  {
  154.                    bbm=0;
  155.                   }
  156.              }
  157.          }
  158.        if(key3==0)
  159.        {
  160.           delay(10);
  161.           if(key3==0)
  162.           {
  163.               bbh++;
  164.            while(!key3);
  165.            if(bbh==24)
  166.             {
  167.                bbh=0;
  168.             }
  169.            }
  170.        }

  171. }  

  172.    
  173. /*---------------------數碼管顯示子函數(時鐘和鬧鐘)-------------------------------------*/
  174. void display()              //  顯示時間函數
  175. {
  176.         smg_s=0;                           //時低位
  177.    P2=tab_dp[hour%10];
  178.    P2=0xff;
  179.    smg_s=1;   

  180.    smg_g=0;                                   //時高位
  181.    P2=tab[hour/10];
  182.    P2=0xff;
  183.    smg_g=1;
  184.    
  185.    smg_q=0;                                //分低位
  186.    P2=tab[min%10];   
  187.    P2=0xff;
  188.    smg_q=1;

  189.    smg_b=0;                                //分高位
  190.    P2=tab[min/10];  
  191.    P2=0xff;
  192.    smg_b=1;
  193.                
  194. }
  195. void display_bb()                //顯示鬧鐘函數
  196. {
  197.    smg_s=0;                           //時低位
  198.    P2=tab_dp[bbh%10];
  199.    P2=0xff;
  200.    smg_s=1;   

  201.    smg_g=0;                                   //時高位
  202.    P2=tab[bbh/10];
  203.    P2=0xff;
  204.    smg_g=1;
  205.    
  206.    smg_q=0;                                //分低位
  207.    P2=tab[bbm%10];   
  208.    P2=0xff;
  209.    smg_q=1;

  210.    smg_b=0;                                //分高位
  211.    P2=tab[bbm/10];  
  212.    P2=0xff;
  213.    smg_b=1;
  214.    }
  215.   
復制代碼


全部代碼下載:
時鐘 鬧鐘.zip (24.47 KB, 下載次數: 33)


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

使用道具 舉報

沙發
ID:273982 發表于 2019-12-23 16:54 | 只看該作者
圖呢?   我的哥???
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 视频一区二区三区中文字幕 | 日韩黄色av| 久久久tv | 精品一二三区在线观看 | 日韩在线视频一区 | 91高清免费观看 | 精品欧美二区 | 精品视频在线一区 | 欧美电影网 | 成人不卡 | 97国产在线观看 | 日日操视频 | 在线免费观看亚洲 | 老司机午夜性大片 | 久久精品av | 成人午夜电影在线观看 | 一级黄色片在线看 | 亚洲欧美bt| 黄色片网站在线观看 | 久久一二三区 | 草草视频在线免费观看 | 风间由美一区二区三区在线观看 | 久久国产欧美日韩精品 | 日本不卡一区二区三区 | 久久看精品| 日韩欧美精品一区 | 国产在线视频一区 | 亚洲精美视频 | 中文字幕第5页 | 日韩精品影院 | 国产在线不卡视频 | 成人在线精品视频 | 成人性生交大片免费看中文带字幕 | 欧美日韩在线免费观看 | 亚洲精品视频在线看 | 欧美在线看片 | 一级二级三级在线观看 | 视频一区二区在线观看 | 中文字幕一级毛片 | 一区二区三区精品视频 | 日韩欧美亚洲 |