



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、目錄1.前言.22.總體設計框架.22.1實現(xiàn)的功能 .22.2總體程序流程圖 .33.水溫采集模塊程序設計 .53.1 DS18B20簡介 .53.2 DS18B20的初始化 .63.3 DS18B20寫周期 .83.4 DS18B20讀周期 .93.5溫度讀取程序 .114.顯示模塊程序設計 .144.1 LCD1602初始化 .144.2 LCD1602寫周期 .165.定時模塊程序設計 .185.1定時器設置 .195.2定時器中斷子程序 .206.中斷模塊程序設計 .216.1 外部中斷設置.22.6.2 鍵盤掃描中斷子程序 .237.整體編程的實現(xiàn) .248.設計過程中的問題及解決
2、方案 .259.收獲與感悟 .261.前言隨著社會進步與經(jīng)濟發(fā)展,人們對生活質(zhì)量的要求越來越高,每天的飲水量是衡量健康的重要指標。但有多少人因為忙碌的工作而全天忘記喝水?當你感到口渴想要喝水的時候,體內(nèi)的失水已經(jīng)達到 2%,口渴本身其實是體內(nèi)已經(jīng)嚴重缺水的表現(xiàn) ,這是造成 “亞健康 ”狀態(tài)的致命習慣之一 。 同時,越不注意喝水,喝水的欲望就會越低 ,人就會變得越來越缺水 。研究表明 ,通常情況下 ,正常人每次喝水應控制在300ml ,間隔時間為 30到60分鐘 。本課程設計就此設計出一款智能水杯,用來智能顯示水溫和提醒喝水,既方便了生活 ,又保持了健康 。本報告針對智能水杯的軟件系統(tǒng)進行闡述,
3、軟件編程在 keil 上操作 。2.總體設計框架2.1 實現(xiàn)的功能.下載可編輯 .定時開啟按鍵設置外部中斷定時器中斷蜂鳴器提醒STC89C51溫度讀入溫度提示燈控制器DS18B20LCD 溫度顯示硬件結(jié)構(gòu)框架圖如圖1 所示 。圖 1 硬件結(jié)構(gòu)簡圖(1)水溫檢測使用 DS18B20 溫度傳感器 ,完成水溫的時時檢測功能。(2)水溫及定時時間顯示使用 LCD1602 液晶顯示屏 ,完成水溫及定時時間的顯示功能。(3)智能提醒使用定時器 0,開啟定時器中斷 ,蜂鳴器提醒 。(4)定時時間設置使用外部中斷 0 擴展電路 ,用三個按鍵觸發(fā)中斷 ,完成對應定時開啟和定時時間加減的功能 。2.2 總體程序流
4、程圖總體程序流程圖分為主程序和中斷程序兩部分,其中中斷程序分為外部中斷程序和定時器中斷程序。流程圖如下圖所示 。.下載可編輯 .開始初始化DS18B20 檢測水溫LCD1602 顯示水溫N水溫 >40?Y高溫提示燈紅燈亮外部 0 中斷?Y執(zhí)行按鍵掃描程序水溫 <20?NY按鍵 1 按下?YN低溫提示燈藍燈亮定時時間增加, LCD 顯示N按鍵 2按下?適宜水溫黃燈亮結(jié)束按鍵 3按下?Y定時時間減少, LCD 顯示NTR0=0?Y關閉計時器開啟計時器, LCD顯示定時器符號圖 2 主程序流程圖圖 3 外部按鍵中斷流程圖.下載可編輯 .定時器中斷 ?Y中斷計數(shù)加 1定時時間到達 ?一分鐘
5、時間到達 ?YY蜂鳴器提醒, 計數(shù)清零LCD 顯示定時時間減1圖 4 定時器中斷程序設計流程圖3.水溫采集模塊程序設計3.1 DS18B20簡介DS18B20 單線數(shù)字溫度傳感器 ,即“一線器件 ”,其具有獨特的優(yōu)點 :(1)采用單總線的接口方式 ,與微處理器連接時 ,僅需要一條口線即可實現(xiàn)微處理器與 DS18B20 的雙向通訊 。單總線具有經(jīng)濟性好 ,抗干擾能力強 ,適合于惡劣環(huán)境的現(xiàn)場溫度測量,使用方便等優(yōu)點 ,使用戶可輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構(gòu)建引入全新概念。(2)測量溫度范圍寬 ,測量精度高DS18B20 的測量范圍為-55 +125 ; 在 -10+ 85°范C圍
6、內(nèi),精度為 ± 0.5°。 C(4)持多點組網(wǎng)功能多個 DS18B20 可以并聯(lián)在惟一的單線上,實現(xiàn)多點測溫。.下載可編輯 .(5)供電方式靈活 DS18B20 可以通過內(nèi)部寄生電路從數(shù)據(jù)線上獲取電源。因此 ,當數(shù)據(jù)線上的時序滿足一定的要求時,可以不接外部電源 ,從而 使系統(tǒng)結(jié)構(gòu)更趨簡單 ,可靠性更高 。(6)測量參數(shù)可配置 DS18B20 的測量分辨率可通過程序設定912位。3.2 DS18B20的初始化主機首先發(fā)出一個480 960 微秒的低電平脈沖 ,然后釋放總線變?yōu)楦唠娖?,并在隨后的 480 微秒時間內(nèi)對總線進行檢測,如果有低電平出現(xiàn)說明總線上有器件已做出應答 。若
7、無低電平出現(xiàn)一直都是高電平說明總線上無器件應答。作為從圖 5 DS18B20 初始化時序圖器件的 DS18B20 在一上電后就一直在檢測總線上是否有480 960 微秒的低電平出現(xiàn) ,如果有,在總線轉(zhuǎn)為高電平后等待15 60 微秒后將總線電平拉低60240 微秒做出響應存在脈沖 ,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待 。 初始化時序圖如圖5 所示 。.下載可編輯 ./* 函數(shù)名: Ds18b20Init* 函數(shù)功能: 初始化*輸入:無* 輸出: 初始化成功返回 1,失敗返回 0*/unsigned char Ds18b20Init()unsigned int i;Despor
8、t=0;/ 將總線拉低 480us960usi=70;while(i-);/ 延時 642usDsport=1;/然后拉高總線 ,若 DS18B20 做出反應會將在 15us60us 后將總線拉低i=0;while(Desport) /等待 DS18B20 拉低總線i+;if(i>50000)/等待 >50MSreturn 0;/ 初始化失敗return 1;/ 初始化成功.下載可編輯 .3.3 DS18B20寫周期寫周期最少為 60 微秒,最長不超過 120 微秒 。寫周期一開始做為主機先把總線拉低 1 微秒表示寫周期開始 。隨后若主機想寫 0,則將總線置為低電平 ,若主機想寫
9、1,則將總線置為高電平 ,持續(xù)時間最少60 微秒直至寫周期結(jié)束 ,然后釋放總線為高電平至少1 微秒給總線恢復。而 DS18B20 則在檢測到總線被拉底后等待 15 微秒然后從 15us 到 45us 開始對總線采樣 ,在采樣期內(nèi)總線為高電平則為 1,若采樣期內(nèi)總線為低電平則為0。寫周期時序圖如圖6 所示 。圖 6 DS18B20 寫周期時序圖/* 函數(shù)名: Ds18b20WriteByte* 函數(shù)功能: 向 18B20 寫入一個字節(jié)* 輸入: com*輸出:無.下載可編輯 .*/void Ds18b20WriteByte(unsigned char dat)unsigned int i,j;f
10、or(j=0;j<8;j+)Desport=0;/ 每寫入一位數(shù)據(jù)之前先把總線拉低1usi+;Desport=dat&0x01; /然后寫入一個數(shù)據(jù) ,從最低位開始i=6;while(i-); /延時 68us,持續(xù)時間最少 60usDesport=1; / 然后釋放總線 ,至少 1us 給總線恢復時間才能接著寫入第二個數(shù)值dat>>=1;3.4 DS18B20讀周期讀周期是從主機把單總線拉低1 微秒之后就得釋放單總線為高電平,以讓DS18B20 把數(shù)據(jù)傳輸?shù)絾慰偩€上。作為從機 DS18B20 在檢測到總線被拉低1 微秒后,便開始送出數(shù)據(jù) ,若是要送出0 就把總線拉為
11、低電平直到讀周期結(jié)束。.下載可編輯 .若要送出 1 則釋放總線為高電平 。主機在一開始拉低總線1 微秒后釋放總線,然后在包括前面的拉低總線電平1 微秒在內(nèi)的 15 微秒時間內(nèi)完成對總線進行采樣檢測 ,采樣期內(nèi)總線為低電平則確認為0。 采樣期內(nèi)總線為高電平則確認為 1。完成一個讀時序過程至少需要60 微秒才能完成 。其讀周期的時序圖如圖7所示。圖 7 DS18B20 讀周期時序圖/* 函數(shù)名: Ds18b20ReadByte* 函數(shù)功能: 讀取一個字節(jié)* 輸入: com*輸出:無*/unsigned char Ds18b20ReadByte()unsigned char byte,bi;unsi
12、gned int i,j;.下載可編輯 .for(j=8;j>0;j-)Dsport=0;/先將總線拉低 1usi+;Dsport=1;/然后釋放總線i+;i+;/ 延時 6us 等待數(shù)據(jù)穩(wěn)定bi=Dsport;/ 讀取數(shù)據(jù) ,從最低位開始讀取byte=(byte>>1)|(bi<<7); /*將 byte 左移一位 ,然后與上右移 7 位后的 bi ,注意移動之后移掉那位補0。*/i=4;/ 讀取完之后等待48us 再接著讀取下一個數(shù)while(i-);return byte;3.5 溫度讀取程序簡單的讀取溫度值的步驟如下:跳過 ROM 操作 - 發(fā)送溫度轉(zhuǎn)換命
13、令 - 跳過 ROM 操作 - 發(fā)送讀取溫度命令 - 讀取溫度值(1)溫度轉(zhuǎn)換指令 :/*.下載可編輯 .* 函數(shù)名: Ds18b20ChangTemp* 函數(shù)功能: 讓 18b20 開始轉(zhuǎn)換溫度* 輸入: com*輸出:無*/voidDs18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳過 ROM 操作命令Ds18b20WriteByte(0x44);/ 溫度轉(zhuǎn)換命令Delay1ms(100);(2)溫度讀取指令/* 函數(shù)名: Ds18b20ReadTempCom* 函數(shù)功能: 發(fā)送讀取溫度命令* 輸入:
14、com*輸出:無*/.下載可編輯 .voidDs18b20ReadTempCom()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳過 ROM 操作命令Ds18b20WriteByte(0xbe);/ 發(fā)送讀取溫度命令(3)讀取溫度 :/* 函數(shù)名: Ds18b20ReadTemp* 函數(shù)功能: 讀取溫度* 輸入: com*輸出:無*/int Ds18b20ReadTemp()unsigned int temp=0;unsigned char tmh,tml;Ds18b20ChangTemp(); /先寫入轉(zhuǎn)換命令Ds18b20ReadT
15、empCom();/ 然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令tml=Ds18b20ReadByte();/ 讀取溫度值共 16 位,先讀低字節(jié).下載可編輯 .tmh=Ds18b20ReadByte();/ 再讀高字節(jié)temp=tmh;temp<<=8;temp|=tml;return temp;4.顯示模塊程序設計4.1 LCD1602初始化表 1 LCD1602 指令表指令碼功能D=1開顯示; D=0關顯示00001DCBC=1顯示光標 ; C=0不顯示光標B=1光標閃爍 ; B=0光標不顯示N=1當讀或?qū)懸粋€字符后地址指針加一,且光標加一000001NSN=0當讀或?qū)懸粋€字符后地址指
16、針減一,且光標減一.下載可編輯 .S=1 當寫一個字符時 ,整屏顯示左移 ( N=1 )或右移 ( N=0 ),以得到光標不移動而屏幕移動的效果S=0 當寫一個字符 ,整屏顯示不移動01H顯示清屏 :所有顯示清零80H+ 地址碼 ( 0-27H,設置數(shù)據(jù)地址40H-67H)/* 函數(shù)名: LcdInit()* 函數(shù)功能: 初始化 LCD 屏* 輸入: 無* 輸出: 無*/void LcdInit()/LCD初始化子程序LcdWriteCom(0x38);/ 設置顯示模式LcdWriteCom(0x0c);/ 開顯示不顯示光標 ,光標不閃爍LcdWriteCom(0x06);/ 寫一個指針加 1
17、LcdWriteCom(0x01);/ 清屏LcdWriteCom(0x80);/ 設置數(shù)據(jù)指針起點.下載可編輯 .4.2 LCD1602寫周期時序圖如圖8 所示 , RS=0 為寫命令 , RS=1 為寫數(shù)據(jù) 。 在寫周期 ,R/W=0 , E 為寫數(shù)據(jù)或命令使能輸入。圖 8 LCD1602 寫時序圖(1)寫命令:/* 函數(shù)名: LcdWriteCom* 函數(shù)功能: 向 LCD 寫入一個字節(jié)的命令* 輸入: com*輸出:無*/void LcdWriteCom(unsigned char com)/ 寫入命令RS=0;RW=0;.下載可編輯 .GPIO_LCD=com;Delay1ms(10
18、);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(10);.下載可編輯 .E=0;5. 定時模塊程序設計定時 / 計數(shù)器實質(zhì)上是一個加1 計數(shù)器 。它隨著計數(shù)器的輸入脈沖進行自加1,也就是每來一個脈沖 ,計數(shù)器就自動加1,當加到計數(shù)器為全1 時,再輸入一個脈沖就使計數(shù)器回零,且計數(shù)器的溢出使
19、相應的中斷標志位置1,向 CPU發(fā)出中斷請求(定時 / 計數(shù)器中斷允許時)。 如果定時 / 計數(shù)器工作于定時模式,則表示定時時間已到 ;如果工作于計數(shù)模式 ,則表示計數(shù)值已滿 。與定時器相關的寄存器如下:TCOND7D6D5D4D3D2D1D0功能TF1TR1TF0TR0IE1IT1IE0IT0TF1 和 TF0:T1 和 T0 的溢出標志位 ,溢出后由硬件自動置 1 發(fā)出定時器中斷請求。 中斷響應后標志位自動清零 。IE1 和 IE0: INT1 和 INT0 的標志位 ,引腳狀態(tài)變化后由硬件自動置1 發(fā)出外部中斷請求 ,中斷響應后標志位自動清零 。IT1 和 IT0: INT1 和 INT
20、0 的觸發(fā)方式選擇位 。TMODD7D6D5D4D3D2D1D0功能GATEC/TM1M0GATEC/TM1M0GATE:門控制為 0 時僅有運行控制位 TRx 來控制定時 / 計數(shù)器的開啟 。為 1時由 TRx 和外部中斷脈沖計數(shù) 。( 用于計算外部中斷負跳變的次數(shù)).下載可編輯 .C/T:計數(shù)器模式和定時器模式選擇為0 時選擇定時器模式 ,為 1 時選為計數(shù)器模式 。方式 1 的計數(shù)位數(shù)是 16 位,由 TL0 作為低 8 位、TH0 作為高 8 位,組成了TCONTMODTF1D7T0引腳1M0D0申請TR1溢出10M1中斷TF0TH0TL00C/TTR08位8位GATE&機器周
21、期1M01M1C/TD0INT0引腳GATE D716 位加 1 計數(shù)器。如圖 9 所示。圖 9 定時器模式1 示意圖5.1 定時器設置/* 函數(shù)名: Timer* 函數(shù)功能: 設置定時器并開始計時*輸入:無*輸出:無*/void Timer()TMOD=0X01;/ 定時器選擇工作模式1TH0 = 0x3C;/ 定時器賦初值.下載可編輯 .TL0 = 0xB0;/ 定時 50msEA = 1;/ 開啟中斷ET0 = 1;/ 開啟定時器中斷TR0=1;/ 啟動定時器5.2 定時器中斷子程序定時器中斷子程序完成的功能有:(1)定時器重新賦初值 ;(2)統(tǒng)計中斷次數(shù) ,并在 LCD 上顯示剩余時間
22、 ;(3)判斷是否達到定時終點以啟動蜂鳴器。/* 函數(shù)名: Timer0() interrupt 1* 函數(shù)功能: 設置定時器中斷執(zhí)行程序, LCD 顯示定時剩余時間*輸入:無*輸出:無*/void Timer0() interrupt 1TH0 = 0x3C;TL0 = 0xB0;/ 定時器重新賦值Time+;k+;/ 中斷次數(shù)計數(shù).下載可編輯 .if(k=20)/20 次中斷 ,即 1sLCDwritecom(0xc2);LCDwritedat('0'+(-j)/10);LCDwritedat('0'+(j)%10);/ 定時顯示剩余時間k=0;if (Ti
23、me=full)/ 判斷是否達到定時時間for(i=0;i<100;i+)sound=1;/ 啟用無源蜂鳴器Delay1ms(1);sound=0;Delay1ms(1);Time=0;j=full/20;/ 計數(shù)初始化6.中斷模塊程序設計.下載可編輯 .中斷是指 CPU 在執(zhí)行當前程序的過程中,由于某種隨機出現(xiàn)的外設請求或CPU 內(nèi)部的異常事件 ,使 CPU 暫停正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應的服務處理程序;當服務處理程序運行完畢后, CPU 再返回到暫停處繼續(xù)執(zhí)行原來的程序 。51 單片機的中斷系統(tǒng)如圖10 所示 。圖 10 中斷系統(tǒng)結(jié)構(gòu)圖6.1 外部中斷設置/* 函數(shù)名: IntCo
24、nfiguration()* 函數(shù)功能: 設置外部中斷*輸入:無*輸出:無*/void IntConfiguration().下載可編輯 .IT0=1;/ 外部中斷0 跳變沿觸發(fā)方式(下降沿 )EX0=1;/ 打開 INT0 的中斷允許 。EA=1;/ 打開總中斷6.2 鍵盤掃描中斷子程序中斷程序完成的功能有 :(1)判斷按鍵是否按下 ;(2)執(zhí)行對應按鍵的功能 。/* 函數(shù)名: Scankey()* 函數(shù)功能: 鍵盤掃描 ,并執(zhí)行對應按鍵的程序*輸入:無*輸出:無*/voidScankey()if(key1=0)/ 判斷按鍵是否按下Delay1ms(10);/ 延時消抖.下載可編輯 .if(
25、key1=0)/ 判斷按鍵是否按下for(;)if(key1=0)continue;else break;for(;)while(key1=0);/ 檢測按鍵是否松開if(key1=0) continue;else break;./ 執(zhí)行對應按鍵的程序7.整體編程的實現(xiàn).下載可編輯 .軟件編程在keil 上操作,在各個模塊的子程序完成后,在主程序按照流程圖圖 11 proteus 仿真效果圖調(diào)用各個子函數(shù)即可完成最終的編程 。 在經(jīng)過編譯之后 ,將機器代碼導入到實現(xiàn)搭建好的硬件 proteus 仿真,其效果圖 11 所示 。8.設計過程中的問題及解決方案在確定了各種所需的元器件之后,對各種元器件的資料文檔進行了仔細研讀。采用分模塊的方式,分別編寫了溫度讀取子函數(shù),溫度顯示子函數(shù) ,定時器子函數(shù) ,中斷子函數(shù) ,鍵盤掃描子函數(shù) 。再用keil 編寫編譯后 ,也出現(xiàn)了不少問題,但都問題不大
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政權(quán)力的適當行使與法律約束試題及答案
- 網(wǎng)絡管理員考試技術提升試題及答案
- 法學概論考試常見題型試題及答案
- 責任與擔當?shù)漠敶贻p人試題及答案
- 高考全面評估試題及答案
- 行業(yè)趨勢分析與年度應對計劃
- 行業(yè)動態(tài)監(jiān)測月度工作計劃
- 營銷推廣方案計劃
- 企業(yè)責任與年度工作結(jié)合計劃
- 難民潮對歐洲經(jīng)濟的挑戰(zhàn)探討試題及答案
- DB35T 88-2022 伐區(qū)調(diào)查設計技術規(guī)程
- 蝸牛與黃鸝鳥(課件)人音版音樂二年級上冊
- 經(jīng)濟師考試旅游經(jīng)濟(中級)專業(yè)知識和實務試卷及解答參考
- 班級規(guī)章 創(chuàng)造和諧
- 2024全國高中數(shù)學聯(lián)賽山東賽區(qū)預賽試卷(含解析)
- 2024年中國家具電商行業(yè)市場競爭格局及投資方向研究報告(智研咨詢)
- 導數(shù)(30題)-2024年考前15天高考數(shù)學沖刺大題訓練(新高考)含答案
- 高層建筑一棟一冊消防安全檔案
- 創(chuàng)造性思維與創(chuàng)新方法智慧樹知到期末考試答案章節(jié)答案2024年大連理工大學
- 外科圍手術期營養(yǎng)支持療法
- 廣東省深圳市南山區(qū)2023-2024學年四年級下學期期末科學試題
評論
0/150
提交評論