



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄1.前言.22.總體設計框架.22.1實現的功能 .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.整體編程的實現 .248.設計過程中的問題及解決
2、方案 .259.收獲與感悟 .261.前言隨著社會進步與經濟發展,人們對生活質量的要求越來越高,每天的飲水量是衡量健康的重要指標。但有多少人因為忙碌的工作而全天忘記喝水?當你感到口渴想要喝水的時候,體內的失水已經達到 2%,口渴本身其實是體內已經嚴重缺水的表現 ,這是造成 “亞健康 ”狀態的致命習慣之一 。 同時,越不注意喝水,喝水的欲望就會越低 ,人就會變得越來越缺水 。研究表明 ,通常情況下 ,正常人每次喝水應控制在300ml ,間隔時間為 30到60分鐘 。本課程設計就此設計出一款智能水杯,用來智能顯示水溫和提醒喝水,既方便了生活 ,又保持了健康 。本報告針對智能水杯的軟件系統進行闡述,
3、軟件編程在 keil 上操作 。2.總體設計框架2.1 實現的功能.下載可編輯 .定時開啟按鍵設置外部中斷定時器中斷蜂鳴器提醒STC89C51溫度讀入溫度提示燈控制器DS18B20LCD 溫度顯示硬件結構框架圖如圖1 所示 。圖 1 硬件結構簡圖(1)水溫檢測使用 DS18B20 溫度傳感器 ,完成水溫的時時檢測功能。(2)水溫及定時時間顯示使用 LCD1602 液晶顯示屏 ,完成水溫及定時時間的顯示功能。(3)智能提醒使用定時器 0,開啟定時器中斷 ,蜂鳴器提醒 。(4)定時時間設置使用外部中斷 0 擴展電路 ,用三個按鍵觸發中斷 ,完成對應定時開啟和定時時間加減的功能 。2.2 總體程序流
4、程圖總體程序流程圖分為主程序和中斷程序兩部分,其中中斷程序分為外部中斷程序和定時器中斷程序。流程圖如下圖所示 。.下載可編輯 .開始初始化DS18B20 檢測水溫LCD1602 顯示水溫N水溫 >40?Y高溫提示燈紅燈亮外部 0 中斷?Y執行按鍵掃描程序水溫 <20?NY按鍵 1 按下?YN低溫提示燈藍燈亮定時時間增加, LCD 顯示N按鍵 2按下?適宜水溫黃燈亮結束按鍵 3按下?Y定時時間減少, LCD 顯示NTR0=0?Y關閉計時器開啟計時器, LCD顯示定時器符號圖 2 主程序流程圖圖 3 外部按鍵中斷流程圖.下載可編輯 .定時器中斷 ?Y中斷計數加 1定時時間到達 ?一分鐘
5、時間到達 ?YY蜂鳴器提醒, 計數清零LCD 顯示定時時間減1圖 4 定時器中斷程序設計流程圖3.水溫采集模塊程序設計3.1 DS18B20簡介DS18B20 單線數字溫度傳感器 ,即“一線器件 ”,其具有獨特的優點 :(1)采用單總線的接口方式 ,與微處理器連接時 ,僅需要一條口線即可實現微處理器與 DS18B20 的雙向通訊 。單總線具有經濟性好 ,抗干擾能力強 ,適合于惡劣環境的現場溫度測量,使用方便等優點 ,使用戶可輕松地組建傳感器網絡,為測量系統的構建引入全新概念。(2)測量溫度范圍寬 ,測量精度高DS18B20 的測量范圍為-55 +125 ; 在 -10+ 85°范C圍
6、內,精度為 ± 0.5°。 C(4)持多點組網功能多個 DS18B20 可以并聯在惟一的單線上,實現多點測溫。.下載可編輯 .(5)供電方式靈活 DS18B20 可以通過內部寄生電路從數據線上獲取電源。因此 ,當數據線上的時序滿足一定的要求時,可以不接外部電源 ,從而 使系統結構更趨簡單 ,可靠性更高 。(6)測量參數可配置 DS18B20 的測量分辨率可通過程序設定912位。3.2 DS18B20的初始化主機首先發出一個480 960 微秒的低電平脈沖 ,然后釋放總線變為高電平,并在隨后的 480 微秒時間內對總線進行檢測,如果有低電平出現說明總線上有器件已做出應答 。若
7、無低電平出現一直都是高電平說明總線上無器件應答。作為從圖 5 DS18B20 初始化時序圖器件的 DS18B20 在一上電后就一直在檢測總線上是否有480 960 微秒的低電平出現 ,如果有,在總線轉為高電平后等待15 60 微秒后將總線電平拉低60240 微秒做出響應存在脈沖 ,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待 。 初始化時序圖如圖5 所示 。.下載可編輯 ./* 函數名: Ds18b20Init* 函數功能: 初始化*輸入:無* 輸出: 初始化成功返回 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,則將總線置為高電平 ,持續時間最少60 微秒直至寫周期結束 ,然后釋放總線為高電平至少1 微秒給總線恢復。而 DS18B20 則在檢測到總線被拉底后等待 15 微秒然后從 15us 到 45us 開始對總線采樣 ,在采樣期內總線為高電平則為 1,若采樣期內總線為低電平則為0。寫周期時序圖如圖6 所示 。圖 6 DS18B20 寫周期時序圖/* 函數名: Ds18b20WriteByte* 函數功能: 向 18B20 寫入一個字節* 輸入: com*輸出:無.下載可編輯 .*/void Ds18b20WriteByte(unsigned char dat)unsigned int i,j;f
10、or(j=0;j<8;j+)Desport=0;/ 每寫入一位數據之前先把總線拉低1usi+;Desport=dat&0x01; /然后寫入一個數據 ,從最低位開始i=6;while(i-); /延時 68us,持續時間最少 60usDesport=1; / 然后釋放總線 ,至少 1us 給總線恢復時間才能接著寫入第二個數值dat>>=1;3.4 DS18B20讀周期讀周期是從主機把單總線拉低1 微秒之后就得釋放單總線為高電平,以讓DS18B20 把數據傳輸到單總線上。作為從機 DS18B20 在檢測到總線被拉低1 微秒后,便開始送出數據 ,若是要送出0 就把總線拉為
11、低電平直到讀周期結束。.下載可編輯 .若要送出 1 則釋放總線為高電平 。主機在一開始拉低總線1 微秒后釋放總線,然后在包括前面的拉低總線電平1 微秒在內的 15 微秒時間內完成對總線進行采樣檢測 ,采樣期內總線為低電平則確認為0。 采樣期內總線為高電平則確認為 1。完成一個讀時序過程至少需要60 微秒才能完成 。其讀周期的時序圖如圖7所示。圖 7 DS18B20 讀周期時序圖/* 函數名: Ds18b20ReadByte* 函數功能: 讀取一個字節* 輸入: 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 等待數據穩定bi=Dsport;/ 讀取數據 ,從最低位開始讀取byte=(byte>>1)|(bi<<7); /*將 byte 左移一位 ,然后與上右移 7 位后的 bi ,注意移動之后移掉那位補0。*/i=4;/ 讀取完之后等待48us 再接著讀取下一個數while(i-);return byte;3.5 溫度讀取程序簡單的讀取溫度值的步驟如下:跳過 ROM 操作 - 發送溫度轉換命
13、令 - 跳過 ROM 操作 - 發送讀取溫度命令 - 讀取溫度值(1)溫度轉換指令 :/*.下載可編輯 .* 函數名: Ds18b20ChangTemp* 函數功能: 讓 18b20 開始轉換溫度* 輸入: com*輸出:無*/voidDs18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳過 ROM 操作命令Ds18b20WriteByte(0x44);/ 溫度轉換命令Delay1ms(100);(2)溫度讀取指令/* 函數名: Ds18b20ReadTempCom* 函數功能: 發送讀取溫度命令* 輸入:
14、com*輸出:無*/.下載可編輯 .voidDs18b20ReadTempCom()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳過 ROM 操作命令Ds18b20WriteByte(0xbe);/ 發送讀取溫度命令(3)讀取溫度 :/* 函數名: Ds18b20ReadTemp* 函數功能: 讀取溫度* 輸入: com*輸出:無*/int Ds18b20ReadTemp()unsigned int temp=0;unsigned char tmh,tml;Ds18b20ChangTemp(); /先寫入轉換命令Ds18b20ReadT
15、empCom();/ 然后等待轉換完后發送讀取溫度命令tml=Ds18b20ReadByte();/ 讀取溫度值共 16 位,先讀低字節.下載可編輯 .tmh=Ds18b20ReadByte();/ 再讀高字節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當讀或寫一個字符后地址指針加一,且光標加一000001NSN=0當讀或寫一個字符后地址指
16、針減一,且光標減一.下載可編輯 .S=1 當寫一個字符時 ,整屏顯示左移 ( N=1 )或右移 ( N=0 ),以得到光標不移動而屏幕移動的效果S=0 當寫一個字符 ,整屏顯示不移動01H顯示清屏 :所有顯示清零80H+ 地址碼 ( 0-27H,設置數據地址40H-67H)/* 函數名: LcdInit()* 函數功能: 初始化 LCD 屏* 輸入: 無* 輸出: 無*/void LcdInit()/LCD初始化子程序LcdWriteCom(0x38);/ 設置顯示模式LcdWriteCom(0x0c);/ 開顯示不顯示光標 ,光標不閃爍LcdWriteCom(0x06);/ 寫一個指針加 1
17、LcdWriteCom(0x01);/ 清屏LcdWriteCom(0x80);/ 設置數據指針起點.下載可編輯 .4.2 LCD1602寫周期時序圖如圖8 所示 , RS=0 為寫命令 , RS=1 為寫數據 。 在寫周期 ,R/W=0 , E 為寫數據或命令使能輸入。圖 8 LCD1602 寫時序圖(1)寫命令:/* 函數名: LcdWriteCom* 函數功能: 向 LCD 寫入一個字節的命令* 輸入: com*輸出:無*/void LcdWriteCom(unsigned char com)/ 寫入命令RS=0;RW=0;.下載可編輯 .GPIO_LCD=com;Delay1ms(10
18、);E=1;Delay1ms(10);E=0;(2)寫數據/* 函數名: LcdWriteData* 函數功能: 向 LCD 寫入一個字節的數據* 輸入: dat*輸出:無*/void LcdWriteData(unsigned char dat)/ 寫入數據RS=1;RW=0;GPIO_LCD=dat;Delay1ms(10);E=1;Delay1ms(10);.下載可編輯 .E=0;5. 定時模塊程序設計定時 / 計數器實質上是一個加1 計數器 。它隨著計數器的輸入脈沖進行自加1,也就是每來一個脈沖 ,計數器就自動加1,當加到計數器為全1 時,再輸入一個脈沖就使計數器回零,且計數器的溢出使
19、相應的中斷標志位置1,向 CPU發出中斷請求(定時 / 計數器中斷允許時)。 如果定時 / 計數器工作于定時模式,則表示定時時間已到 ;如果工作于計數模式 ,則表示計數值已滿 。與定時器相關的寄存器如下:TCOND7D6D5D4D3D2D1D0功能TF1TR1TF0TR0IE1IT1IE0IT0TF1 和 TF0:T1 和 T0 的溢出標志位 ,溢出后由硬件自動置 1 發出定時器中斷請求。 中斷響應后標志位自動清零 。IE1 和 IE0: INT1 和 INT0 的標志位 ,引腳狀態變化后由硬件自動置1 發出外部中斷請求 ,中斷響應后標志位自動清零 。IT1 和 IT0: INT1 和 INT
20、0 的觸發方式選擇位 。TMODD7D6D5D4D3D2D1D0功能GATEC/TM1M0GATEC/TM1M0GATE:門控制為 0 時僅有運行控制位 TRx 來控制定時 / 計數器的開啟 。為 1時由 TRx 和外部中斷脈沖計數 。( 用于計算外部中斷負跳變的次數).下載可編輯 .C/T:計數器模式和定時器模式選擇為0 時選擇定時器模式 ,為 1 時選為計數器模式 。方式 1 的計數位數是 16 位,由 TL0 作為低 8 位、TH0 作為高 8 位,組成了TCONTMODTF1D7T0引腳1M0D0申請TR1溢出10M1中斷TF0TH0TL00C/TTR08位8位GATE&機器周
21、期1M01M1C/TD0INT0引腳GATE D716 位加 1 計數器。如圖 9 所示。圖 9 定時器模式1 示意圖5.1 定時器設置/* 函數名: Timer* 函數功能: 設置定時器并開始計時*輸入:無*輸出:無*/void Timer()TMOD=0X01;/ 定時器選擇工作模式1TH0 = 0x3C;/ 定時器賦初值.下載可編輯 .TL0 = 0xB0;/ 定時 50msEA = 1;/ 開啟中斷ET0 = 1;/ 開啟定時器中斷TR0=1;/ 啟動定時器5.2 定時器中斷子程序定時器中斷子程序完成的功能有:(1)定時器重新賦初值 ;(2)統計中斷次數 ,并在 LCD 上顯示剩余時間
22、 ;(3)判斷是否達到定時終點以啟動蜂鳴器。/* 函數名: Timer0() interrupt 1* 函數功能: 設置定時器中斷執行程序, LCD 顯示定時剩余時間*輸入:無*輸出:無*/void Timer0() interrupt 1TH0 = 0x3C;TL0 = 0xB0;/ 定時器重新賦值Time+;k+;/ 中斷次數計數.下載可編輯 .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;/ 計數初始化6.中斷模塊程序設計.下載可編輯 .中斷是指 CPU 在執行當前程序的過程中,由于某種隨機出現的外設請求或CPU 內部的異常事件 ,使 CPU 暫停正在執行的程序而轉去執行相應的服務處理程序;當服務處理程序運行完畢后, CPU 再返回到暫停處繼續執行原來的程序 。51 單片機的中斷系統如圖10 所示 。圖 10 中斷系統結構圖6.1 外部中斷設置/* 函數名: IntCo
24、nfiguration()* 函數功能: 設置外部中斷*輸入:無*輸出:無*/void IntConfiguration().下載可編輯 .IT0=1;/ 外部中斷0 跳變沿觸發方式(下降沿 )EX0=1;/ 打開 INT0 的中斷允許 。EA=1;/ 打開總中斷6.2 鍵盤掃描中斷子程序中斷程序完成的功能有 :(1)判斷按鍵是否按下 ;(2)執行對應按鍵的功能 。/* 函數名: Scankey()* 函數功能: 鍵盤掃描 ,并執行對應按鍵的程序*輸入:無*輸出:無*/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;./ 執行對應按鍵的程序7.整體編程的實現.下載可編輯 .軟件編程在keil 上操作,在各個模塊的子程序完成后,在主程序按照流程圖圖 11 proteus 仿真效果圖調用各個子函數即可完成最終的編程 。 在經過編譯之后 ,將機器代碼導入到實現搭建好的硬件 proteus 仿真,其效果圖 11 所示 。8.設計過程中的問題及解決方案在確定了各種所需的元器件之后,對各種元器件的資料文檔進行了仔細研讀。采用分模塊的方式,分別編寫了溫度讀取子函數,溫度顯示子函數 ,定時器子函數 ,中斷子函數 ,鍵盤掃描子函數 。再用keil 編寫編譯后 ,也出現了不少問題,但都問題不大
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目投標開發協議書
- 高價買房認購協議書
- 酒店房屋轉租協議書
- 車輛維修風險協議書
- 進駐健康驛站協議書
- 銷售人員駐點協議書
- 裝修合同定金協議書
- 銀行發卡服務協議書
- 養殖雞合伙合同協議書
- 乒乓球館會員卡協議書
- 獸醫傳染病學PDF
- 軟件生存周期過程控制程序
- 鋼制列管式固定管板換熱器結構設計手冊
- 注塑車間平面規劃圖OK
- 幼兒園中班音樂《小雨沙沙》微課件
- 西鐵計202119號 中國鐵路西安局集團有限公司關于印發《西安局集團公司地方涉鐵工程建設管理辦法》的通知2021-01-25
- 光伏發電項目試驗計劃
- 2023年全國青少年航天知識大賽題庫
- 《一棵小桃樹》閱讀
- 髖臼及股骨骨缺損的分型及評價-課件
- 上海市華師大二附中2022-2023高二下學期期中政治試卷
評論
0/150
提交評論