基于單片機的自行車?yán)锍瘫淼能浖O(shè)計論文_第1頁
基于單片機的自行車?yán)锍瘫淼能浖O(shè)計論文_第2頁
基于單片機的自行車?yán)锍瘫淼能浖O(shè)計論文_第3頁
基于單片機的自行車?yán)锍瘫淼能浖O(shè)計論文_第4頁
基于單片機的自行車?yán)锍瘫淼能浖O(shè)計論文_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、CHANGZHOU INSTITUTE OF TECHNOLOGY科研實踐題目:基于單片機的自行車?yán)锍瘫碓O(shè)計二級學(xué)院(直屬學(xué)部): 延陵學(xué)院 專業(yè): 電氣工程及其自動化 班級: 10電Y3 學(xué)生姓名: 學(xué)號: 10124508 指導(dǎo)教師姓名: 范力旻 職稱: 副教授 2013年12月30日至2014年1月10日目錄第1章 緒論21.1課題的背景21.2課題的主要任務(wù)及設(shè)計內(nèi)容3第2章 總體方案的設(shè)計32.1 任務(wù)分析與實現(xiàn)32.2 自行車?yán)锍瘫碛布桨冈O(shè)計42.3 自行車?yán)锍瘫碥浖桨冈O(shè)計4第3章 自行車?yán)锍瘫碥浖绦蛟O(shè)計53.1 自行車?yán)锍瘫砜傮w程序設(shè)計5第4章 自行車?yán)锍瘫碥浖?/p>

2、程序設(shè)計64.1 中斷子程序設(shè)計64.2 延時程序84.3 按鍵掃描84.4 數(shù)據(jù)處理子程序設(shè)計94.5 顯示子程序的設(shè)計114.6 存儲芯片的選擇13第5章 軟件仿真145.1 Keil軟件的使用145.2 Keil軟件仿真14第6章 系統(tǒng)調(diào)試與分析166.1 調(diào)試故障及原因分析16第7章 總結(jié)16附錄17參考文獻17元器件清單18原理圖20程序清單20實物圖33第1章 緒論1.1課題的背景自行車被發(fā)明及使用到現(xiàn)在已有兩百多年的歷史,這兩百年間人類在不斷的嘗試與研發(fā)過程中,將玩具式的木馬車轉(zhuǎn)換到今日各式新穎休閑運動自行車。我國是自行車大國,隨著人們生活水平的不斷提高,自行車已經(jīng)不僅僅是運輸、

3、代步的工具,其輔助功能也變得越來越重要。因此,人們希望自行車的娛樂、休閑、鍛煉的功能越來越多,能帶來大家更多的健康與快樂。在這個背景下,自行車?yán)锍瘫碜鳛樽孕熊嚨囊淮筝o助工具迅速發(fā)展起來。 本次設(shè)計主要闡述一種基于霍爾元件的自行車?yán)锍瘫淼脑O(shè)計。以 AT89S52 單片機為核心,A44E 霍爾傳感器測轉(zhuǎn)數(shù),實現(xiàn)對自行車?yán)锍?速度的測量統(tǒng)計,采用 24C02 實現(xiàn)在系統(tǒng)掉電的時候保存里程信息,并能將自行車的里程數(shù)及速度用LCD實時顯示。文章詳細介紹了自行車?yán)锍瘫淼挠布娐泛蛙浖O(shè)計。硬件部分利用霍爾元件將自行車每轉(zhuǎn)一圈的脈沖數(shù)傳入單片機系統(tǒng),然后單片機系統(tǒng)將信號經(jīng)過處理送顯示。軟件部分用C

