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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子時鐘設(shè)計 PPT等資料下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:112317 發(fā)表于 2016-4-7 02:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
ppt文件:

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















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






正文:
電子時鐘設(shè)計


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

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

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


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





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








二、電子時鐘的功能實現(xiàn)

1.Proteus仿真電路圖:



  2.元器件清單
      元件名稱
          數(shù)量(個)
單片機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)//延時函數(shù)
  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)//寫數(shù)據(jù)
  31. {
  32.   rs=1;
  33.   rw=0;
  34.   E=1;
  35.   LCD=dat;
  36.   delay(5);
  37.   E=0;

  38. }
  39. init_lcd()//1602初始化函數(shù)
  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()//定時函數(shù)初始化
  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//定時函數(shù)
  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()//調(diào)時函數(shù)初始化
  100. {
  101.         Change=1;
  102.         EA=1;
  103.         EX1=1;
  104.         IT1=0;
  105. }
  106. void display_1()//顯示函數(shù)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()//鍵盤掃描函數(shù)
  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  //調(diào)時函數(shù)
  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()//位選函數(shù)初始化
  249. {
  250.         Move=1;
  251.         EA=1;
  252.         EX0=1;
  253.         IT0=0;
  254. }
  255. void move()interrupt 0//位選函數(shù)
  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()//顯示函數(shù)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()//顯示函數(shù)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()//主函數(shù)
  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. }
復(fù)制代碼

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

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

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

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

使用道具 舉報

沙發(fā)
ID:156422 發(fā)表于 2016-12-21 00:23 | 只看該作者
看哈,參考
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国内自拍偷拍视频 | 99久久免费精品国产男女高不卡 | 在线不卡视频 | 一区精品视频 | av网址在线播放 | 久久91精品国产 | 国产精品欧美一区二区 | 久久精品成人热国产成 | 久久香蕉网 | 国产亚洲人成a在线v网站 | 欧美日韩一卡二卡 | 国内成人免费视频 | 国产精品一区二区福利视频 | 黄色一级片在线播放 | 国产农村妇女精品一区 | 久久久久se | 夜色www国产精品资源站 | 久久精品a | 日日噜噜夜夜爽爽狠狠 | 91亚洲国产成人精品一区二三 | av一区二区三区四区 | 亚洲精品一区二区二区 | 涩涩视频在线观看免费 | 天天做日日做 | 国产激情视频在线观看 | 新超碰97 | 精品中文字幕一区 | 99精品视频免费在线观看 | 91高清视频在线 | 欧美二级| 91久久精品日日躁夜夜躁欧美 | 欧美精品电影一区 | 在线日韩中文字幕 | 久久69精品久久久久久久电影好 | 97国产超碰 | 国产小视频在线观看 | cao在线 | 91青娱乐在线 | 欧美精品黄 | 久久精品久久综合 | 国产一区二区 |