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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的電子表課程設計說明書下載(Word格式文檔)

[復制鏈接]
跳轉到指定樓層
樓主
單片機課程設計任務書

題  目
基于51單片機的電子表
課題性質
工程設計
課題來源
自選
指導教師

主要內容
(參數)
利用51單片機實現以下功能:
電子時鐘可以正常計時。
可以對電子時鐘進行調節。
調節時有光標閃爍。
任務要求
(進度)
第1-2天:熟悉課程設計任務及要求,查閱技術資料,確定設計方案。
第3-4天:按照確定的方案設計單元電路。要求畫出單元電路圖,元件及元件參數選擇要有依據,各單元電路的設計要有詳細論述。
第5-6天:軟件設計,編寫程序。
第7-8天:軟件調試。
第9-10天:撰寫課程設計報告。要求內容完整、圖表清晰、文理流暢、格式規范、方案合理、設計正確,篇幅合理。

目錄
1  系統概述
1.1  設計目的
1.2  設計內容
1.3  設計目標
2  方案論證
2.1  用開發板進行電子鐘的設計
2.2  用實物進行電子鐘的
3  硬件設計
3.1  系統的原理
3.2  部分電路圖
3.3   I/O分配
3.4  元器件選型
4  軟件設計
4.1  主源程序
4.2  lcd1602源程序
4.3  1302時鐘源程序
5  系統調試
設計心得
參考文獻


1  系統概述
1.1  
設計目的

1.熟悉DS1302的工作原理與過程

2.熟悉LCD1602液晶屏的工作原理和過程

3.熟悉掌握51的c程序編寫

4結合DS1302和LCD1602液晶屏設計出電子表

1.2  設計內容

1.使液晶屏中顯示秒分時日月年星期等功能

2.液晶屏中的初始時間可調節

3.液晶屏中的時間日期可調

4每次調節時都有光標閃爍

1.3  設計目標

1.在51開發板上能夠實現時間日期的顯示

2.學會開發板的基礎知識

3.可穩定調節和計時

4.熟悉掌握c語言的編寫

2  方案論證
2.1  用開發板進行電子鐘的設計

用開發板進行設計時,可以采用keil4軟件中51功能,在其中編寫c語言,然后生成hex文件,根據設計的需要查資料進行編寫。對于新手來說,這是一個不錯的選擇,可以隨時進行錯誤的識別和更改,大大提高了效率,為以后的單片機學習打下基礎。在用開發板進行編寫程序時,先進行主函數的編寫,然后根據主函數所需要的東西,再繼續編寫其他程序。在主函數中,主要是按鍵的設置和時間調節的循環。然后再加入lcd和ds1302的功能便可以實現時鐘的顯示。這樣做不僅節約了成本,還為以后編寫程序打下了基礎。

2.2  用實物進行電子鐘的

用實物進行設計,需要進行元器件的焊接,并且在焊接過程中易出現錯誤導致設計的失敗,而且用匯編語言進行編寫程序時,會增加設計難度,通常來說,一條c語言可以轉化成多條匯編語言,相比較,用開發板進行設計更方便,所以選擇用開發板進行設計。

3  硬件設計
3.1  系統的原理

開發板通過USB自動下載電路下載開發板連接電腦的裝置,然后給開發板供電,然后通過DS1302時鐘芯片、LCD1602、開關、STC89C52芯片各自引腳連接在一起,組成基本的硬件連接,然后在keil4上面編寫軟件,經過開發板自帶的燒錄軟件運行程序。

圖一:系統工作原理圖

3.2  部分電路

圖二:STC89C52芯片引腳連線

圖三:LCD1602液晶屏引腳連線

圖四:開關引腳連線

圖5:USB自動下載電路引腳連線

圖6:DS1302時鐘芯片引腳連線

3.3   I/O分配

LCD1602的DB0到DB7 8個引腳接p0口,RS接p2.6口,RW接p2.5口,E接p2.7口。如圖三所示

開關的K1接RXT(p3.1),K2接TXD(p3.0),K3接p3.2,K4接p3.3。如圖四所示

DS1302芯片的SCLK引腳接p3.6,I/O引腳接p3.4,CE引腳接p3.5。如圖六所示

3.4  元器件選型

LCD1602液晶屏一個

DS1302時鐘芯片一個

STC89C52芯片一個

晶振、電阻、電容、開關若干



5  系統調試

下載開發板自帶的燒錄軟件,調試運行結果如下

圖7:運行結果

圖8:運行初始狀態

圖9:調節后的時間

