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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5332|回復: 1
收起左側

單片機電子時鐘設計 PPT等資料下載

[復制鏈接]
ID:112317 發表于 2016-4-7 02:24 | 顯示全部樓層 |閱讀模式
shizhong.jpg 時鐘調時狀態下.jpg 時鐘運行中.jpg ppt文件: 2.png 0.png

以上所有資料打包下載:
LCD1602時鐘設計資料.rar (5.08 MB, 下載次數: 19)















總體設計要求和技術要點
1、              使用LCD顯示器(1602)來顯示現在的時間。
              顯示格式為“時時:分分:秒秒”。
2、 利用4*4鍵盤設置時間。
3、              兩個功能切換鍵CHANGE--MOVE,功能如下:
a              按下操作鍵CHANGE:進入設置時間界面;時間設置完畢,釋放此鍵進入實時時間顯示界面。
b              操作鍵MOVE:每按下一次改動位后移一位。






正文:
電子時鐘設計


?  單片微型計算機(Single-Chip Microcomputer)簡稱單片機,是典型的嵌入式微控制器(Embedded Microcontrollers),它最早是被用在工業控制領域。它體積小,成本低,功能強,廣泛應用于智能產業和工業自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種,通過本次設計進一步對單片機學習和應用,從而更熟悉單片機的原理和相關設計并提高了開發軟、硬件的能力。本設計主要設計一個基于80C51單片機的電子時鐘,并在LCD上顯示相應的時間,通過兩個控制鍵和4×4鍵盤來實現時間的調節功能。應用Proteus軟件實現單片機電子時鐘系統的設計與仿真。
關鍵詞:單片機 微控制器 設計 電子時鐘

目 錄
一、電子時鐘的工作原理……………………………………………………
1.計時原理……………………………………………………………………
2.調時原理……………………………………………………………………
3.顯示原理……………………………………………………………………
二、電子時鐘的功能實現……………………………………………………
1.Proteus仿真電路圖………………………………………………………
2.元器件清單…………………………………………………………………
3.程序框圖……………………………………………………………………
3.源程序………………………………………………………………………
三、使用說明…………………………………………………………………
四、心得與體會………………………………………………………………
五、主要參考文獻、資料……………………………………………………

一、電子時鐘的工作原理
  • 計時原理
通過單片機內部硬件電路提供時基(time base),再由軟件來實現對基時的調控得到時、分、秒的數值。
[/url]
                            時基電路


2.調時原理
     合上開關CHANGE程序進入外部中斷1,即調時函數。此時鍵盤函數開始掃描矩陣鍵盤,當檢測到哪一個位被按下時,程序根據m值(即顯示的那一位)在指定的位置輸入數據(時、分、秒),即可實現調時功能。





3.顯示原理
   通過定時器 /計數器0來計時,再通過lcd1602來顯示時間。時間的精確度與單片機的晶振密切相關。








二、電子時鐘的功能實現

1.Proteus仿真電路圖:



  2.元器件清單
      元件名稱
          數量(個)
單片機AT89C52
1
LCD1602
1
排電阻
1
按鈕
18
電阻
6

3.程序框圖