4、語言進行編程,采用模塊化設(shè)計思想。1.2課題的主要任務(wù)及設(shè)計內(nèi)容本文介紹的自行車?yán)锍瘫硎且訟TC89S52單片機為核心,用開關(guān)型霍爾傳感器將到來的脈沖信號輸入到單片機進行控制與計算,再采用LCD液晶屏進行顯示,直觀的顯示給使用者,方便地實現(xiàn)了智能化、高精度、高可靠性、高效率的自行車?yán)锍瘫淼脑O(shè)計,并且使用方便。本文主要介紹了自行車?yán)锍瘫淼脑O(shè)計思想、方案論證等內(nèi)容,整體上分為硬件部分設(shè)計和軟件部分設(shè)計。首先對該課題進行任務(wù)分析,包括硬件和軟件方案的設(shè)計,然后具體的介紹里程表的硬件設(shè)計(傳感器的選擇、單片機的選擇、顯示電路的設(shè)計),軟件設(shè)計(單片機的選擇、存儲器的選擇、中斷子程序設(shè)計、數(shù)據(jù)處理子程序

5、設(shè)計、顯示子程序的設(shè)計),最后進行軟件仿真,系統(tǒng)調(diào)試,然后分析解決問題,對這次設(shè)計進行總結(jié)。軟件設(shè)計采用C語言編寫,主要思想是自頂向下,模塊化設(shè)計。第2章 總體方案的設(shè)計2.1 任務(wù)分析與實現(xiàn)本設(shè)計的任務(wù)是:以ATC89S52單片機為處理核心,用傳感器將車輪的轉(zhuǎn)數(shù)轉(zhuǎn)換為電脈沖,進行處理后送入單片機。里程及速度的測量,是經(jīng)過ATC89S52測出總的脈沖數(shù)和轉(zhuǎn)一圈所需的時間,再經(jīng)過單片機的計算得出,其結(jié)果通過LCD顯示屏顯示出來。 本系統(tǒng)總體思路如下:設(shè)計時,應(yīng)綜合考慮測速精度和系統(tǒng)反應(yīng)時間。本設(shè)計采用的脈沖計數(shù)方法,用來計算速度具有較高的測速精度。在計算里程時取了自行車的理想

6、狀態(tài)。里程和速度傳感器采用霍爾元件。自行車?yán)锍痰臏y量是通過霍爾元件輸出端的電壓發(fā)生變化產(chǎn)生脈沖,通過計數(shù)器,根據(jù)脈沖數(shù)計算里程。自行車速度的測量是通過定時器測出車輪轉(zhuǎn)一周所用的時間t,車輪周長L除以時間t就是自行車的速度。本次科研設(shè)計要求達到的各項指標(biāo)和實現(xiàn)方法:1、用霍爾傳感器產(chǎn)生脈沖信號,對脈沖信號進行計數(shù),這個指標(biāo)的實現(xiàn)是利用單片機自帶的計數(shù)器T0對霍爾傳感器脈沖信號進行計數(shù)的。2、對數(shù)據(jù)進行處理,用LCD顯示里程總數(shù)和速度。這個功能的實現(xiàn)是利用編程軟件,對數(shù)據(jù)進行處理得到需要的數(shù)值。最終本次課題需要實現(xiàn)的目標(biāo)是:自行車?yán)锍瘫砭哂欣锍獭⑺俣葴y試與顯示功能,采用單片機作控制,顯示電路可顯示

7、里程及速度,可以通過按鍵設(shè)定報警速度,自行車超速,系統(tǒng)發(fā)出報警提示。通過不同按鍵復(fù)位及里程清零的功能,方便地實現(xiàn)了智能化、高精度、高可靠性、高效率的自行車?yán)锍瘫淼脑O(shè)計。2.2 自行車?yán)锍瘫碛布桨冈O(shè)計自行車?yán)锍瘫淼睦锍碳八俣仍O(shè)計,采用的是霍爾傳感器進行檢測。當(dāng)自行車轉(zhuǎn)過一圈時產(chǎn)生一個脈沖,根據(jù)脈沖數(shù)計算里程,然后計算自行車車輪轉(zhuǎn)過一圈所需的時間,用總的里程除以時間即可得到速度。在設(shè)計的時候還要設(shè)計系統(tǒng)的輸入部分(按鍵電路、存儲電路等),輸出部分(顯示電路、報警等)。2.3 自行車?yán)锍瘫碥浖桨冈O(shè)計通過軟件控制單片機的功能是單片機的主要特點和優(yōu)點,程序的設(shè)計要考慮合理性和可讀性,遵循模塊化設(shè)計的

