freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于at89s52太陽能熱水器控制系統(tǒng)的設計畢業(yè)設計論文-資料下載頁

2025-07-02 09:31本頁面

【導讀】以便達到舒適的水溫。該系統(tǒng)同時還能對水位進行實時監(jiān)控,水位的當前值通過。時,系統(tǒng)會自動關閉上水電磁開關。

  

【正文】 ,所以,非門的輸出也不可能改變??傊灰?R RC 的時間常數(shù)選取恰當,使電容 C 能夠有穩(wěn)態(tài)額電壓充電到開啟電壓,或者放電到關閉電壓延遲時間等于或者大于 10ms,該電路就能夠消除抖動影響。 圖 硬件去抖電路 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 21 4 軟件設計 軟件設計架構 硬件電路的設計是一切的基礎,在此礎上,而軟件的設計是關鍵的部分,它是單片機的工作重點,就是讓各個部分協(xié)調工作的命 令,軟件的程序重要性是毋庸置疑的,它是整個控制系統(tǒng)的命脈,根據(jù)各個部分編寫出相應的驅動程序,才能夠使得相應的芯片具有相應的功能,所以程序的設計是非常重要的。芯片的工作有著和自己相對應的時序圖,只有根據(jù)芯片的時序準確的執(zhí)行命令才能夠達到想要的目的,才能夠實現(xiàn)芯片的功能。程序的設計還需要有一定的思路,根據(jù)系統(tǒng)的運行過程要畫出相應程序的流程圖,而根據(jù)流程圖寫出程序是非常方便的,也是不容易產生錯誤的,而且可以得到正確的程序。如圖 所示 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 22 N Y N Y 圖 系統(tǒng)軟件流程圖 開始 初始化 開中斷 顯示溫度和水位 是否到了水位低線 關進水閥門 是否到了設定的溫度 關加熱器 自動上水 開加熱器 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 23 主控程序 void main() { while(1) { xianshiTemperature()。 xianshishuiwei()。 if(shuiwei20) kai1=0。 if(shuiwei90) kai1=1。 if(wendu35) kai2=0。 if(wendu40) kai2=1。 } } 應用程序 DS18B20 的驅動設計 ○ 1 延時函數(shù) 延時函數(shù) delay 用于延時指定的時間,用來構成 1wire 總線協(xié)議所需要的時序。在程序中通過一個空循環(huán)語句便可以實現(xiàn)延時。 Void delay(int usecond) { Int s。 For(s=0。susecond。s++)。} ○ 2 復位函數(shù) 復位函數(shù) reset 用于完成 1wire 總線的復位操作,程序中首先將數(shù)據(jù) DQ 拉低并保持一段時間來實現(xiàn) 1wire 總線上所有器件的復位。接著主機等待 DS18B20返回的存在脈沖,并返回存在信號。如果返回 0,則表示器件存在;返回 1,則表示無器件。 Uchar reset(void) { Uchar presencesignal。 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 24 DQ=0。 Delay(30)。 DQ=1。 Delay(3)。 Presencesignal=DQ。 Delay(30)。 Return presencesignal。 } ○ 3 位寫入函數(shù) 位寫入函數(shù) writebit 用于向 1wire 總線上的器件寫入一位值。程序中首先拉低數(shù)據(jù)線 DQ 開始寫時間隙,然后向 DQ 寫入數(shù)據(jù)。如果寫入 1,則數(shù)據(jù) DQ 置 1,反之置 0。 Void writebit(char val) { DQ=0。 If(val==1) DQ=1。 Else DQ=0。 Delay(5)。 DQ=1。 } ○ 4 字節(jié)寫入函數(shù) 字節(jié)寫入函數(shù) writebyte 用于 1wire 總線上的器件寫入一個字節(jié)數(shù)據(jù)。程序中采用循環(huán)移位的方式,每次調用位寫入函數(shù) writebit 寫入一位。 Void writebyte(char val) { Uchar i。 Uchar temp。 For(i=0。i8。i++) { temp = vali。 Temp amp。= 0x01。 Writebit(temp)。 } Delay(5)。 } ○ 5 位讀取函數(shù) 位讀取函數(shù) readbit 用于從 1wire 總線上讀取從器件返回的一位值。程序中首先拉低數(shù)據(jù)線 DQ 開始讀時間隙,然后將 DQ 置 1。最后延時一段時間,讀取并返回數(shù)據(jù)總線 DQ 上的位數(shù)據(jù)。 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 25 Uchar readbit(void) { Uchar i。 DQ=0。 DQ=1。 For(i=0。i3; i++) Rreturn DQ。 } ○ 6 字節(jié)讀取函數(shù) 字節(jié)讀取函數(shù) readbyte用于 1wire總線上讀取從器件返回的一個字節(jié)數(shù)據(jù)。程序中采用循環(huán)移位的方式,每 次調用位讀取函數(shù) readbit 讀取一位。 Uchar readbyte(void) { Uchar i。 Uchar value=0。 For(i=0。i8。i++) { if(readbit()) Value|=0x01i。 Delay(7)。 } Return(value)。 } ○ 7 讀取溫度函數(shù) 讀取溫度函數(shù) readtemperature 用于讀取 DS18B20 測量的溫度。程序中首先復位 1wire 總線,然后啟動溫度轉換命令 (代 碼為 44H)。接著通過讀暫存器命令(代碼為 BEH)。讀取溫度數(shù)據(jù),最后通過處理輸入對應的攝氏溫度。 ReadTemperature(void) { uchar a=0。 uchar b=0。 uint t=0。 float tt=0。 Init_DS18B20()。 Write(0xCC)。 Write(0x44)。 Init_DS18B20()。 Write(0xCC)。 Write(0xBE)。 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 26 a=Read()。 b=Read()。 t=b。 t=8。 t=t|a。 tt=t*。 t= tt*10+。 return(t)。 } 按鍵控制的軟件設計 按鍵是外部的命令的體現(xiàn), 按鍵從沒有按下 至 按下 和 釋放是一個完整的過程,即 當我們按下一個按鍵 的 時 候 ,總 是 希望某個命令只 會 執(zhí)行一次, 但是 在按鍵 被按下的 動作 中,不 能夠 有干擾 的信號 進來 影響 ,因為,按下 按鍵的 過程中,一旦有干擾, 就 可能 會 造成誤 認為為 觸發(fā) 的 過程, 我們肯定不是想要這樣的結果 。 所以, 按鍵 被 按下 的 時 候 ,要把我們 身體 上的干擾 的 信號 還有 按鍵 本身通過 機械接觸 產生的干擾信號等等 濾除掉, 通常 , 我們要濾除這樣干擾信號可以通過電容來濾除 ,但 是 實際上, 這樣 增加 了 硬件 的 成本 和 硬件 的 電路 板 的 容積 ,這 并不 是我們希望 的 ,總得 想 個辦法解決這個問題,因此我們可采用軟件濾波方法 來 去除這些干擾信號,一般 的 情況下,一個按鍵按下時,總是在按下的 瞬間 存在著一定的干擾 的 信號,按下 去 之后就基本上 的 進入了穩(wěn)定的狀態(tài)。具體一個按鍵從按下 至釋放的全過程的信號圖如 下 圖 所示: 圖 理想按鍵波形圖 圖 實際的波形圖 從圖中可看出,因為按鍵的機械特性,當按鍵閉合的時候,并不能馬上的 保存良好的接觸,而是來回的彈跳。這個時間很短暫,我們的手根本不能夠感覺出來。但是對于一秒鐘的執(zhí)行百萬條指令的單片機來說,這個時間是很長的了。那么在這段抖動時間內,單片機可能讀到很多次高低電平的變化。若不加任何的處理的話,就會被認為已經按下,或者被松開很多次了。而事實上并非如此,我們的手卻一直按在按鍵上,并沒有重復的按動很多次。要想能正確的判斷按鍵是否按下,就要避開這段時間的抖動。我們在程序設計的時候,按鍵被識別按下之后,攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 27 必須要延時 10ms 以上,才能避開了干擾信號的區(qū)域,我們再檢測一次,看是否按鍵真得已經按下 了,若是真得已經按下了,這時候肯定輸出是低電平,若這時候檢測到的是高電平,會證明剛才是因為干擾信號而引起的誤觸發(fā), CPU 就會認為是誤觸發(fā)信號從而舍棄這次的按鍵識別的過程。從而提高系統(tǒng)的可靠性。由于要求按鍵每按下一次,命令就被執(zhí)行一次,至下一次再次按下的時候,然后再執(zhí)行一次命令,因此,從按鍵被識別出來之后,我們就能夠執(zhí)行這次的命令,所以要能夠有一個等待釋放的過程,顯然是釋放的過程,使其恢復成高電平狀態(tài)。 按鍵軟件仿抖動控制程序如下: void delay(uchar z) { uchar x,y。 for(x=z。x0。x) for(y=110。y0。y)。 void main() { if(up_key==0) { delay(10)。 if(up_key==0) temp=temp+10。 while(!up_key)。 delay(10)。 while(!up_key)。 } else if(down_key==0) { delay(10)。 if(down_key==0) temp。 while(!down_key)。 delay(10)。 while(!down_key)。 } 攀枝花學院本科畢業(yè)設計(論文) 4 軟件設計 28 LED 顯示程序的設計 將得到的結果,能夠用 LED 數(shù)碼管顯示出來,給人以直觀的了解當前系統(tǒng)的狀態(tài),因此數(shù)碼管要顯示當前的系統(tǒng)的值 ,就應該要 有一定的端口往數(shù)碼管送入相應的數(shù)據(jù),還需要有點亮數(shù)碼管的信號,因此我們要將 0到 9這十個數(shù)字的碼字定義成為一個數(shù)組,通過檢驗輸出數(shù)據(jù)的斷碼表,就能夠顯示相應的數(shù)字。 表 LED 字碼型 顯示字符 共陽極字型碼 共陰極字型碼 顯示字符 共陽極字型碼 共陰極字型碼 0 3FH C0H 5 6DH 92H 1 06H F9H 6 7DH 82H 2 5BH A4H 7 07H F8H 3 4FH B0H 8 7FH 80H 4 66H 99H 9 6FH 90H 由于在硬件的電路中,是將 P0 口與數(shù)碼 管的段碼位相連,位選信號 P2 口與數(shù)碼管亮滅有關,掌握著是哪個數(shù)碼管亮,接下來程序就要定義相關端口: ○ 1 定義字位與字型口 define led_dm_port P0 //定義數(shù)碼管段碼的控制腳 define led_wm_port P2 //定義數(shù)碼管位碼的控制腳 ○ 2 定義編碼表(數(shù)字 0~ 9) codedu_char[]={0xf9,0xc0,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}。 ○ 3 顯示:得到字型和字位口的地址后,向不同的字位送數(shù)據(jù),進行顯示。 ○ 4 動態(tài)掃描:由于使用動態(tài)顯示法,在 LED 顯示程序中,需要不停地進行掃描字位口,從而實現(xiàn)不同字位的數(shù)據(jù)的動態(tài)掃描結果。 數(shù)碼管顯示主程序 void delay_1ms(uchar z) { uchar x,y。 for(x=z。x0。x) for(y=110。y0。y)。 } main() { uint temp_buff。 攀枝花學院本科畢業(yè)設計(論文)
點擊復制文檔內容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1