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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:430730 發(fā)表于 2018-11-21 18:31 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機課程設計任務書

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

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

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


1  系統(tǒng)概述
1.1  
設計目的

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

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

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

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

1.2  設計內容

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

2.液晶屏中的初始時間可調節(jié)

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

4每次調節(jié)時都有光標閃爍

1.3  設計目標

1.在51開發(fā)板上能夠實現(xiàn)時間日期的顯示

2.學會開發(fā)板的基礎知識

3.可穩(wěn)定調節(jié)和計時

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

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

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

2.2  用實物進行電子鐘的

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

3  硬件設計
3.1  系統(tǒng)的原理

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

圖一:系統(tǒng)工作原理圖

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  系統(tǒng)調試

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

圖7:運行結果

圖8:運行初始狀態(tài)

圖9:調節(jié)后的時間

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

設計心得

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

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

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


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

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

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



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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区免费观看 | 日韩欧美一级片 | 在线午夜电影 | 天天色图| 91精品国产91久久久久久吃药 | 国产成视频在线观看 | 久久久xx| 免费在线观看黄色av | 黄色一级网 | 欧美一级黄色片在线观看 | 久久精品国产一区老色匹 | 久久久久久成人 | 欧美在线精品一区 | 午夜免费精品视频 | 精品亚洲一区二区三区四区五区高 | 国产美女永久免费无遮挡 | 欧美精品91 | 一本一道久久a久久精品综合 | 久久免费视频观看 | 一区二区日本 | 国产男女精品 | 久久综合伊人 | 欧美全黄| 久久一区二区视频 | 99精品一区二区三区 | 亚洲乱码一区二区 | 亚洲成人黄色 | 精品亚洲91 | 欧美一级做性受免费大片免费 | 日产精品久久久一区二区福利 | 日韩在线精品视频 | 中文字幕不卡视频在线观看 | 不卡视频一区二区三区 | 欧美区日韩区 | 欧美a v在线 | 精品久久久久香蕉网 | 看亚洲a级一级毛片 | 久久久精品 | 美女一级黄 | 久久精品91久久久久久再现 | 国产一级特黄aaa大片评分 |