8、原則,采用自頂向下的設(shè)計方法。模塊化設(shè)計使程序的可讀性好、修改及完善方便。 軟件設(shè)計包括主程序、中斷子程序、延時程序、按鍵掃描、存儲芯片的選擇、數(shù)據(jù)處理子程序(分為里程子程序、速度子程序)、顯示子程序。中斷子程序是將傳感器產(chǎn)生的信號接入計數(shù)器的T0口,然后計數(shù)器開始計數(shù),當(dāng)計數(shù)到一定數(shù)目后,計數(shù)器就產(chǎn)生溢出中斷。數(shù)據(jù)處理子程序是將得到的車輪所轉(zhuǎn)的圈數(shù)與實際要顯示值之間有一定的對應(yīng)關(guān)系,經(jīng)過軟件編程顯示所需要的值。秒表計時子程序是采用計數(shù)器T0通過編程實現(xiàn)秒表計時工作。脈沖接收子程序是通過編程實現(xiàn)脈沖的計數(shù),即對車輪所轉(zhuǎn)的圈數(shù)計數(shù)。顯示子程序是通過編程將數(shù)據(jù)處理的結(jié)果送給顯示器顯示。系

9、統(tǒng)軟件總體流程圖如圖2.3所示:初始化P3.2檢測到中斷計算速度計算里程顯示里程顯示速度開始YN圖2.3 軟件總體流程圖第3章 自行車?yán)锍瘫碥浖绦蛟O(shè)計 3.1 自行車?yán)锍瘫砜傮w程序設(shè)計在整個設(shè)計過程中,軟件設(shè)計必須與硬件設(shè)計緊密地結(jié)合在一起。軟件部分設(shè)計是設(shè)計中最核心和最為主要的?;诨魻杺鞲衅髯孕熊?yán)锍瘫淼能浖O(shè)計包括計數(shù)子程序、計時子程序、LED顯示子程序等幾大部分。由于要實現(xiàn)很多功能,所以采用模塊化設(shè)計,下面就其主要部分分別加以分析。在主程序模塊中,需要完成對各接口芯片的初始化、自行車?yán)锍毯退俣鹊某跏蓟?、中斷向量的設(shè)計以及開中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動/清除

10、標(biāo)志寄存器、里程寄存器、速度寄存器,并對它們進行初始化。然后主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動、清除、計程和計速等不同的操作。P1.2和P1.3口分別指示報警。主程序流程圖如圖3.5所示。開始LCD、定時器初始化開中斷脈沖接收數(shù)字處理顯示信息結(jié)束鍵盤輸入?NY鍵盤掃描NY圖3.5 主程序流程圖第4章 自行車?yán)锍瘫碥浖映绦蛟O(shè)計4.1 中斷子程序設(shè)計定時中斷是為滿足定時或計數(shù)的需要而設(shè)置的。為此在單片機內(nèi)部有兩個定時/計數(shù)器,以對其中的計數(shù)結(jié)構(gòu)進行計數(shù)的方法,來實現(xiàn)定時或計數(shù)功能。當(dāng)結(jié)構(gòu)發(fā)生計數(shù)溢出時,即表明定時時間或計數(shù)值已滿,這時就以計數(shù)溢出信號作為中斷請求,去置位一個溢出標(biāo)志,作

11、為單片機接受中斷請求的標(biāo)志。這種中斷請求是在單片機芯片內(nèi)部發(fā)生的,因此無須在芯片上設(shè)置引入端。定時/計數(shù)器控制寄存器TCON是8位寄存器,地址為88H,可以按位尋址。其高4位用于定時/計數(shù)器中斷控制,低4位借給外部中斷,用做中斷標(biāo)志和觸發(fā)方式選擇位。TF0/TF1:定時器計數(shù)溢出標(biāo)志位??捎糜谏暾堉袛嗷蚬〤PU查詢。這里用作中斷請求。(由硬件自動置位)。=0:定時器未溢出; =1:定時器溢出(由全“1”變成全“0”)時由硬件自動置位,申請中斷, 中斷被CPU響應(yīng)后由硬件自動清零。TR0/TR1:定時器運行啟??刂莆唬捎捎脩敉ㄟ^軟件設(shè)置 )。 =0:定時器停止運行; =1:定時器啟動運行。本設(shè)

12、計采用定時中斷,對自行車的里程和速度進行計數(shù)。自行車開始運行,定時器0為1,開始計時,當(dāng)自行車轉(zhuǎn)過一圈產(chǎn)生一個脈沖時,定時器溢出,外部中斷0響應(yīng),此時由脈沖數(shù)和時間可以計算出里程和速度。中斷程序流程圖如圖4.1所示。 圖 4.1 中斷程序流程圖4.2 延時程序自行車?yán)锍瘫淼脑O(shè)計中延時有按鍵延時(速度加、減、里程清0)、LCD顯示延時、AT24C02存儲的延時,本次設(shè)計的延時全部采用延時5ms。,程序編寫時是采用延時1ms,然后調(diào)用5次。延時流程圖如圖4.2所示。4.3 按鍵掃描本次設(shè)計中的按鍵分為獨立式按鍵和矩陣式按鍵,這里采用的是獨立式按鍵。主要有速度加按鍵、速度減按鍵、里程清0按鍵,在運用

