版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目 錄1.前言32.總體設(shè)計框架32.1實現(xiàn)的功能32.2總體程序流程圖43.水溫采集模塊程序設(shè)計53.1 ds18b20簡介53.2 ds18b20的初始化63.3 ds18b20寫周期73.4 ds18b20讀周期83.5 溫度讀取程序94.顯示模塊程序設(shè)計114.1 lcd1602初始化114.2 lcd1602寫周期125. 定時模塊程序設(shè)計135.1定時器設(shè)置145.2 定時器中斷子程序156.中斷模塊程序設(shè)計166.1外部中斷設(shè)置166.2鍵盤掃描中斷子程序167.整體編程的實現(xiàn)178.設(shè)計過程中的問題及解決方案189.收獲與感悟191.前言隨著社會進(jìn)步與經(jīng)濟(jì)發(fā)展,人們對生活質(zhì)量的
2、要求越來越高,每天的飲水量是衡量健康的重要指標(biāo)。但有多少人因為忙碌的工作而全天忘記喝水?當(dāng)你感到口渴想要喝水的時候,體內(nèi)的失水已經(jīng)達(dá)到2%,口渴本身其實是體內(nèi)已經(jīng)嚴(yán)重缺水的表現(xiàn),這是造成“亞健康”狀態(tài)的致命習(xí)慣之一。同時,越不注意喝水,喝水的欲望就會越低,人就會變得越來越缺水。研究表明,通常情況下,正常人每次喝水應(yīng)控制在300ml,間隔時間為30到60分鐘。本課程設(shè)計就此設(shè)計出一款智能水杯,用來智能顯示水溫和提醒喝水,既方便了生活,又保持了健康。本報告針對智能水杯的軟件系統(tǒng)進(jìn)行闡述,軟件編程在keil上操作。2.總體設(shè)計框架2.1實現(xiàn)的功能stc89c51控制器lcd溫度顯示溫度讀入溫度提示燈
3、ds18b20外部中斷定時開啟按鍵定時器中斷蜂鳴器提醒設(shè)置硬件結(jié)構(gòu)框架圖如圖1所示。圖1 硬件結(jié)構(gòu)簡圖(1)水溫檢測使用ds18b20溫度傳感器,完成水溫的時時檢測功能。(2)水溫及定時時間顯示使用lcd1602液晶顯示屏,完成水溫及定時時間的顯示功能。(3)智能提醒使用定時器0,開啟定時器中斷,蜂鳴器提醒。(4)定時時間設(shè)置使用外部中斷0擴(kuò)展電路,用三個按鍵觸發(fā)中斷,完成對應(yīng)定時開啟和定時時間加減的功能。2.2總體程序流程圖總體程序流程圖分為主程序和中斷程序兩部分,其中中斷程序分為外部中斷程序和定時器中斷程序。流程圖如下圖所示。開始ds18b20檢測水溫lcd1602顯示水溫結(jié)束水溫40?高
4、溫提示燈紅燈亮適宜水溫黃燈亮低溫提示燈藍(lán)燈亮yn水溫50000)/等待50msreturn 0;/初始化失敗return 1;/初始化成功3.3 ds18b20寫周期寫周期最少為60微秒,最長不超過120微秒。寫周期一開始做為主機先把總線拉低1微秒表示寫周期開始。隨后若主機想寫0,則將總線置為低電平,若主機想寫1,則將總線置為高電平,持續(xù)時間最少60微秒直至寫周期結(jié)束,然后釋放總線為高電平至少1微秒給總線恢復(fù) 。而ds18b20則在檢測到總線被拉底后等待15微秒然后從15us到45us開始對總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。寫周期時序圖如圖6所示。圖6 ds
5、18b20寫周期時序圖/* 函數(shù)名 : ds18b20writebyte* 函數(shù)功能 : 向18b20寫入一個字節(jié)* 輸入 : com* 輸出 : 無*/void ds18b20writebyte(unsigned char dat)unsigned int i,j;for(j=0;j=1;3.4 ds18b20讀周期讀周期是從主機把單總線拉低1微秒之后就得釋放單總線為高電平,以讓ds18b20把數(shù)據(jù)傳輸?shù)絾慰偩€上。作為從機ds18b20在檢測到總線被拉低1微秒后,便開始送出數(shù)據(jù),若是要送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。主機在一開始拉低總線1微秒后釋放總線,
6、然后在包括前面的拉低總線電平1微秒在內(nèi)的15微秒時間內(nèi)完成對總線進(jìn)行采樣檢測,采樣期內(nèi)總線為低電平則確認(rèn)為0。采樣期內(nèi)總線為高電平則確認(rèn)為1。完成一個讀時序過程至少需要60微秒才能完成。其讀周期的時序圖如圖7所示。圖7 ds18b20讀周期時序圖/* 函數(shù)名 : ds18b20readbyte* 函數(shù)功能 : 讀取一個字節(jié)* 輸入 : com* 輸出 : 無*/unsigned char ds18b20readbyte()unsigned char byte,bi;unsigned int i,j;for(j=8;j0;j-)dsport=0;/先將總線拉低1usi+;dsport=1;/然后
7、釋放總線i+;i+;/延時6us等待數(shù)據(jù)穩(wěn)定bi=dsport; /讀取數(shù)據(jù),從最低位開始讀取byte=(byte1)|(bi7); /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/ i=4;/讀取完之后等待48us再接著讀取下一個數(shù)while(i-);return byte;3.5 溫度讀取程序簡單的讀取溫度值的步驟如下:跳過rom操作-發(fā)送溫度轉(zhuǎn)換命令-跳過rom操作-發(fā)送讀取溫度命令-讀取溫度值(1)溫度轉(zhuǎn)換指令:/* 函數(shù)名 : ds18b20changtemp* 函數(shù)功能 : 讓18b20開始轉(zhuǎn)換溫度* 輸入 : com* 輸出 : 無*/void d
8、s18b20changtemp()ds18b20init();delay1ms(1);ds18b20writebyte(0xcc);/跳過rom操作命令 ds18b20writebyte(0x44); /溫度轉(zhuǎn)換命令delay1ms(100);(2)溫度讀取指令/* 函數(shù)名 : ds18b20readtempcom* 函數(shù)功能 : 發(fā)送讀取溫度命令* 輸入 : com* 輸出 : 無*/void ds18b20readtempcom()ds18b20init();delay1ms(1);ds18b20writebyte(0xcc); /跳過rom操作命令ds18b20writebyte(0xb
9、e); /發(fā)送讀取溫度命令(3)讀取溫度:/* 函數(shù)名 : ds18b20readtemp* 函數(shù)功能 : 讀取溫度* 輸入 : com* 輸出 : 無*/int ds18b20readtemp()unsigned int temp=0;unsigned char tmh,tml;ds18b20changtemp();/先寫入轉(zhuǎn)換命令ds18b20readtempcom();/然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令tml=ds18b20readbyte();/讀取溫度值共16位,先讀低字節(jié)tmh=ds18b20readbyte();/再讀高字節(jié)temp=tmh;temp=8;temp|=tml;re
10、turn temp;4.顯示模塊程序設(shè)計4.1 lcd1602初始化表1 lcd1602指令表指令碼功能00001dcbd=1 開顯示; d=0 關(guān)顯示c=1 顯示光標(biāo); c=0 不顯示光標(biāo)b=1 光標(biāo)閃爍; b=0 光標(biāo)不顯示000001nsn=1 當(dāng)讀或?qū)懸粋€字符后地址指針加一,且光標(biāo)加一n=0 當(dāng)讀或?qū)懸粋€字符后地址指針減一,且光標(biāo)減一s=1 當(dāng)寫一個字符時,整屏顯示左移(n=1)或右移(n=0),以得到光標(biāo)不移動而屏幕移動的效果s=0 當(dāng)寫一個字符,整屏顯示不移動01h顯示清屏:所有顯示清零80h+地址碼(0-27h,40h-67h)設(shè)置數(shù)據(jù)地址/* 函數(shù)名 : lcdinit()*
11、函數(shù)功能 : 初始化lcd屏* 輸入 : 無* 輸出 : 無*/void lcdinit() /lcd初始化子程序 lcdwritecom(0x38); /設(shè)置顯示模式lcdwritecom(0x0c); /開顯示不顯示光標(biāo),光標(biāo)不閃爍lcdwritecom(0x06); /寫一個指針加1lcdwritecom(0x01); /清屏lcdwritecom(0x80); /設(shè)置數(shù)據(jù)指針起點4.2 lcd1602寫周期時序圖如圖8所示,rs=0為寫命令,rs=1為寫數(shù)據(jù)。在寫周期,r/w=0,e為寫數(shù)據(jù)或命令使能輸入。圖8 lcd1602寫時序圖(1)寫命令:/* 函數(shù)名 : lcdwriteco
12、m* 函數(shù)功能 : 向lcd寫入一個字節(jié)的命令* 輸入 : com* 輸出 : 無*/void lcdwritecom(unsigned char com) /寫入命令rs=0;rw=0;gpio_lcd=com;delay1ms(10);e=1;delay1ms(10);e=0;(2)寫數(shù)據(jù)/* 函數(shù)名 : lcdwritedata* 函數(shù)功能 : 向lcd寫入一個字節(jié)的數(shù)據(jù)* 輸入 : dat* 輸出 : 無*/ void lcdwritedata(unsigned char dat)/寫入數(shù)據(jù)rs=1;rw=0;gpio_lcd=dat;delay1ms(10);e=1;delay1ms
13、(10);e=0;5. 定時模塊程序設(shè)計定時/計數(shù)器實質(zhì)上是一個加1計數(shù)器。它隨著計數(shù)器的輸入脈沖進(jìn)行自加1,也就是每來一個脈沖,計數(shù)器就自動加1,當(dāng)加到計數(shù)器為全1時,再輸入一個脈沖就使計數(shù)器回零,且計數(shù)器的溢出使相應(yīng)的中斷標(biāo)志位置1,向cpu發(fā)出中斷請求(定時/計數(shù)器中斷允許時)。如果定時/計數(shù)器工作于定時模式,則表示定時時間已到;如果工作于計數(shù)模式,則表示計數(shù)值已滿。與定時器相關(guān)的寄存器如下:tcond7d6d5d4d3d2d1d0功能tf1tr1tf0tr0ie1it1ie0it0tf1和tf0:t1和t0的溢出標(biāo)志位,溢出后由硬件自動置1發(fā)出定時器中斷請求。中斷響應(yīng)后標(biāo)志位自動清零。
14、ie1和ie0:int1和int0的標(biāo)志位,引腳狀態(tài)變化后由硬件自動置1 發(fā)出外部中斷請求,中斷響應(yīng)后標(biāo)志位自動清零。it1和it0:int1和int0的觸發(fā)方式選擇位。tmodd7d6d5d4d3d2d1d0功能gatec/tm1m0gatec/tm1m0gate:門控制為0時僅有運行控制位trx來控制定時/計數(shù)器的開啟。為1時由trx和外部中斷脈沖計數(shù)。(用于計算外部中斷負(fù)跳變 的次數(shù))c/t:計數(shù)器模式和定時器模式選擇為0時選擇定時器模式,為1時選為計數(shù)器模式。方式1的計數(shù)位數(shù)是16位,由tl0作為低8位、th0作為高8位,組成了16位加1計數(shù)器 。如圖9所示。圖9 定時器模式1示意圖5
15、.1定時器設(shè)置/* 函數(shù)名 : timer * 函數(shù)功能 : 設(shè)置定時器并開始計時* 輸入 : 無* 輸出 : 無*/ void timer() tmod=0x01; /定時器選擇工作模式1 th0 = 0x3c; /定時器賦初值 tl0 = 0xb0; /定時50ms ea = 1;/開啟中斷 et0 = 1; /開啟定時器中斷 tr0=1; /啟動定時器 5.2 定時器中斷子程序定時器中斷子程序完成的功能有:(1) 定時器重新賦初值;(2) 統(tǒng)計中斷次數(shù),并在lcd上顯示剩余時間;(3) 判斷是否達(dá)到定時終點以啟動蜂鳴器。/* 函數(shù)名 : timer0() interrupt 1* 函數(shù)功
16、能 : 設(shè)置定時器中斷執(zhí)行程序,lcd顯示定時剩余時間* 輸入 : 無* 輸出 : 無*/ void timer0() interrupt 1 th0 = 0x3c; tl0 = 0xb0; /定時器重新賦值 time+; k+; /中斷次數(shù)計數(shù) if(k=20) /20次中斷,即1s lcdwritecom(0xc2); lcdwritedat(0+(-j)/10); lcdwritedat(0+(j)%10); /定時顯示剩余時間 k=0; if (time=full) /判斷是否達(dá)到定時時間 for(i=0;i100;i+) sound=1; /啟用無源蜂鳴器 delay1ms(1);
17、sound=0; delay1ms(1); time=0; j=full/20; /計數(shù)初始化 6.中斷模塊程序設(shè)計中斷是指cpu在執(zhí)行當(dāng)前程序的過程中,由于某種隨機出現(xiàn)的外設(shè)請求或cpu內(nèi)部的異常事件,使cpu暫停正在執(zhí)行的程序而轉(zhuǎn)去 執(zhí)行相應(yīng)的服務(wù)處理程序;當(dāng)服務(wù)處理程序運行完畢后,cpu再返回到暫停處繼續(xù)執(zhí)行原來的程序。51單片機的中斷系統(tǒng)如圖10所示。圖10 中斷系統(tǒng)結(jié)構(gòu)圖6.1外部中斷設(shè)置/* 函數(shù)名 : intconfiguration()* 函數(shù)功能 : 設(shè)置外部中斷* 輸入 : 無* 輸出 : 無*/void intconfiguration()it0=1;/外部中斷0跳變沿觸
18、發(fā)方式(下降沿)ex0=1;/打開int0的中斷允許。ea=1;/打開總中斷6.2鍵盤掃描中斷子程序中斷程序完成的功能有:(1)判斷按鍵是否按下;(2)執(zhí)行對應(yīng)按鍵的功能。/* 函數(shù)名 : scankey()* 函數(shù)功能 : 鍵盤掃描,并執(zhí)行對應(yīng)按鍵的程序* 輸入 : 無* 輸出 : 無*/void scankey()if(key1=0) /判斷按鍵是否按下 delay1ms(10); /延時消抖 if(key1=0) /判斷按鍵是否按下 for(;) if(key1=0) continue; else break; for(;) while(key1=0); /檢測按鍵是否松開 if(key
19、1=0) continue; else break;. /執(zhí)行對應(yīng)按鍵的程序 7.整體編程的實現(xiàn)軟件編程在keil上操作,在各個模塊的子程序完成后,在主程序按照流程圖圖11 proteus仿真效果圖調(diào)用各個子函數(shù)即可完成最終的編程。在經(jīng)過編譯之后,將機器代碼導(dǎo)入到實現(xiàn)搭建好的硬件proteus仿真,其效果圖11所示。8.設(shè)計過程中的問題及解決方案在確定了各種所需的元器件之后,對各種元器件的資料文檔進(jìn)行了仔細(xì)研讀。采用分模塊的方式,分別編寫了溫度讀取子函數(shù),溫度顯示子函數(shù),定時器子函數(shù),中斷子函數(shù),鍵盤掃描子函數(shù)。再用keil編寫編譯后,也出現(xiàn)了不少問題,但都問題不大,調(diào)試過后都編譯成功了。在用proteus搭建好了硬件電路之后,仿真時出現(xiàn)了一系列問題,第一,lcd1602沒有顯示。第二,有較大的噪音。第三,按鍵不是很靈敏。在網(wǎng)上找了資料之后發(fā)現(xiàn),在proteus仿真中l(wèi)cd1602是不帶上拉電阻的,于是在庫里找了一個排
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山東事業(yè)單位統(tǒng)考淄博經(jīng)濟(jì)開發(fā)區(qū)事業(yè)單位面向大學(xué)生退役士兵綜合類(專項)崗位公開招聘工作人員參考考試題庫及答案解析
- 2026浙江杭州市西湖區(qū)翠苑第五幼兒園和新城幼兒園誠聘幼兒教師(非事業(yè))考試參考題庫及答案解析
- 2026四川省總工會成都工人療養(yǎng)院人才招聘5人筆試模擬試題及答案解析
- 2026云南昆明理工大學(xué)附屬高級中學(xué)地理物理學(xué)科教師招聘2人備考考試試題及答案解析
- 學(xué)校食堂冰柜管理制度(3篇)
- 婦幼策劃活動方案模板(3篇)
- 井水降點施工方案(3篇)
- 12.9活動策劃方案跳舞(3篇)
- 撲克沙龍活動策劃方案(3篇)
- 咖啡入門活動策劃方案(3篇)
- 萬科施工管理辦法
- 2025至2030中國養(yǎng)老健康行業(yè)深度發(fā)展研究與企業(yè)投資戰(zhàn)略規(guī)劃報告
- Roland羅蘭樂器AerophoneAE-20電吹管ChineseAerophoneAE-20OwnersManual用戶手冊
- 2025年保安員資格考試題目及答案(共100題)
- 黨群工作部室部管理制度
- 2025至2030年中國兔子養(yǎng)殖行業(yè)市場現(xiàn)狀調(diào)查及投資方向研究報告
- 委外施工安全試題及答案
- DBT29-320-2025 天津市建筑工程消能減震隔震技術(shù)規(guī)程
- 產(chǎn)品技術(shù)維護(hù)與保養(yǎng)手冊
- 2024年國家電網(wǎng)招聘之電工類考試題庫(突破訓(xùn)練)
- 中建公司建筑機電設(shè)備安裝工程標(biāo)準(zhǔn)化施工手冊
評論
0/150
提交評論