版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計任務(wù)書</b></p><p> 題 目:基于51單片機的秒表設(shè)計</p><p><b> 初始條件:</b></p><p> 具備Keil編程能力和Proteus仿真能力;</p><p> 熟悉定時器/計數(shù)器的實現(xiàn)原理;</p>
2、<p> 提供編程所需要的計算機一臺</p><p> 要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p> 1、用定時器/計數(shù)器設(shè)計一個簡單的秒表,能顯示計時狀態(tài)和結(jié)果。</p><p> 2、進行電路實驗或仿真,并使用C語言進行程序的開發(fā)。</p><p> 3、完成符
3、合學(xué)校要求的設(shè)計說明書</p><p><b> 時間安排:</b></p><p> 一周,其中3天程序設(shè)計,2天程序調(diào)試</p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 系主任(或責(zé)任教師)簽名: 年 月
4、日</p><p><b> 摘要</b></p><p> 單片機控制秒表是集于單片機技術(shù)、模擬電子技術(shù)、數(shù)字技術(shù)為一體的機電一體化高科技產(chǎn)品,具有功耗低,安全性高,使用方便等優(yōu)點。本次設(shè)計內(nèi)容為以 8051 單片機為核心的秒表,它采用鍵盤輸入,單片機技術(shù)控制。設(shè)計內(nèi)容以硬件電路設(shè)計,軟件設(shè)計和制作三電路板部分來設(shè)計。利用單片機的定時器/計數(shù)器定時和計數(shù)的原理,
5、用集成電路芯片、LCD1602液晶以及按鍵來設(shè)計計時器。將軟、硬件有機地結(jié)合起來,使它擁有正確的計時、暫停、清零、所計時間的存儲和查看、并同時可以用液晶顯示,在現(xiàn)實生中應(yīng)用廣泛。</p><p> 關(guān)鍵詞:秒表;8051;定時器</p><p><b> 1.概述</b></p><p> 《單片機應(yīng)用實踐》課程設(shè)計是學(xué)好本門課程的又一重
6、要實踐性教學(xué)環(huán)節(jié),課程設(shè)計的目的就是配合本課程的教學(xué)和平時實驗,以達到鞏固消化課程的內(nèi)容,進一步加強綜合應(yīng)用能力及單片機應(yīng)用系統(tǒng)開發(fā)和設(shè)計能力的訓(xùn)練,啟發(fā)創(chuàng)新思維,使之具有獨立單片機產(chǎn)品和科研的基本技能,是以培養(yǎng)學(xué)生綜合運用所學(xué)知識的過程,是知識轉(zhuǎn)化為能力和能力轉(zhuǎn)化為工程素質(zhì)的重要階段。</p><p> 本次設(shè)計內(nèi)容為以 8051 單片機為核心的秒表,它采用鍵盤輸入,單片機技術(shù)控制。設(shè)計內(nèi)容以硬件電路設(shè)計,軟
7、件設(shè)計和制作三電路板部分來設(shè)計。利用單片機的定時器/計數(shù)器定時和計數(shù)的原理,用集成電路芯片、LCD1602液晶以及按鍵來設(shè)計計時器。將軟、硬件有機地結(jié)合起來,使它擁有正確的計時、暫停、清零、所計時間的存儲和查看、并同時可以用液晶顯示。</p><p><b> 2.理論分析</b></p><p><b> 2.1 設(shè)計內(nèi)容</b></
8、p><p> 開始時,顯示“00:000”,按下按鈕1后開始從0計時,顯示精度為0.001s;共有5個功能按鍵,第1個按鍵開始計時,第2個按鍵暫停,第3個按鍵復(fù)位,第4個按鍵記錄時間,第五個按鍵查看時間。</p><p> 根據(jù)8051芯片的的工作原理和工作方式,對LCD1602液晶進行顯示控制,并能用按鈕實現(xiàn)秒表起動、停止、復(fù)位、所計時間的存儲和查看、清零功能,精確到0.001秒。<
9、;/p><p> 要求選用定時器的工作方式,畫出使用單片機控制LCD1602液晶顯示的電路圖,并實現(xiàn)其硬件電路,并編程完成軟件部分,最后調(diào)試秒表起動、停止、清零等功能。</p><p><b> 2.2 具體步驟</b></p><p> 單片機電子秒表需要解決三個主要問題:</p><p> 一是有關(guān)單片機定時器的
10、使用;</p><p> 二是如何實現(xiàn)LCD1602液晶的顯示;</p><p> 三是如何對鍵盤輸入進行編程。</p><p> 定時器:51有4種工作方式,本方案采用工作方式1,即為16位定時器。在高八位和低八位分別置數(shù)。由于定時器做的是加法計數(shù),則應(yīng)該將要定時的數(shù)以補碼的形式,存放在定時器中。</p><p> LCD1602液
11、晶:液晶用RS、RW、EA三個控制端口進行顯示等控制。D0-D7口分別接單片機的P0并行口,進行數(shù)據(jù)的傳輸。液晶的具體顯示方式及其時序圖在其資料中進行查閱并應(yīng)用。</p><p> 鍵盤:鍵盤函數(shù)可以作為一個子程序,在main函數(shù)中循環(huán)查找調(diào)用,根據(jù)按鍵的功能,我們在按鍵中寫入相應(yīng)的程序,在按鍵1中開中斷,并且對定時器進行設(shè)初值。即可實現(xiàn)開始計時。在按鍵2中關(guān)中斷,則可實現(xiàn)計時暫停。按鍵3即為復(fù)位鍵,則可復(fù)位為
12、初始值00:000。按鍵4即為記錄鍵,對時間進行記錄。按鍵5即為查看鍵,對所記錄的時間進行查看。</p><p><b> 3 程序設(shè)計</b></p><p><b> 3.1設(shè)計思路</b></p><p> 單片機應(yīng)用系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成。硬件系統(tǒng)是指單片機以及擴展的存儲器、I\O 接口、外圍擴展
13、的功能電路。軟件系統(tǒng)包括監(jiān)控程序和各種應(yīng)用程序。 </p><p> 在單片機應(yīng)用系統(tǒng)中,單片機是整個系統(tǒng)的核心,對整個系統(tǒng)的信息輸入、處理、信息輸出進行控制。與單片機配套的有相應(yīng)的時鐘電路如圖3.1所示以及擴展的存儲器和 I\O 接口,使單片機應(yīng)用系統(tǒng)能夠運行。</p><p> 在一個單片機應(yīng)用系統(tǒng)中,往往都會輸入信息和顯示信息,這就涉及鍵盤和顯示器。在單片機應(yīng)用系統(tǒng)中,一般都根據(jù)
14、系統(tǒng)的要求配置相應(yīng)的鍵盤和顯示器。配置鍵盤和顯示器一般都沒有統(tǒng)一的規(guī)定,有的系統(tǒng)功能復(fù)雜,需輸入的信息和顯示的信息量大,配置的鍵盤和顯示器功能相對強大,而有些系統(tǒng)輸入/輸出的信息少,這時可能用幾個按鍵和幾個 LED 指示燈就可以進行處理了。在單片機應(yīng)用系統(tǒng)在中配置的鍵盤可以是獨立鍵盤,也可能是矩陣鍵盤。</p><p><b> 3.2設(shè)計過程</b></p><p&g
15、t; 3.2.1 系統(tǒng)設(shè)計思路及描述</p><p> 本設(shè)計在LCD1602液晶上顯示時間,則可利用MCS-51系列單片機的芯片AT89C52的P3.0,P3.1 ,P3.2,P3.3作為按鍵的入口;定時器 T0 作為每 0.001 秒加一的定時器;其中“開始”按鍵按下時開始計時,按下按鍵2則暫停;按下按鍵3對時間進行記錄,按下按鍵4對所記錄的時間進行查看。“清零”按鍵即為復(fù)位按鍵,復(fù)位清零,此時若再按下按
16、鍵1則又可重新開始計時。</p><p> 3.3 程序流程及實驗效果</p><p> 3.3.1 程序流程圖</p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p>
17、;<p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p>
18、<p> 圖3.1 主程序流程圖</p><p> 3.3.2 源程序及說明</p><p> #include "reg51.h"</p><p> #include "string.h"</p><p> #include "stdio.h"</p&
19、gt;<p> #include <stdlib.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> void Initialize_LCD();</p><p> void ShowStri
20、ng(uchar x,uchar y,uchar *str);</p><p> sbit K1 = P3^2; //K1表示開始計時</p><p> sbit K2 = P3^3; //暫停</p><p> sbit K3 = P3^4; //記錄</p><p> sbit K4 = P3^5; //查看</p&
21、gt;<p> uchar code prompt[]="PRESS K1 START " ;</p><p> uchar a[]="00:000";</p><p><b> int k3=0;</b></p><p><b> int numb;</b>&
22、lt;/p><p> void Delayxms(uint ms)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> while(ms--)</p><p><b> {</b></p
23、><p> for(i=0;i<120;i++);</p><p><b> }</b></p><p><b> }</b></p><p> void keyscan()</p><p><b> {</b></p><
24、;p> if(K1==0) //計時開始</p><p><b> {</b></p><p> Delayxms(1);</p><p><b> if(K1==0)</b></p><p><b> {</b></p><p&g
25、t; TMOD=0x11;</p><p> TH0=(65536-1000)/256; //賦計數(shù)初值</p><p> TL0=(65536-1000)%256;</p><p> EA=1; //開總斷</p><p> ET0=1;//開啟定時器中斷</p><p> TR0=1;//啟動定時器&
26、lt;/p><p> while(!K1);//等待按鍵釋放</p><p><b> }</b></p><p><b> }</b></p><p> if(K2==0)//暫停</p><p><b> {</b></p>
27、<p><b> EA=0;</b></p><p><b> ET0=0;</b></p><p><b> TR0=0;</b></p><p><b> }</b></p><p> if(K3==0) //時間的記錄&l
28、t;/p><p><b> { </b></p><p><b> int k;</b></p><p> Delayxms(50);</p><p> for(k=0;k<6;k++) </p><p><b> {</b></p&
29、gt;<p> b[k3][k]=a[k];</p><p><b> }</b></p><p><b> k3++;</b></p><p> while(!K3);</p><p><b> }</b></p><p>
30、if(K4==0) //查看所記錄的時間</p><p><b> {</b></p><p> uchar c[6];</p><p><b> int num;</b></p><p> Delayxms(50);</p><p> if(K4==0) {&
31、lt;/p><p> while(1) {</p><p> for(num=0;num<6;num++) {</p><p> c[num]=b[0][num];</p><p><b> } </b></p><p> ShowString(1,1,c);</p>&
32、lt;p> Delayxms(50);</p><p> if(K4==0) {</p><p> Delayxms(50);</p><p> if(K4==0) {</p><p><b> while(1){</b></p><p> for(num=0;num<6;
33、num++) {</p><p> c[num]=b[1][num];</p><p><b> } </b></p><p> ShowString(1,1,c);}</p><p><b> }</b></p><p><b> }</b>
34、</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void main()</p>&l
35、t;p><b> {</b></p><p> Initialize_LCD();</p><p><b> while(1)</b></p><p><b> {</b></p><p> keyscan();</p><p> S
36、howString(1,0,prompt);</p><p> ShowString(1,1,a);</p><p><b> }</b></p><p><b> }</b></p><p> void time() interrupt 1</p><p>&
37、lt;b> {</b></p><p> TH0=(65536-1000)/256;</p><p> TL0=(65536-1000)%256;</p><p> a[5]++;//初值為0</p><p> if(a[5]==0X3A) </p><p><b> { &
38、lt;/b></p><p> a[5]=0X30;</p><p><b> a[4]++;</b></p><p><b> }</b></p><p> if(a[4]==0X3A)</p><p><b> { </b></
39、p><p> a[4]=0X30;</p><p><b> a[3]++;</b></p><p><b> }</b></p><p> if(a[3]==0X3A)</p><p><b> {</b></p><p>
40、; a[3]=0X30;</p><p><b> a[1]++;</b></p><p><b> }</b></p><p> if(a[1]==0X3A)</p><p><b> {</b></p><p> a[1]=0X30;&l
41、t;/p><p><b> a[0]++;</b></p><p><b> }</b></p><p> if(a[0]==0X3A)</p><p><b> {</b></p><p> a[]="00:000";<
42、/p><p><b> }</b></p><p><b> }</b></p><p> //************1602***********//</p><p> #include <reg52.h></p><p> #include <i
43、ntrins.h></p><p> #include <string.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit RS = P0^7;</p><p> s
44、bit RW = P0^6;</p><p> sbit EN = P0^5;</p><p> void Delayms(uint ms)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> while(ms
45、--)</p><p><b> {</b></p><p> for(i=0;i<120;i++);</p><p><b> }</b></p><p><b> }</b></p><p> uchar Busy_Check()
46、 </p><p><b> {</b></p><p> uchar LCD_Status;</p><p><b> RS = 0;</b></p><p><b> RW = 1;</b></p><p><b> EN =
47、1;</b></p><p> Delayms(1);</p><p> LCD_Status = P0;</p><p><b> EN = 0;</b></p><p> return LCD_Status;</p><p><b> }</b>&l
48、t;/p><p> void Write_LCD_Command(uchar cmd)</p><p><b> {</b></p><p> while((Busy_Check()&0x80)==0x80); //讀寫操作使能位檢測</p><p><b> RS = 0;</b>&l
49、t;/p><p><b> RW = 0;</b></p><p><b> EN = 0;</b></p><p><b> P0 = cmd;</b></p><p><b> EN = 1;</b></p><p> D
50、elayms(1);</p><p><b> EN = 0;</b></p><p><b> }</b></p><p> void Write_LCD_Data(uchar dat)</p><p><b> {</b></p><p>
51、 while((Busy_Check()&0x80)==0x80);</p><p><b> RS = 1;</b></p><p><b> RW = 0;</b></p><p><b> EN = 0;</b></p><p><b> P0
52、= dat;</b></p><p><b> EN = 1;</b></p><p> Delayms(1);</p><p><b> EN = 0;</b></p><p><b> }</b></p><p> void I
53、nitialize_LCD()</p><p><b> {</b></p><p> Write_LCD_Command(0x38);//功能選擇</p><p> Delayms(1);</p><p> Write_LCD_Command(0x01);//清屏</p><p
54、> Delayms(1);</p><p> Write_LCD_Command(0x06);//增量顯示,整體不移屏</p><p> Delayms(1);</p><p> Write_LCD_Command(0x0c);//開顯示,關(guān)消影,關(guān)閃爍</p><p> Delayms(1);</p&
55、gt;<p><b> }</b></p><p> void ShowString(uchar x,uchar y,uchar *str)</p><p><b> {</b></p><p> uchar i = 0;</p><p><b> uint a=0
56、;</b></p><p> a = strlen(str);</p><p> if(y == 0)</p><p> Write_LCD_Command(0x80 | x);</p><p> if(y == 1)</p><p> Write_LCD_Command(0xc0 | x);&l
57、t;/p><p> for(i=0;i<a;i++)</p><p><b> {</b></p><p> Write_LCD_Data(str[i]);</p><p><b> }</b></p><p><b> }</b><
58、/p><p><b> 4.仿真效果</b></p><p> 通過最后軟件對程序的編譯,組建,執(zhí)行,還有最終生成.hex 文件,把.hex下載到TX-1C開發(fā)板的 STC89C52RC 單片機上的最終效果圖如下:</p><p> ?。?)開始從“00:000”</p><p> 圖4.1 復(fù)位從“00:000”計時
59、</p><p><b> ?。?)開始計時</b></p><p><b> 圖4.2 開始計時</b></p><p><b> ?。?)暫停功能:</b></p><p><b> 圖4.3 暫停功能</b></p><p&g
60、t;<b> ?。?)及時歸零:</b></p><p><b> 圖4.4 復(fù)位歸零</b></p><p><b> 5.心得體會</b></p><p> 通過對本次課程的課程設(shè)計,使自己深刻的認識到自己的很多不足之處,在實際動手操作能力的不足,在進行程序編程時,自己需要,認真審題,看懂題
61、目的要求!對于軟件編程不益太簡單或者太難。做到既能把課題完成又能鍛煉 自己的能力!根據(jù)課題要求,復(fù)習(xí)相關(guān)的知識,查詢相關(guān)的資料。根據(jù)課程條件,找到適合的方案,找到需要的元器件及工具,準(zhǔn)備課程。根據(jù)課程設(shè)計的要求和自己所要增加的功能寫好程序流程圖,在程序流程圖的基礎(chǔ)上,根據(jù)芯片的功能寫出相應(yīng)的程序和增加額外的功能程序。然后再進行 程序調(diào)試和相應(yīng)的修改,以達到能夠?qū)崿F(xiàn)所要求的功能的目的。還要根據(jù)課程的實際情況,添加些額外程序來使系統(tǒng)更加的穩(wěn)
62、定,如開關(guān)的去抖(采用延遲)。程序要盡量做到由各個子程序組成,在有些程序后面最好加注釋,這樣在程序出錯的檢查過程中可以更容易查找的到,也更簡潔,更明白易懂。該課程設(shè)計的程序可以參考 MCS-51 系列單片機,也可自己根據(jù)自己熟悉的方 法來編程如單片機 C 語言。在設(shè)計控制開關(guān)時,注意兩個中斷的打開和關(guān)閉的先后順序,否則就會出錯。這次的單片機課程設(shè)計重點是理論與實際的相結(jié)合。該設(shè)計從頭到尾都要自己參與,熟悉了對整個設(shè)計的過程</p&
63、gt;<p><b> 參考文獻</b></p><p> [1] 孫育才編著.MCS-51 系列單片微型計算機及其應(yīng)用.東南大學(xué)出版社.2009.12 </p><p> [2] 郭天祥編著.51 單片機C語言教程-入門、提高、開發(fā)全攻略.電子工業(yè)出版社.2010. 05</p><p> [3] 劉剛編著.Protel
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于89c51單片機的秒表課程設(shè)計
- 基于89c51單片機的秒表課程設(shè)計 (2)
- 基于89c51單片機的秒表課程設(shè)計
- 單片機多功能秒表課程設(shè)計--89c51單片機秒表的設(shè)計
- 基于89c51單片機的秒表設(shè)計
- 89c51單片機課程設(shè)計
- 基于89c51單片機的秒表課程設(shè)計說明書
- 89c51單片機課程設(shè)計之秒表設(shè)計實驗報告
- 基于89c51單片機交通燈課程設(shè)計
- 單片機課程設(shè)計---基于89c51的電纜定長控制設(shè)計
- 89c51單片機數(shù)字電壓表課程設(shè)計
- 基于89c51單片機的數(shù)字搶答器課程設(shè)計
- 課程設(shè)計-基于89c51單片機的數(shù)字溫度計設(shè)計
- 基于89c51單片機的智能小車設(shè)計
- 單片機課程設(shè)計_基于89c51的數(shù)字電子時鐘的設(shè)計
- 基于89c51單片機電子時鐘課程設(shè)計
- 單片機課程設(shè)計基于89c51的倒計時牌設(shè)計
- 課程設(shè)計論文-基于89c51單片機的數(shù)字電子鐘設(shè)計
- 89c51單片機中文資料
- 基于89c51單片機的智能窗簾
評論
0/150
提交評論