13、按鍵的時候需要去抖來使系統(tǒng)運行更加穩(wěn)定。去抖的方法有硬件去抖和軟件去抖。這里采用的是軟件去抖。這里去抖是分別在按下和松開后加一小段延時,當(dāng)按鍵按下后在05ms內(nèi)出現(xiàn)抖動,所以這里采用的延時時間是5ms。按鍵對應(yīng)的接口如下:sbit KEY1=P35;/速度加按鍵sbit KEY2=P36;/速度減按鍵sbit KEY3=P37;/里程清0按鍵按鍵具體程序見附錄。開始掃描鍵盤是否有鍵盤按下并判斷鍵號延時去抖動YN再次判斷相應(yīng)鍵是否被按下加速子程序減速子程序里程清0子程序NY圖4.2 延時流程圖4.4 數(shù)據(jù)處理子程序設(shè)計自行車?yán)锍瘫砝锍獭⑺俣茸映绦蛟O(shè)計定時器的初值的計算如下:在定時器模式下,計數(shù)器

14、的計數(shù)脈沖來自于晶振脈沖的12分頻信號,即對機器周期進行計數(shù)。選擇12MHZ晶振,則定時器的計數(shù)頻率為1MHZ。定時時間為1000ms,機器周期為1us,即12/晶振頻率。X為定時器初值。則 X=(2n-T)/T1。方式0,n=13,方式1時,n=16,方式2和方式3,n=8TMOD=0X01;TH0=(65536-1000)/256;TH0=TL0=(65536-1000)%256;外中斷0服務(wù)程序用于對單片機輸入的圈脈沖進行計數(shù),為十六進制計數(shù)器。60H為低位,62H為高位。每次計數(shù)一次后,對里程數(shù)據(jù)進行一次存儲操作。當(dāng)車輪每轉(zhuǎn)一圈,通過霍爾元件將脈沖數(shù)輸入單片機內(nèi),通過計數(shù)器計出脈沖數(shù),

15、再用乘法子程序算出里程數(shù)。設(shè)定自行車車輪周長為30mm,脈沖數(shù)為m,則總的里程數(shù)=0.030*m,在速度子程序的設(shè)計中,使用單片機的定時器T0,10ms計數(shù)一次,其初值X經(jīng)計算得出,X=D8F0,即應(yīng)將D8H送入TH0中,F(xiàn)0送入TL0中。具體的設(shè)計思路是:定時器T0每10ms中斷一次,當(dāng)中斷次數(shù)達到100,即時間剛好為1秒的時候,調(diào)用脈沖接收子程序中當(dāng)前的圈數(shù)變量,然后與設(shè)置好的自行車車輪周長相乘之后,再除以1s即為瞬時速度,每次計算完之后將此圈數(shù)變量置0。本次設(shè)計的報警采用聲光報警。聲音部分采用的是蜂鳴報警器,當(dāng)自行車的速度超過預(yù)設(shè)的15km/h,L2燈亮,蜂鳴器報警。蜂鳴器是高電平有效,

16、即當(dāng)速度超過預(yù)設(shè)值時,蜂鳴器輸入信號由0變?yōu)?,蜂鳴器開始工作。Led燈采用的是共陽極接法即低電平有效。當(dāng)自行車的行駛速度低于15km/h時,此時L1接收到低電平(0),L1常亮,當(dāng)速度超過預(yù)設(shè)的值時,L1的信號由低電平調(diào)為高電平(由0變?yōu)?),燈熄滅不亮,此時L2由高電平變?yōu)榈碗娖剑ㄓ?變?yōu)?),L2常亮報警,直到解除報警。里程處理子程序流程圖如圖4.3(a)所示,速度處理子程序流程圖如圖4.3(b)所示。 圖4.3(a) 里程處理子程序流程圖速度處理子程序開中斷每10ms中斷次數(shù)加1,計數(shù)為100?計算瞬時速度是否超速?報警關(guān)報警顯示速度YY返回圖4.3(b) 速度處理子程序流程圖4.5