在調試過程中,一開始沒有光標的閃爍,不確定具體調節的是那一位,后來根據lcd1602的原理設置其閃爍,知道調節后是哪一個時間和日期。后來在設置星期的時候怎么都設置,怎么都不出來7,后來檢查源程序,發現程序中不包含7,修改以后,可以實現時間日期的準確調節,并能夠準確的按照時鐘連續運行下去。

設計心得

經過這次課程設計,讓我充分認識了自己的不足,太多的基礎知識不知道,導致這個過程變得非常艱難。最開始的時候是準備做一個上課講過的簡單的時鐘,僅僅包含有時分秒,直接弄上一個編程語言然后就可以實現了,但是還有許多的

定義不知道如何去設置,于是就在開發板上面找到包含時分秒日月星期年的程序,然后看最基礎的教學視頻,把lcd1602和1302時鐘芯片還有開關等組裝成一個時鐘秒表,其中的程序有錯誤的,有何自己設計不同的,于是便根據最基本的知識來看程序,然后進行修改,稍微有點錯誤就會導致程序的無法進行,可見學習單片機是一個嚴謹的過程,容不得絲毫馬虎。反正是最后做出來的時候,只有一個感覺,太累了,好不容易。如果基礎知識牢固的話,那么現在的我應該是很隨意的就設計出來這個電子表,但是實際情況卻不是這樣,花了大量的時間去重新學習基礎知識,使設計緩慢的進行下去。

    在設計的過程中,遇到過很多的困難,像windows8上面裝keil4,出現了不兼容的問題,在網上多處搜索得到的答案都是換windows7,但問了多個以前裝過keil4的同學,終于知道了如何解決,設置系統不更新,然后根據開發板贈送的光盤上面的步驟一步步完成了安裝,然后對整個程序進行修改,無奈的是改完程序后編譯沒有錯誤,但是就是顯示不出來東西,找了好久也找不到解決的辦法,只好用源程序進行簡單的修改來實現我的功能。可以這樣說,這次的課程設計是一次不成功的設計。在以后的學習中,一定要認真學習,熟練的掌握單片機與編程知識。


4  軟件設計
4.1  主源程序
  1. void main()
  2. {
  3.               unsigned char i;
  4.               Int0Configuration();
  5.               LcdInit();
  6.               Ds1302Init();
  7.               while(1)
  8.               {            
  9.                             if(SetState==0)
  10.                             {
  11.                                           Ds1302ReadTime();
  12.                             }
  13.                             else
  14.                             {
  15.                                           if(K1==0)                            //檢測按鍵K1是否按下
  16.                                           {
  17.                                                         Delay10ms();              //消除抖動
  18.                                                         if(K1==0)
  19.                                                         {
  20.                                                                       SetPlace++;
  21.                                                                       if(SetPlace>=7)
  22.                                                                                     SetPlace=0;                                                                     
  23.                                                         }

  24.                                                         while((i<50)&&(K1==0))              //檢測按鍵是否松開
  25.                                                         {
  26.                                                                       Delay10ms();
  27.                                                                       i++;
  28.                                                         }
  29.                                                         i=0;
  30.                                           }
  31.                                           if(K2==0)                            //檢測按鍵K2是否按下
  32.                                           {
  33.                                                         Delay10ms();              //消除抖動
  34.                                                         if(K2==0)
  35.                                                         {
  36.                                                                       TIME[SetPlace]++;
  37.                                                                       if((TIME[SetPlace]&0x0f)>9)                                                                      //換成BCD碼。
  38.                                                                       {
  39.                                                                                     TIME[SetPlace]=TIME[SetPlace]+6;
  40.                                                                       }
  41.                                                                       if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                            //分秒只能到59
  42.                                                                       {
  43.                                                                                     TIME[SetPlace]=0;
  44.                                                                       }
  45.                                                                       if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                            //小時只能到23
  46.                                                                       {
  47.                                                                                     TIME[SetPlace]=0;
  48.                                                                       }
  49.                                                                       if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                            //日只能到31
  50.                                                                       {
  51.                                                                                     TIME[SetPlace]=0;            
  52.                                                                       }
  53.                                                                       if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                            //月只能到12
  54.                                                                       {
  55.                                                                                     TIME[SetPlace]=0;
  56.                                                                       }            
  57.                                                                       if((TIME[SetPlace]>=0x8)&&(SetPlace==5))                            //周只能到7
  58.                                                                       {
  59.                                                                                     TIME[SetPlace]=1;
  60.                                                                       }                           
  61.                                                                       if(SetPlace==5)                            //月只能到12
  62.                                                                       {
  63.                                                                                     TIME[SetPlace]=;
  64.                                                                       }            
  65.                                                         }
  66.                                                       
  67.                                                         while((i<50)&&(K2==0))              //檢測按鍵是否松開
  68.                                                         {
  69.                                                                       Delay10ms();
  70.                                                                       i++;
  71.                                                         }
  72.                                                         i=0;
  73.                                                       
  74.                                           }                                                                                   
  75.                             }
  76.                             LcdDisplay();            
  77.               }
  78.             
  79. }
