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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

17、顯示子程序的設(shè)計(jì)DDRAM顯示數(shù)據(jù)RAM地址和屏幕的對應(yīng)關(guān)系如表4.1所示。表4.1 DDRAM地址和顯示位置的對應(yīng)關(guān)系顯示位置12345640DDRAM地址第一行00H01H02H03H04H05H27H第二行40H41H42H43H44H45H67H也就是說想要在LCD1602屏幕的第二行第一列顯示一個(gè)"M"字,就要向DDRAM的40H地址寫入“M”字的代碼就行了。那就是向DDRAM的的40H地址寫入“M”字的代碼4DH。同樣,在LCD模塊上也固化了字模存儲(chǔ)器,這就是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屏幕上顯示一個(gè)字符的過程:初始化、寫指令、寫函數(shù)、在某個(gè)屏幕位置上顯示一個(gè)字符、檢查忙函數(shù)、延時(shí)函數(shù)。速度的顯示運(yùn)用程序定位到第一行第十列,找到顯示對應(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ù)顯示就是顯示的時(shí)候先送要顯示的地址,然后再送要顯示的

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

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

21、接收到一個(gè)字節(jié)數(shù)據(jù),CAT24C02發(fā)送一個(gè)應(yīng)答信號。如果為讀操作,CAT24C02發(fā)送一個(gè)字節(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ù)存儲(chǔ)區(qū)地址,CAT24C02再響應(yīng)一個(gè)應(yīng)答信號,主器件產(chǎn)生一個(gè)停止信號,然后CAT24C02啟動(dòng)內(nèi)部寫周期,在內(nèi)部寫周期期間,CAT24C02不再響應(yīng)主器件

22、任何請求。寫操作時(shí)序讀如讀操作 CAT24C02讀操作的初始化方式和寫操作一樣,僅把R/W位置1,讀操作有三種方式:立即地址讀、選擇地址讀、連續(xù)讀。選擇地址讀操作時(shí)序圖第5章 軟件仿真5.1 Keil軟件的使用 在keil中輸入編寫好的c語言程序,在編譯運(yùn)行沒有的錯(cuò)誤的情況下,在project中找到options for targettarget1在output選項(xiàng)中勾選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)試故障及原因分析這次的科研項(xiàng)目實(shí)訓(xùn)中,我主要負(fù)責(zé)自行車?yán)锍瘫淼能浖糠?,所以我的調(diào)試主要側(cè)重在軟件的調(diào)試。首先查閱相關(guān)資料,在同學(xué)的幫助下完成C語言程序的編寫。編寫好程序后我利用keil軟件進(jìn)行編譯調(diào)試。一開始由于平時(shí)C語言的書寫習(xí)慣會(huì)出現(xiàn)很多語法和字符用錯(cuò)的問題,在軟件的提示下一步步修改程序,直到程序沒有錯(cuò)誤。在C語言程序完成后,利用proteus仿真軟件開始繪制仿真圖,查找好所有型號的器件,并用線連接起來,然后用keil軟件實(shí)現(xiàn)兩者的聯(lián)調(diào)。一開始會(huì)出現(xiàn)速度調(diào)節(jié)按鈕無效的問題,在檢查完線路沒有問題后,開始查找程序的問題,在同學(xué)的幫助下

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

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

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

27、10三極管1S855017B1電機(jī)1RF-300CA-0858518K2自鎖按鍵1LCD-37AX537BX519R10電位器11K20K1、K3-K5按鍵4TD-03B21U2定時(shí)器1555芯片22P2插座2DIP23R2電位器11K24U1單片機(jī)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延時(shí)子程序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儲(chǔ)存一次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 /定時(shí)器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;/報(bào)警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ù)的時(shí)候光標(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; /寫保護(hù) “=0”讀寫 “=1” 只讀/*延時(shí)子程序*/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í),因各設(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論