17、顯示子程序的設(shè)計DDRAM顯示數(shù)據(jù)RAM地址和屏幕的對應(yīng)關(guān)系如表4.1所示。表4.1 DDRAM地址和顯示位置的對應(yīng)關(guān)系顯示位置12345640DDRAM地址第一行00H01H02H03H04H05H27H第二行40H41H42H43H44H45H67H也就是說想要在LCD1602屏幕的第二行第一列顯示一個"M"字,就要向DDRAM的40H地址寫入“M”字的代碼就行了。那就是向DDRAM的的40H地址寫入“M”字的代碼4DH。同樣,在LCD模塊上也固化了字模存儲器,這就是CGROM和CGRAM。下圖4.4說明了CGROM和CGRAM與字符的對應(yīng)關(guān)系。圖4.4 CGROM和C

18、GRAM與字符的對應(yīng)關(guān)系從上圖可以看出,“M”字的對應(yīng)上面高位代碼為0100,對應(yīng)左邊低位代碼為1101,合起來就是01001101,也就是4DH。LCD屏幕上顯示一個字符的過程:初始化、寫指令、寫函數(shù)、在某個屏幕位置上顯示一個字符、檢查忙函數(shù)、延時函數(shù)。速度的顯示運用程序定位到第一行第十列,找到顯示對應(yīng)的位置為09H,通過速度調(diào)節(jié)鍵設(shè)定輸入速度為16km/h,所以要在09H中輸入1,所以1對應(yīng)的高位代碼為0011,對應(yīng)的地位代碼為0001H,合起來是00110001,也就是1,然后光標(biāo)右移一位(用程序?qū)崿F(xiàn)),用同樣的方法寫出6.簡而言之?dāng)?shù)據(jù)顯示就是顯示的時候先送要顯示的地址,然后再送要顯示的

19、數(shù)據(jù)。顯示程序流程圖如圖4.4所示。開始液晶初始化光標(biāo)定位送顯示數(shù)據(jù)顯示結(jié)束圖4.4 顯示子程序流程圖4.6 存儲芯片的選擇本次設(shè)計采用的儲存芯片是24C02,AT24C02是一個2K位串行CMOS E2PROM, 內(nèi)部含有256個8位字節(jié),有一個專門的寫保護功能,可以實現(xiàn)掉電存儲。起始條件 起始調(diào)教必須在所有操作命令之前發(fā)送。時鐘線保持高電平期間,數(shù)據(jù)線電平從高到低跳變作為I2C總線的啟動信號。CAT24Cxxx一直監(jiān)視SDA和SCL電平信號,直到條件滿足時才響應(yīng)。停止條件 時鐘線保持高電平期間,數(shù)據(jù)線電平從低到高跳變作為I2C總線的停止信號。 器件地址的約定&

20、#160;主器件在發(fā)送啟動命令后開始傳送數(shù)據(jù),主器件發(fā)送相應(yīng)的從器件地址,8位從器件地址的高四位固定為1010,接下來的3位用來定義存儲器的地址, 最后一位為讀寫控制位,“1”表示對從器件進行讀寫操作,“0”表示寫操作。在主器件發(fā)送啟動命令和一字節(jié)從器件地址后,如果與從器件地址吻合,CAT24C02將發(fā)送一個應(yīng)答信號,然后再根據(jù)讀/寫控制為進行讀或?qū)懖僮鳌?yīng)答信號 每次數(shù)據(jù)傳送成功后,接收器件將發(fā)送一個應(yīng)答信號。當(dāng)?shù)诰艂€時鐘信號產(chǎn)生時,產(chǎn)生應(yīng)答型號的器件將SDA下拉為低,通知已經(jīng)接受到8位數(shù)據(jù),接收到起始條件和從器件地址后,CAT24C02發(fā)送一個應(yīng)答信號,如果為寫操作,每

21、接收到一個字節(jié)數(shù)據(jù),CAT24C02發(fā)送一個應(yīng)答信號。如果為讀操作,CAT24C02發(fā)送一個字節(jié)數(shù)據(jù)后釋放總線等待應(yīng)答信號,一旦接收到應(yīng)答信號,它將繼續(xù)發(fā)發(fā)送數(shù)據(jù),如果接收到主器件發(fā)送非應(yīng)答信號,將結(jié)束數(shù)據(jù)傳送等待停止條件。 寫操作 在寫字節(jié)模式下,助器件發(fā)送起始命令和從器件地址信息給從器件,在從器件響應(yīng)應(yīng)答信號后,主器件將要寫入的數(shù)據(jù)地址發(fā)送到CAT24C02的地址指針,主器件收到從器件的應(yīng)答信號后再送數(shù)據(jù)到相應(yīng)的數(shù)據(jù)存儲區(qū)地址,CAT24C02再響應(yīng)一個應(yīng)答信號,主器件產(chǎn)生一個停止信號,然后CAT24C02啟動內(nèi)部寫周期,在內(nèi)部寫周期期間,CAT24C02不再響應(yīng)主器件

