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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

課程設計-單片機數字鐘源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:425693 發表于 2018-11-13 15:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數字鐘設計(基于單片機的設計——實驗箱或Proteus仿真)
設計要求:
l 顯示格式:hh-mm-ss
l 可更改的12小時制或24小時制
l 整點報時功能
l 鬧鐘功能
l 對時調整功能
l 秒表功能

單片機源程序如下:
  1. #include<reg51.h>
  2. /*------------------檢查忙位-----------------------------*/
  3. void chk_busy();
  4. /*------------------延時子程序-----------------------------*/
  5. void delay(unsigned int num);
  6. /*------------------寫命令到LCD------------------------------*/
  7. void write_com(unsigned char cmdcode);
  8. /*-------------------寫數據到LCD----------------------------*/
  9. void write_data(unsigned char Dispdata);
  10. /*------------------初始化LCD屏--------------------------*/  
  11. void lcdreset();
  12. /*------------------顯示字符串--------------------------*/
  13. void hzkdis(unsigned char  *s,unsigned char len);
  14. /*------------------清屏命令--------------------------*/
  15. void clrscreen();
  16. void change();
  17. sbit RS = P2^0;
  18. sbit RW = P2^1;
  19. sbit E  = P2^2;
  20. void zhengdianbaoshi();
  21. void naozhong();
  22. void Pwm_Set(unsigned int Hz,unsigned char Pwm);
  23. void key_scan();
  24.    sbit key1=P3^0;
  25.    sbit key2=P3^1;
  26.    sbit key3=P3^2;
  27.    sbit key4=P3^3;
  28.    sbit key5=P3^4;
  29.    sbit key6=P3^5;
  30.    sbit key7=P3^6;
  31.    sbit key8=P1^1;
  32.    sbit key9=P1^2;
  33.    sbit BEEP=P1^0;
  34. #define Lcd_Bus P0
  35. unsigned char ADDR=0x90;
  36. volatile unsigned char sec=0,min=59,hour=23;
  37. unsigned char  disp_hour[2]={'0','0'};
  38. unsigned char  disp_min[2]={'0','0'};
  39. unsigned char  disp_sec[2]={'0','0'};
  40. void main()
  41. {       
  42.          
  43.        
  44.         EA=1;       
  45.         ET0=1;
  46.         TH0=0x3c;                                            
  47.         TL0=0xb0;
  48.         TMOD=0x01;
  49.         TR0=1;
  50.         lcdreset();
  51.         clrscreen();
  52.         write_com(0x80);
  53.                   hzkdis("張玉科",6);
  54.             hzkdis("、陳偉藝:",9);
  55.                 write_com(0x90);//0x90 start
  56.                   hzkdis("鬧鐘:",6);
  57.             hzkdis("00",2);
  58.                 hzkdis(":",1);
  59.                 hzkdis("01",2);
  60.                 write_com(0x88);//0x88
  61.                   hzkdis("報時:",6);
  62.             hzkdis("整點",6);
  63.         while(1)
  64.         {

  65.                    
  66.                 if(sec>=60)
  67.                 {
  68.                         min++;
  69.                         sec=0;
  70.                 }
  71.                 if(min>=60)
  72.                 {
  73.                         hour++;
  74.                         min=0;
  75.                 }
  76.                 if(hour>=24)
  77.                 {
  78.                         hour=0;
  79.                 }
  80.                  
  81.                 change();
  82.             write_com(0x80);
  83.                   hzkdis("張玉科",6);
  84.             hzkdis("、陳偉藝:",9);
  85.                 write_com(0x90);//0x90 start
  86.                   hzkdis("鬧鐘:",6);
  87.             hzkdis("00",2);
  88.                 hzkdis(":",1);
  89.                 hzkdis("01",2);
  90.                 write_com(0x88);//0x88
  91.                   hzkdis("報時:",6);
  92.             hzkdis("整點",6);

  93.                 write_com(0x98);//0x98
  94.                 hzkdis(disp_hour,2);
  95.                 hzkdis(":",1);
  96.                 hzkdis(disp_min,2);
  97.                 hzkdis(":",1);
  98.                 hzkdis(disp_sec,2);
  99.                 key_scan();
  100.                 zhengdianbaoshi();
  101.                    naozhong();
  102.                      
  103.         }
  104. }


  105. /*------------------檢查忙位-----------------------------*/
  106. void chk_busy()
  107. {
  108.         RS=0;
  109.         RW=1;
  110.         E=1;
  111.         Lcd_Bus=0xff;
  112.         while((Lcd_Bus&0x80)==0x80);
  113.         E=0;
  114. }


  115. /*------------------延時子程序-----------------------------*/
  116. void delay(unsigned int num)
  117. {
  118.         unsigned int i,j;
  119.         for(i=0;i<num;i++)
  120.         {
  121.                 for(j=0;j<5;j++)
  122.                 {
  123.                 }
  124.         }
  125. }
  126. /*------------------寫命令到LCD------------------------------*/
  127. void write_com(unsigned char cmdcode)
  128. {
  129.         chk_busy();
  130.         RS=0;
  131.         RW=0;
  132.         E=1;
  133.         Lcd_Bus=cmdcode;
  134.         delay(5);////////////////////在數據寫入的時候加入適當的延時
  135.         E=0;
  136.         delay(5);
  137. }

  138. /*-------------------寫數據到LCD----------------------------*/
  139. void write_data(unsigned char Dispdata)
  140. {
  141.         chk_busy();
  142.         RS=1;
  143.         RW=0;
  144.         E=1;
  145.         Lcd_Bus=Dispdata;
  146.         delay(5);///////////////////在數據寫入的時候加入適當的延時
  147.         E=0;
  148.         delay(5);
  149. }
  150. /*------------------初始化LCD屏--------------------------*/  
  151. void lcdreset()
  152. {
  153.         delay(2000);
  154.         write_com(0x30);
  155.         delay(10); //選擇基本指令集
  156.         write_com(0x30); //選擇8bit數據流
  157.         delay(5);
  158.         write_com(0x0c); //開顯示(無游標、不反白)
  159.         delay(10);
  160.         write_com(0x01); //清除顯示,并且設定地址指針為00H
  161.         delay(500);
  162.         write_com(0x06); //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位
  163.         delay(0);
  164. }

  165. /*------------------顯示字符串--------------------------*/
  166. void hzkdis(unsigned char  *s,unsigned char len)
  167. {
  168.         while(len!=0)
  169.         {
  170.                 write_data(*s);
  171.                 s++;
  172.                 len--;
  173.                 delay(50);
  174.         }
  175. }
  176. /*------------------清屏命令--------------------------*/
  177. void clrscreen()
  178. {
  179.         write_com(0x01);
  180.         delay(10);
  181. }/*------------------------------*/
  182. void timer0() interrupt 1
  183. {
  184.         static unsigned char i=0;
  185.         EA=0;
  186.         TF0=0;
  187.         TR0=0;
  188.         TH0=0x3c;
  189.         TL0=0xb0;
  190.         i++;
  191.         if(i>=20)
  192.         {
  193.                 i=0;
  194.                 sec++;
  195.         }
  196.          

  197.         TR0=1;
  198.         EA=1;
  199. }

  200. void change()
  201. {
  202.         unsigned char k1,k2,k3;
  203.         k1=hour/10;
  204.         k2=min/10;
  205.         k3=sec/10;
  206.         disp_hour[0]=k1+0x30;
  207.         disp_hour[1]=(hour-k1*10)+0x30;
  208.         disp_min[0]=k2+0x30;
  209.         disp_min[1]=(min-k2*10)+0x30;
  210.         disp_sec[0]=k3+0x30;
  211.         disp_sec[1]=(sec-k3*10)+0x30;
  212. }
  213.     void key_scan()
  214. {
  215.           unsigned char hou=0,mi=0;
  216.                
  217.         if(key1==0)
  218.         {
  219.                 delay(10);
  220.                 if(key1==0)
  221.                 {       
  222.                         if(hour<23)
  223.                         {
  224.                                 hour++;
  225.                         }
  226.                         else
  227.                         {
  228.                                 hour=0;
  229.                         }       
  230.      while(!key1);
  231.         }
  232.         }
  233.         if(key3==0)
  234.         {
  235.                 delay(10);
  236.                 if(key3==0)
  237.                 {       
  238.                         if(min<59)
  239.                          {       
  240.                             min++;
  241.                          }
  242.                         else
  243.                     {       
  244.                                 min=0;
  245.                          }
  246.                 }               
  247.      while(!key3);
  248.         }
  249.         if(key5==0)
  250.         {
  251.                 delay(10);
  252.                 if(key5==0)
  253.                 {       
  254.                         if(sec<59)
  255.                         {       
  256.                           sec++;
  257.                         }
  258.                         else
  259.                         {       
  260.                            sec=0;       
  261.                          }
  262.                 }               
  263.      while(!key5);
  264.                
  265.         }
  266.         if(key2==0)
  267.         {
  268.                 delay(10);
  269.                 if(key2==0)
  270.                 {       
  271.                         if(hour>0)
  272.                         {
  273.                                 hour--;
  274.                          }
  275.                         else
  276.                         {
  277.                                 hour=23;
  278.                          }
  279.                 }               
  280.      while(!key2);
  281.         }
  282.         if(key4==0)
  283.         {
  284.                 delay(10);
  285.                 if(key4==0)
  286.                 {       
  287.                         if(min>0)
  288.                         {       
  289.                             min--;
  290.                         }
  291.                         else
  292.                         {       
  293.                             min=59;         
  294.                      }
  295.                 }               
  296.      while(!key4);
  297.         }
  298.         if(key6==0)
  299.         {
  300.                 delay(10);
  301.                 if(key6==0)
  302.                 {       
  303.                         if(sec>0)
  304.                         {
  305.                                   sec--;       
  306.                          }
  307.                         else
  308.                         {
  309.                                 sec=59;
  310.                         }
  311.                 }               
  312.      while(!key6);
  313.                
  314.         }
  315.         if(key7==0)
  316.         {
  317.                 delay(10);
  318.                 if(key7==0)
  319.                        
  320.                          {
  321.                                 hour=0;
  322.                                 min=0;
  323.                                 sec=0;
  324.                         }
  325.                                                
  326.      while(!key7);
  327.                
  328.         }
  329.        
  330.         }

  331.   void zhengdianbaoshi()//整點報時(從50秒開始)
  332.     {
  333.            if(hour==hour&&min==59&&sec>50)
  334.                 {
  335.                   BEEP=!BEEP;
  336.                 }
  337.        
  338.         }         
  339.     void naozhong()//鬧鐘00:01:00,就響30秒
  340.    {
  341.        
  342.       if(hour==0&&min==1&&sec<30)
  343.                 {
  344.                          BEEP=!BEEP;                
  345.                
  346.             }
  347.         }