程序:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define LCD P0
  5. sbit rs=P2^0;
  6. sbit rw=P2^1;
  7. sbit E=P2^2;
  8. sbit Move=P3^2;
  9. sbit Change=P3^3;
  10. int m=0;
  11. unsigned char i;
  12. int counter=0;
  13. int hour,min,sed;
  14. int  hour_1, hour_0, min_1,min_0, sed_1, sed_0;
  15. void delay(int ms)//延時函數
  16. {
  17.         int i,j;
  18.         for(i=0;i<ms;i++)
  19.                 for(j=0;j<110;j++);
  20. }
  21. write_com(uchar com)//寫指令
  22. {
  23.   rs=0;
  24.   rw=0;
  25.   E=1;
  26.   LCD=com;
  27.   delay(5);
  28.   E=0;

  29. }
  30. write_data(uchar dat)//寫數據
  31. {
  32.   rs=1;
  33.   rw=0;
  34.   E=1;
  35.   LCD=dat;
  36.   delay(5);
  37.   E=0;

  38. }
  39. init_lcd()//1602初始化函數
  40. {
  41.   write_com(0x38);
  42.   write_com(0x08);
  43.   write_com(0x01);
  44.   write_com(0x06);
  45.   write_com(0x0c);
  46. }
  47. void intime_0()//定時函數初始化
  48. {
  49.         TMOD=0x01;
  50.         TL0=0xb0;
  51.         TH0=0x3c;
  52.         TR0=1;
  53.         ET0=1;
  54.         EA=1;
  55. }
  56. void timer0()interrupt  1 using 0//定時函數
  57. {
  58.         TL0=0xb0;
  59.         TH0=0x3c;
  60.         counter++;
  61.         if(counter==20)
  62.         {
  63.                 counter=0;
  64.                 sed_0++;
  65.                    if(sed_0==10)
  66.               {
  67.                     sed_0=0;
  68.                 sed_1++;
  69.                    if(sed_1==6)
  70.                       {
  71.                                     sed_1=0;
  72.                                 min_0++;
  73.                            if(min_0==10)
  74.                          {
  75.                                                         min_0=0;
  76.                                                         min_1++;
  77.                                                                 if(min_1==6)
  78.                                                                         {
  79.                                                                                 min_1=0;
  80.                                                                                 hour_0++;
  81.                                                                                 if((hour_0==4)&&(hour_1==2))
  82.                                                                                         {
  83.                                                                                                    hour_0=0;
  84.                                                                                                 hour_1=0;
  85.                                                                                         }
  86.                                                                                 else if(hour_0==10)
  87.                                                                                         {
  88.                                                                                           hour_0=0;
  89.                                                                                           hour_1++;
  90.                                                                                                 if(hour_1==2)
  91.                                                                                                         {hour_1=0;}
  92.                                                                                    }
  93.                                                                         }
  94.                                                 }
  95.                 }     
  96.          }
  97.      }         
  98. }
  99. void inch()//調時函數初始化
  100. {
  101.         Change=1;
  102.         EA=1;
  103.         EX1=1;
  104.         IT1=0;
  105. }
  106. void display_1()//顯示函數1
  107. {
  108.         int k;
  109.         char code str[]="Input time";
  110.         for(k=0;k<10;k++)
  111.                    {
  112.                             write_com(0x80+3+k);
  113.                          write_data(str[k]);
  114.                    }

  115. }
  116. void         scan()//鍵盤掃描函數
  117. {
  118.         unsigned char j;
  119.         P1=0xf0;delay(20);
  120.         i=P1;
  121.         i&=0x0f;
  122.         j=i;
  123.         P1=0x0f;delay(20);
  124.         i=P1;i&=0xf0;i|=j;        
  125. }
  126. void change()interrupt 2  //調時函數
  127. {
  128.         
  129.         display_1();
  130.         scan();
  131.         switch(i)
  132.         {
  133.                 case 0x11:switch(m)
  134.                                         {
  135.                                                 case 0:hour_1=0;write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  136.                                                 case 1:hour_0=0;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  137.                                                 case 2:min_1=0;write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  138.                                                 case 3:min_0=0;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  139.                                                 case 4:sed_1=0;write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  140.                                                 case 5:sed_0=0;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  141.                                                 default:break;

  142.                                         }
  143.                         break;
  144.                 case 0x21:switch(m)
  145.                                         {
  146.                                                 case 0:hour_1=1;write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  147.                                                 case 1:hour_0=1;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  148.                                                 case 2:min_1=1;write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  149.                                                 case 3:min_0=1;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  150.                                                 case 4:sed_1=1;write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  151.                                                 case 5:sed_0=1;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  152.                                                 default:break;

  153.                                         }
  154.                         break;
  155.                 case 0x41:switch(m)
  156.                                         {
  157.                                                 case 0:hour_1=2;write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  158.                                                 case 1:hour_0=2;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  159.                                                 case 2:min_1=2;write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  160.                                                 case 3:min_0=2;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  161.                                                 case 4:sed_1=2;write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  162.                                                 case 5:sed_0=2;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  163.                                                 default:break;

  164.                                         }
  165.                         break;
  166.                 case 0x81:switch(m)
  167.                                         {
  168.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  169.                                                 case 1:hour_0=3;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  170.                                                 case 2:min_1=3;write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  171.                                                 case 3:min_0=3;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  172.                                                 case 4:sed_1=3;write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  173.                                                 case 5:sed_0=3;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  174.                                                 default:break;

  175.                                         }
  176.                         break;
  177.                 case 0x12:switch(m)
  178.                                         {
  179.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  180.                                                 case 1:hour_0=4;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  181.                                                 case 2:min_1=4;write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  182.                                                 case 3:min_0=4;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  183.                                                 case 4:sed_1=4;write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  184.                                                 case 5:sed_0=4;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  185.                                                 default:break;

  186.                                         }
  187.                         break;
  188.                 case 0x22:switch(m)
  189.                                         {
  190.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  191.                                                 case 1:hour_0=5;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  192.                                                 case 2:min_1=5;write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  193.                                                 case 3:min_0=5;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  194.                                                 case 4:sed_1=5;write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  195.                                                 case 5:sed_0=5;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  196.                                                 default:break;

  197.                                         }
  198.                         break;
  199.                 case 0x42:switch(m)
  200.                                 {
  201.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  202.                                                 case 1:hour_0=6;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  203.                                                 case 2:write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  204.                                                 case 3:min_0=6;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  205.                                                 case 4:write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  206.                                                 case 5:sed_0=6;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  207.                                                 default:break;

  208.                                         }
  209.                         break;
  210.                 case 0x82:switch(m)
  211.                                         {
  212.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  213.                                                 case 1:hour_0=7;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  214.                                                 case 2:write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  215.                                                 case 3:min_0=7;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  216.                                                 case 4:write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  217.                                                 case 5:sed_0=7;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  218.                                                 default:break;

  219.                                         }
  220.                         break;
  221.                 case 0x14:switch(m)
  222.                                                 {
  223.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  224.                                                 case 1:hour_0=8;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  225.                                                 case 2:write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  226.                                                 case 3:min_0=8;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  227.                                                 case 4:write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  228.                                                 case 5:sed_0=8;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  229.                                                 default:break;

  230.                                         }
  231.                         break;
  232.                 case 0x24:switch(m)
  233.                                         {
  234.                                                 case 0:write_com(0x80+0x40+0x07);write_data(hour_1+0x30);break;
  235.                                                 case 1:hour_0=9;write_com(0x80+0x40+0x08);write_data(hour_0+0x30);break;
  236.                                                 case 2:write_com(0x80+0x40+0x0a);write_data(min_1+0x30);break;
  237.                                                 case 3:min_0=9;write_com(0x80+0x40+0x0b);write_data(min_0+0x30);break;
  238.                                                 case 4:write_com(0x80+0x40+0x0d);write_data(sed_1+0x30);break;
  239.                                                 case 5:sed_0=9;write_com(0x80+0x40+0x0e);write_data(sed_0+0x30);break;
  240.                                                 default:break;

  241.                                         }
  242.                         break;
  243.                
  244.                 default:break;
  245.         }
  246.         Change=1;
  247. }
  248. void inmove()//位選函數初始化
  249. {
  250.         Move=1;
  251.         EA=1;
  252.         EX0=1;
  253.         IT0=0;
  254. }
  255. void move()interrupt 0//位選函數
  256. {
  257.         if(Move==0)
  258.         {
  259.                 delay(1000);
  260.                 m++;
  261.         }
  262.                 if(m>5)
  263.                  m=0;
  264.         Move=1;
  265. }
  266. void display_0()//顯示函數0
  267. {               

  268.                         write_com(0x80+0x40+0x07);
  269.                         write_data(hour_1+0x30);
  270.                         write_com(0x80+0x40+0x08);
  271.                         write_data(hour_0+0x30);        
  272.                         write_com(0x80+0x40+0x09);
  273.                         write_data(':');        
  274.                         write_com(0x80+0x40+0x0a);
  275.                         write_data(min_1+0x30);
  276.                         write_com(0x80+0x40+0x0b);
  277.                         write_data(min_0+0x30);        
  278.                         write_com(0x80+0x40+0x0c);
  279.                         write_data(':');        
  280.                         write_com(0x80+0x40+0x0d);
  281.                         write_data(sed_1+0x30);
  282.                         write_com(0x80+0x40+0x0e);
  283.                         write_data(sed_0+0x30);

  284. }
  285. void display_2()//顯示函數2
  286. {
  287.         int k;
  288.         char code str[]="            ";
  289.         for(k=0;k<12;k++)
  290.                    {
  291.                             write_com(0x80+3+k);
  292.                          write_data(str[k]);
  293.                    }

  294. }
  295. void main()//主函數
  296. {         
  297.         
  298.          IP=0X01;
  299.      init_lcd();
  300.          intime_0();//ding shi zhong duan kai qi
  301.          inmove();//yi wei zhong duan kai qi
  302.          inch();//tiao shi zhong duan kai qi
  303.          while(1)
  304.          {
  305.                          display_0();display_2();delay(500);
  306.         }
  307. }