22、任何請求。寫操作時序讀如讀操作 CAT24C02讀操作的初始化方式和寫操作一樣,僅把R/W位置1,讀操作有三種方式:立即地址讀、選擇地址讀、連續(xù)讀。選擇地址讀操作時序圖第5章 軟件仿真5.1 Keil軟件的使用 在keil中輸入編寫好的c語言程序,在編譯運行沒有的錯誤的情況下,在project中找到options for targettarget1在output選項中勾選create HEX file,即可生成.hex文件。5.2 Keil軟件仿真主程序仿真圖如圖5.1所示圖5.1 主程序仿真圖LCD顯示仿真如圖5.2所示圖5.2 LCD顯示仿真圖AT24C02仿真如圖5.2所示圖5

23、.2 AT24C02仿真圖第6章 系統(tǒng)調(diào)試與分析6.1 調(diào)試故障及原因分析這次的科研項目實訓(xùn)中,我主要負(fù)責(zé)自行車?yán)锍瘫淼能浖糠郑晕业恼{(diào)試主要側(cè)重在軟件的調(diào)試。首先查閱相關(guān)資料,在同學(xué)的幫助下完成C語言程序的編寫。編寫好程序后我利用keil軟件進行編譯調(diào)試。一開始由于平時C語言的書寫習(xí)慣會出現(xiàn)很多語法和字符用錯的問題,在軟件的提示下一步步修改程序,直到程序沒有錯誤。在C語言程序完成后,利用proteus仿真軟件開始繪制仿真圖,查找好所有型號的器件,并用線連接起來,然后用keil軟件實現(xiàn)兩者的聯(lián)調(diào)。一開始會出現(xiàn)速度調(diào)節(jié)按鈕無效的問題,在檢查完線路沒有問題后,開始查找程序的問題,在同學(xué)的幫助下

24、終于找出程序問題所在,然后對程序進行修改,重新編譯,重新調(diào)試,直到所有功能實現(xiàn)。第7章 總結(jié)經(jīng)過這一段時間的努力最終按要求完成本設(shè)計,所完成的設(shè)計能實現(xiàn)任務(wù)要求的各項功能。對總體相應(yīng)的軟、硬件進行了設(shè)計、制作及調(diào)試,并貫穿至設(shè)計的全過程。本課題的主要任務(wù)是開發(fā)一個以AT89S52單片機為核心的自行車的速度里程表,主要由脈沖接收,LCD顯示等模塊組成。本設(shè)計主要分為硬件部分和軟件部分,硬件部分著重考慮硬件電路的簡單性,故盡可能簡化硬件電路,節(jié)省線路板的空間,達到硬件電路最優(yōu)化設(shè)計。軟件采用C語言編寫,采用模塊化設(shè)計思想,程序可讀性強。通過對程序的燒錄、實驗驗證了系統(tǒng)的可行,能滿足設(shè)計要求,達到設(shè)

25、計的指標(biāo),實現(xiàn)對自行車?yán)锍?速度的計算功能,并用LCD液晶屏顯示,功能性較強。這次科研實踐讓我對自己以后的畢業(yè)設(shè)計方面也有了更深的了解。這次實踐,同學(xué)們也幫了我很大的忙,讓我知道一個項目的完成不是一件容易的事情,團隊合作還是比較重要的。附錄參考文獻1 ATMEL新型AT89S52系列單片機及其應(yīng)用 清華大學(xué)出版社2 范力旻.單片機原理及應(yīng)用技術(shù).電子工業(yè)出版社3 樓然苗, 李光飛. 51系列單片機設(shè)計實例. 北京航空航天大學(xué)出版社, 20064 李朝青. 單片機原理及接口技術(shù). 北京航空航天大學(xué)出版社, 19945張毅剛, 劉杰. MCS-51單片機原理及應(yīng)用. 哈爾濱工業(yè)大學(xué)出版社,2004