復制代碼

所有資料51hei提供下載:
Desktop.zip (2.01 KB, 下載次數: 24)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:485100 發表于 2019-3-6 22:27 | 只看該作者
有圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品在线一区 | 精品在线一区 | 成人精品在线视频 | 天堂一区二区三区四区 | 丁香久久| 美日韩精品 | 精品国产欧美一区二区三区成人 | 天天射中文| 国产欧美视频一区 | 91中文字幕在线观看 | 中文字幕一区二区三区精彩视频 | 欧美成人免费在线 | 免费激情网站 | av网址在线播放 | 天天综合久久 | 国产精品揄拍一区二区久久国内亚洲精 | 中文字幕一区二区三区日韩精品 | 中文av在线播放 | 成年无码av片在线 | 国产日韩欧美精品一区二区三区 | 91久久久久久 | 国产九九九 | 一区日韩 | 成人三级视频 | 国内自拍偷拍视频 | 国产成人jvid在线播放 | 日本小电影网站 | 国产亚洲精品久久久久久豆腐 | 久久精品久久久 | 亚洲国产成人一区二区 | 久久久久国产精品一区 | 国产精品久久久久久久久久久久久 | 亚洲精品乱码久久久久久久久 | 久久天堂 | 天天夜夜操 | 国产亚洲精品精品国产亚洲综合 | 日本a级大片 | 日韩中文在线观看 | 国产一级一级国产 | 国产成人久久精品 | 免费一看一级毛片 |