復制代碼

三、使用說明
正常顯示:斷開開關MOVE,CHANGE運行程序即可顯示正常工作狀態。
調時狀態:合上開關(注釋:一直合上),進入調時界面,通過MOVE鍵(注釋:按下后必須返回)選擇要調整的時間位,選中后通過矩陣鍵盤輸入數據即可。調整過后打開CHANGE開關即可進入正常工作界面。

四、心得與體會:
由于課本上的知識太多,平時課間的學習并不能很好的理解和運用各個元件的功能,所以在這次設計過程中,我了解了很多元件的功能,并且對于其在電路中的使用有了更多的認識。有一點是在設計過程中,經常會遇到這樣那樣的情況,就是心里想老著這樣的接法可以行得通,但實際接上電路,總是實現不了,而又一下找不出問題所在,只有在查了書上有關這方面的解釋后才有所進展,因此耗費在這上面的時間很多。總體感覺是:通過這次設計,加強了我們動手、思考和解決問題的能力。

五、主要參考文獻、資料:
[1]郭天祥: 新概念C51單片機C語言教程---入門、提高、開發、拓展全攻略
電子工業出版社
[2]林小荼:C語言程序設計(第二版) 中國鐵道出版社
[3]李全利 遲榮強:單片機以及及接口技術高等教育出版社