復制代碼


4.2  lcd1602源程序

void LcdDisplay()
{
              LcdWriteCom(0x80+0X40);
              LcdWriteData('0'+TIME[2]/16);                                                        //時
              LcdWriteData('0'+(TIME[2]&0x0f));                                                      
              LcdWriteData('-');
              LcdWriteData('0'+TIME[1]/16);                                                        //分
              LcdWriteData('0'+(TIME[1]&0x0f));            
              LcdWriteData('-');
              LcdWriteData('0'+TIME[0]/16);                                                        //秒
              LcdWriteData('0'+(TIME[0]&0x0f));

              LcdWriteCom(0x80);
              LcdWriteData('2');
              LcdWriteData('0');
              LcdWriteData('0'+TIME[6]/16);                                          //年
              LcdWriteData('0'+(TIME[6]&0x0f));
              LcdWriteData('-');
              LcdWriteData('0'+TIME[4]/16);                                          //月
              LcdWriteData('0'+(TIME[4]&0x0f));
              LcdWriteData('-');
              LcdWriteData('0'+TIME[3]/16);                                          //日
              LcdWriteData('0'+(TIME[3]&0x0f));
              LcdWriteCom(0x8D);
              LcdWriteData('0'+(TIME[5]&0x07));              //星期      

      
4.3  1302時鐘源程序


  1. void Ds1302Write(uchar addr, uchar dat)
  2. {
  3.               uchar n;
  4.               RST = 0;
  5.               _nop_();

  6.               SCLK = 0;//先將SCLK置低電平。
  7.               _nop_();
  8.               RST = 1; //然后將RST(CE)置高電平。
  9.               _nop_();

  10.               for (n=0; n<8; n++)//開始傳送八位地址命令
  11.               {
  12.                             DSIO = addr & 0x01;//數據從低位開始傳送
  13.                             addr >>= 1;
  14.                             SCLK = 1;//數據在上升沿時,DS1302讀取數據
  15.                             _nop_();
  16.                             SCLK = 0;
  17.                             _nop_();
  18.               }
  19.               for (n=0; n<8; n++)//寫入8位數據
  20.               {
  21.                             DSIO = dat & 0x01;
  22.                             dat >>= 1;
  23.                             SCLK = 1;//數據在上升沿時,DS1302讀取數據
  24.                             _nop_();
  25.                             SCLK = 0;
  26.                             _nop_();            
  27.               }            
  28.                            
  29.               RST = 0;//傳送數據結束
  30.               _nop_();
  31. }
復制代碼

完整的Word格式文檔51黑下載地址:

基于51單片機的電子表.docx (1.06 MB, 下載次數: 19)



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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本国产精品视频 | 日产精品久久久一区二区福利 | 色偷偷噜噜噜亚洲男人 | 日本男人天堂 | 不卡欧美| 久久久国产视频 | 亚洲人成人一区二区在线观看 | 国产成人短视频在线观看 | 亚洲欧美在线视频 | 日韩在线一区二区 | 久久草视频 | av性色全交蜜桃成熟时 | 国产在线精品一区二区 | 羞羞视频免费观看 | 一级做a | 国产成人免费一区二区60岁 | www.欧美.com | 久久久久久久久久久蜜桃 | 在线日韩欧美 | 日韩欧美不卡 | 在线超碰 | 国产精品毛片一区二区三区 | 国产精品一区二 | 亚洲品质自拍视频 | 伊人久久综合 | 国产精品久久久久久高潮 | 福利久久 | 国产日韩精品一区二区三区 | 超碰美女在线 | 四虎最新| aaaaaaa片毛片免费观看 | 欧美 日韩 国产 成人 | 欧美精品导航 | 日韩一区二区在线视频 | 久久综合久久综合久久综合 | 日本一区二区三区在线观看 | 色呦呦在线 | 欧美精品首页 | 天天夜天天操 | 欧美精品中文字幕久久二区 | 欧美三级视频 |