26、6李勛, 劉源, 李靜東. 單片機實用教程. 北京航空航天大學(xué)出版社, 2006元器件清單序號文字標(biāo)號名稱數(shù)量規(guī)格型號備注1R2、R3、R6電阻4102R1、R9-R10R14-R16、R23電阻71K3R17電阻14.7K4R13電組110K5Q1三極管185506C6、C8瓷片電容20.01uF103瓷片電容7U3霍爾元件1A44E8磁鐵兩個29D1、D2二極管2IN400710C10瓷片電容10.1uF103瓷片電容11C4瓷片電容1470uf12LS1蜂鳴器1GPC1407YB有源13L1、L2、L3發(fā)光二極管3SL-H302314C6、C8瓷片電容230pf15Y1晶振112M16Q

27、10三極管1S855017B1電機1RF-300CA-0858518K2自鎖按鍵1LCD-37AX537BX519R10電位器11K20K1、K3-K5按鍵4TD-03B21U2定時器1555芯片22P2插座2DIP23R2電位器11K24U1單片機1AT89S5225插座1DIP4026P1液晶顯示屏1LCD160227U4PROM1AT24C02原理圖程序清單#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint num=0; /外部中斷次數(shù)uchar num1=0;uint Speed

28、_dat=0;uint Total_Dis=0;uchar Beep_speed=40;sbit KEY1=P35;/速度加按鍵sbit KEY2=P36;/速度減按鍵sbit KEY3=P37;/里程清0按鍵void delayms(uint xms)uint i,j;for(i=xms;i>0;i-)/xms延時子程序for(j=110;j>0;j-);#include"LCD1602.H"#include"AT24C02.H"void keyscan()if(!KEY1)delayms(5);if(!KEY1)if(Beep_speed

29、<255)Beep_speed+;while(!KEY1);else if(!KEY2)delayms(5);if(!KEY2)if(Beep_speed>0)Beep_speed-;while(!KEY2);else if(!KEY3)delayms(5);if(!KEY3)Write_AT24C02_Byte(0,0);Write_AT24C02_Byte(1,0);/里程清0Total_Dis=0;dis_Mileage();while(!KEY3);void main()uchar dat=0;float M_dat=0.0;init_1602();Init_AT24C02

30、();dat=Read_AT24C02_Random(0);Total_Dis=dat*256+Read_AT24C02_Random(1);dis_Mileage();TMOD=0X01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;ET0=1;TR0=1;IT0=1; /邊沿觸發(fā)中斷EX0=1;EA=1;while(1)if(num1>99)num1=0;M_dat+=(float)(Cur_Speed/3.60);/每0.1s走的米數(shù)if(M_dat>1000.0) /路程每增加100m儲存一次M_dat-=1000.0;Total_Di

31、s+=1;Write_AT24C02_Byte(0,Total_Dis/256);Write_AT24C02_Byte(1,Total_Dis%256);dis_Mileage();display();keyscan();void T0_time() interrupt 1 /定時器0TH0=(65536-1000)/256;TL0=(65536-1000)%256;if(num<500)num+;elseSpeed_dat=0;if(num1<100)num1+;void ex_0() interrupt 0 /外部中斷0Speed_dat=(500/num); num=0;#d

32、efine uchar unsigned char#define uint unsigned int sbit EN=P27;sbit RS=P25;sbit RW=P26;sbit BEEP=P20;sbit LED1=P12;/正常顯示sbit LED2=P13;/報警uchar LCD1602_Table="0123456789"/LCD1602顯示標(biāo)尺 /0123456789abcdefuchar code DIS_TAB1=" Speed:-Km/h "/顯示速度uchar code DIS_TAB2="M: Km-Km/h"

33、;/顯示里程 uint sum_dat=0;uchar Cur_Speed=0;extern uint Speed_dat;extern uint Total_Dis;extern void delayms(uint xms);void WRITE_LCD1602_DAT(uchar date)EN=0;RS=1;/寫數(shù)據(jù)P0=date;EN=0;delayms(5);EN=1;void WRITE_LCD1602_COM(uchar date)EN=0;RS=0;/寫命令P0=date;EN=0;delayms(5);EN=1;void init_1602() unsigned char i