回復

使用道具 舉報

ID:156422 發表于 2016-12-21 00:23 | 顯示全部樓層
看哈,參考
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩亚洲国产 | 日日操视频 | 婷婷激情综合 | 羞羞视频免费观 | 正在播放国产精品 | 国产三级精品三级在线观看四季网 | 日本久久一区二区三区 | 欧美激情国产精品 | 精品亚洲永久免费精品 | 狠狠色狠狠色综合系列 | 日韩中出| 黄色一级毛片免费看 | 草久久免费视频 | 午夜亚洲 | 成人av电影在线观看 | 国产精品欧美一区二区 | 一区二区三区中文字幕 | 久久久久久久一区二区三区 | 91视频久久| 91看片网 | 国产成人免费视频网站高清观看视频 | 日日想夜夜操 | av影音在线| 成人精品在线观看 | 亚洲成人精品在线 | 九九热免费看 | 亚洲欧美日韩电影 | 亚洲国产欧美日韩 | 99久久精品免费看国产四区 | 国产91丝袜在线熟 | 久久精品国产一区二区电影 | 中文字幕日韩欧美一区二区三区 | 国产高潮好爽受不了了夜夜做 | 免费av手机在线观看 | 国产三区四区 | 99视频精品 | av网站免费观看 | 日韩av免费在线电影 | 久久999 | 欧美日韩视频 | 日韩在线 |