欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4154|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:430730 發(fā)表于 2018-11-21 18:31 | 顯示全部樓層 |閱讀模式
單片機(jī)課程設(shè)計(jì)任務(wù)書

題  目
基于51單片機(jī)的電子表
課題性質(zhì)
工程設(shè)計(jì)
課題來源
自選
指導(dǎo)教師

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

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

1.jpg
1  系統(tǒng)概述
1.1  
設(shè)計(jì)目的

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

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

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

4結(jié)合DS1302和LCD1602液晶屏設(shè)計(jì)出電子表

1.2  設(shè)計(jì)內(nèi)容

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

2.液晶屏中的初始時(shí)間可調(diào)節(jié)

3.液晶屏中的時(shí)間日期可調(diào)

4每次調(diào)節(jié)時(shí)都有光標(biāo)閃爍

1.3  設(shè)計(jì)目標(biāo)

1.在51開發(fā)板上能夠?qū)崿F(xiàn)時(shí)間日期的顯示

2.學(xué)會(huì)開發(fā)板的基礎(chǔ)知識(shí)

3.可穩(wěn)定調(diào)節(jié)和計(jì)時(shí)

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

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

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

2.2  用實(shí)物進(jìn)行電子鐘的

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

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

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

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

3.2  部分電路

圖二:STC89C52芯片引腳連線

圖三:LCD1602液晶屏引腳連線

圖四:開關(guān)引腳連線

圖5:USB自動(dòng)下載電路引腳連線

圖6:DS1302時(shí)鐘芯片引腳連線

3.3   I/O分配

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

開關(guān)的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液晶屏一個(gè)

DS1302時(shí)鐘芯片一個(gè)

STC89C52芯片一個(gè)

晶振、電阻、電容、開關(guān)若干



5  系統(tǒng)調(diào)試

下載開發(fā)板自帶的燒錄軟件,調(diào)試運(yùn)行結(jié)果如下

圖7:運(yùn)行結(jié)果

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

圖9:調(diào)節(jié)后的時(shí)間

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

設(shè)計(jì)心得

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

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

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


4  軟件設(shè)計(jì)
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();              //消除抖動(dòng)
  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();              //消除抖動(dòng)
  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))                            //小時(shí)只能到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. }
復(fù)制代碼


4.2  lcd1602源程序

void LcdDisplay()
{
              LcdWriteCom(0x80+0X40);
              LcdWriteData('0'+TIME[2]/16);                                                        //時(shí)
              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時(shí)鐘源程序


  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ù)在上升沿時(shí),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ù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
  24.                             _nop_();
  25.                             SCLK = 0;
  26.                             _nop_();            
  27.               }            
  28.                            
  29.               RST = 0;//傳送數(shù)據(jù)結(jié)束
  30.               _nop_();
  31. }
復(fù)制代碼

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

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



回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表