34、;RW=0; WRITE_LCD1602_COM(0x38);/設(shè)定使用8位總線、2行顯示使用5X7字符,初始化WRITE_LCD1602_COM(0x0c);/開顯示,不顯示光標(biāo)WRITE_LCD1602_COM(0x06); /地址加1,當(dāng)寫入數(shù)據(jù)的時候光標(biāo)右移WRITE_LCD1602_COM(0x01);/清屏WRITE_LCD1602_COM(0x80); P0口的地址for(i=0;i<16;i+)WRITE_LCD1602_DAT(DIS_TAB1i);WRITE_LCD1602_COM(0x80+0x40);/第一行、第二行顯示for(i=0;i<16;i+)WRI

35、TE_LCD1602_DAT(DIS_TAB2i);void display()static uint dat=0;static uchar i=0;if(i<6)i+;sum_dat+=Speed_dat;elsei=0;dat=sum_dat/10;sum_dat=0;Cur_Speed=dat;WRITE_LCD1602_COM(0x80+7);/速度輸入的部分if(dat/100>0)WRITE_LCD1602_DAT(LCD1602_Tabledat%1000/100);elseWRITE_LCD1602_DAT(' ');if(dat/10>0)W

36、RITE_LCD1602_DAT(LCD1602_Tabledat%100/10);elseWRITE_LCD1602_DAT(' ');WRITE_LCD1602_DAT(LCD1602_Tabledat%10);WRITE_LCD1602_COM(0x80+9+0x40);if(Beep_speed/100>0)WRITE_LCD1602_DAT(LCD1602_TableBeep_speed%1000/100);elseWRITE_LCD1602_DAT(' ');if(Beep_speed/10>0)WRITE_LCD1602_DAT(LCD

37、1602_TableBeep_speed%100/10);elseWRITE_LCD1602_DAT(' ');WRITE_LCD1602_DAT(LCD1602_TableBeep_speed%10);if(dat>Beep_speed)if(i<3)BEEP=0;elseBEEP=1;LED1=0;LED2=1;elseBEEP=1;LED1=1;LED2=0;void dis_Mileage()WRITE_LCD1602_COM(0x80+0x40+2);/總的里程的顯示(輸入)if(Total_Dis/1000>0)WRITE_LCD1602_DAT(

38、LCD1602_TableTotal_Dis%10000/1000);elseWRITE_LCD1602_DAT(' ');if(Total_Dis/100>0)WRITE_LCD1602_DAT(LCD1602_TableTotal_Dis%1000/100);elseWRITE_LCD1602_DAT(' ');WRITE_LCD1602_DAT(LCD1602_TableTotal_Dis%100/10);WRITE_LCD1602_DAT('.');WRITE_LCD1602_DAT(LCD1602_TableTotal_Dis%1

39、0);#include<intrins.h>#defineAT24C02_OP_READ0xa1/ AT24C02器件地址以及讀取操作#defineAT24C02_OP_WRITE 0xa0/ AT24C02器件地址以及寫入操作/#defineAT24C02_MAX_ADDR 0xff/ AT24C02最大地址/unsigned char code dis_code=0x7e,0xbd,0xdb,0x7e,0xdb,0xbd,0x7e,0xff;/ 寫入到AT24C02的數(shù)據(jù)串sbit AT24C02_SDA=P11;sbit AT24C02_SCL=P10;/sbit AT24C

40、02_WP=P33; /寫保護 “=0”讀寫 “=1” 只讀/*延時子程序*/void Delay_1ms(unsigned int xms) unsigned int i,j; for(i=xms;i>0;i-) for(j=122;j>0;j-);/*24C02初始化子程序*/void Init_AT24C02() AT24C02_SDA=1; /總線空閑時,因各設(shè)備都是集電極或漏極開路,上拉電阻使SDA和SCL線都保持高電平。/AT24C02_WP=1; AT24C02_SCL=1; _nop_(); _nop_(); _nop_(); _nop_();/*24C02起始信號

41、子程序*/void AT24C02_Start()AT24C02_SDA=1;_nop_();_nop_();AT24C02_SCL=1;_nop_();_nop_();AT24C02_SDA=0;_nop_();_nop_();_nop_();_nop_();AT24C02_SCL=0;/*24C02停止信號子程序*/void AT24C02_Stop()AT24C02_SDA=0;_nop_();_nop_();AT24C02_SCL=1;_nop_();_nop_();_nop_();_nop_();AT24C02_SDA=1;_nop_();_nop_();/*24C02應(yīng)答子程序*/void AT24C02_ACK()AT24C02_SDA=1;/ 讀取應(yīng)答_

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論