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

正文內(nèi)容

基于單片機的太陽能熱水器控制裝置設(shè)計-精品-資料下載頁

2024-12-07 09:24本頁面

【導(dǎo)讀】溫度傳感器檢測當前水的溫度,由于是數(shù)字信號就直接送入單片機AT89S52內(nèi),通過單片機的處理在LED數(shù)碼管上顯示當前的溫度值。另外一路是在水箱中的。按鍵用來設(shè)定想要控制的溫度值,單片機在內(nèi)部通過比較。會自動斷開電磁開關(guān),停止上水。溫度和水位值在時時檢測,達到控制目的。

  

【正文】 CS 置 0 才能對 ADC0832 進行配置和啟動轉(zhuǎn)換。 CLK 為 ADC0832 的時鐘輸入端。CS 在整個轉(zhuǎn)換過程中都必須為低,當 CS 為低時,在數(shù)據(jù)輸入端 DI(數(shù)據(jù)輸入端)加一個高電平(這個高電平是算在送到 DI 的一位之中,那么后面就只要再送兩位。這個高電平是作為起始標志),接著在 CLK 上加一個時鐘, DI 上的邏輯 1 就會使 ADC0832 的 DI 脫離高阻態(tài),然后通道配置數(shù)據(jù) 伴 隨著時鐘通過 DI端移入多路器,當最后一位數(shù)據(jù)移入多路器時(數(shù)據(jù)是三位,前一位標志輸入開始,后兩位是用來作通道設(shè)置和選擇), DI 變 為高阻態(tài),在這以前 DO(數(shù)據(jù)輸出端)都為高阻態(tài)(就是 CS 從高跳到低到現(xiàn)在)。在經(jīng)過一個時鐘(是指在最后一個數(shù)據(jù)從 DI 移入后,還要再經(jīng)過一個時鐘 , 當最后一位數(shù)據(jù)移入 DI,需要再加一個時鐘使 DO 脫離高阻態(tài)), DO 脫離高阻 狀 態(tài)并啟動轉(zhuǎn)換。接著從處理器接收時鐘信號,每經(jīng)過一個時鐘,轉(zhuǎn)換后的數(shù)據(jù)就會從高位到低位逐次從 DO移出,經(jīng)過 8 個時鐘后,數(shù)據(jù)又以從低位到高位的形式從 DO 移出(也是每個時鐘移一位)。當最后一位數(shù)據(jù)移出時轉(zhuǎn)換完成。當 CS 從低變?yōu)楦邥r, ADC0832內(nèi)部所有寄存器清零。如想要進行下一次轉(zhuǎn)換, CS 必須做一 個從高到低的跳變,后跟著地此配置數(shù) 據(jù)重復(fù)上面的過程。 DS18B20 通道選擇 40 27 多路轉(zhuǎn)換器地址 通道 SGL/DIF ODD/SIGN 0 1 0 0 + 0 1 + 1 0 + 1 1 + 根據(jù)上述 ADC0832 的相關(guān)轉(zhuǎn)換時序, 進行單片機和 ADC0832 的連接時,因為 DI 和 DO 并不是同時使用,所以 DI 和 DO 可以共用單片機的一條 I/O 線,再加上一條時鐘線和一條片選線就可以實現(xiàn)單片機和 ADC0832 的連接, 流程圖如下所示 開 始結(jié) 束使 能 芯 片產(chǎn) 生 時 鐘 信 號輸 入 通 道 控 制 字讀 取 兩 字 節(jié) 數(shù) 據(jù)字 節(jié) 數(shù) 據(jù) 校 驗數(shù) 值 送 入 指 定 寄 存 器 ADC0832 工作流程圖 以下是 ADC0832 進行工作的驅(qū)動程序: unsigned int Adc0832(unsigned char channel) { uchar i=0。 uchar j。 uint dat=0。 40 28 uchar ndat=0。 if(channel==0)channel=2。 if(channel==1)channel=3。 ADDI=1。 _nop_()。 _nop_()。 ADCS=0。//拉低 CS 端 _nop_()。 _nop_()。 ADCLK=1。//拉高 CLK 端 _nop_()。 _nop_()。 ADCLK=0。//拉低 CLK 端 ,形成下降沿 1 _nop_()。 _nop_()。 ADCLK=1。//拉高 CLK 端 ADDI=channelamp。0x1。 _nop_()。 _nop_()。 ADCLK=0。//拉低 CLK 端 ,形成下降沿 2 _nop_()。 _nop_()。 ADCLK=1。//拉高 CLK 端 ADDI=(channel1)amp。0x1。 _nop_()。 _nop_()。 ADCLK=0。//拉低 CLK 端 ,形成下降沿 3 ADDI=1。//控制命令結(jié)束 _nop_()。 _nop_()。 dat=0。 for(i=0。i8。i++) { dat|=ADDO。//收數(shù)據(jù) 40 29 ADCLK=1。 _nop_()。 _nop_()。 ADCLK=0。//形成一次時鐘脈沖 _nop_()。 _nop_()。 dat=1。 if(i==7)dat|=ADDO。 } for(i=0。i8。i++) { j=0。 j=j|ADDO。//收數(shù)據(jù) ADCLK=1。 _nop_()。 _nop_()。 ADCLK=0。//形成一次時鐘脈沖 _nop_()。 _nop_()。 j=j7。 ndat=ndat|j。 if(i7)ndat=1。 } ADCS=1。//拉低 CS 端 ADCLK=0。//拉低 CLK 端 ADDO=1。//拉高數(shù)據(jù)端 ,回到初始狀態(tài) dat=8。 dat|=ndat。 return(dat)。 //返回數(shù)據(jù) } 按鍵控制程序如下: void delay(uchar z) //延時程序 { 40 30 uchar x,y。 for(x=z。x0。x) for(y=110。y0。y)。 void main() { if(up_key==0) //有按鍵按下嗎 { delay(10)。 //延時 10ms if(up_key==0) //確認有按鍵按下嗎 temp=temp+10。 //執(zhí)行操作 while(!up_key)。 //按鍵放開了嗎 delay(10)。 //延時 10ms while(!up_key)。 //確認按鍵放開 } else if(down_key==0) { delay(10)。 if(down_key==0) temp。 while(!down_key)。 delay(10)。 while(!down_key)。 } 按鍵控制程序設(shè)計 按鍵是外部命令的體現(xiàn), 一個按鍵從沒有按下到按下以及釋放是一個完整的過程,也就是說,當我們按下一個按鍵時,總希望某個命令只執(zhí)行一次,而在按鍵按下的過程中,不要有干擾進來,因為,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這并不是我們所想要的。因此在按鍵按下的時候,要把我們手上的干擾信號以及按鍵的機械接觸 等 干擾信號濾 除掉,一般情況下,我們可以采用電容來濾除掉這些干擾信號,但實際上,會增加硬件成本及硬件電路的體積,這是我們不希望,總得有個辦法解決這個問題,因此我們可以采用軟件濾波的方法去除這些干擾信號,一般情況下,一個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之后就基本上進入了穩(wěn)定的狀態(tài)。具體的一個按 40 31 鍵從按下到釋放的全過程的信號圖如 下 圖所示: 按鍵理想波形 圖 按鍵實際的波形 從圖中可以看出, 由于按鍵的機械特性,當按鍵閉合時,并不能馬上保存良好的接觸,而是來回彈 跳。這個時間很短,我們的手根本感覺不出來。但是對于一秒鐘執(zhí)行百萬條指令的單片機而言,這個時間是相當?shù)拈L了。那么在這段抖動的時間內(nèi),單片機可能讀到多次高低電平的變化。如果不加任何處理的話,就會認為已經(jīng)按下,或者松開很多次了。而事實上,我們的手一直按在按鍵上,并沒有重復(fù)按動很多次。要想能夠正確的判斷按鍵是否按下就要避開這段抖動的時間。 我們在程序設(shè)計時,從按鍵被識別按下之后,延時 10ms 以上,從而避開了干擾信號區(qū)域,我們再來檢測一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時肯定輸出為低電平,若這時檢測到的是高 電平,證明剛才是由于干擾信號引起的誤觸發(fā), CPU 就認為是誤觸發(fā)信號而舍棄這次的按鍵識別過程。從而提高了系統(tǒng)的可靠性 。 由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時候,再執(zhí)行一次命令,因此從按鍵被識別出來之后,我們就可以執(zhí)行這次的命令,所以要有一個等待按鍵釋放的過程,顯然釋放的過程,就是使其恢復(fù)成高電平狀態(tài)。 程序設(shè)計過程中按鍵識別過程的框圖如下圖所示: 40 32 延 時 1 0 m等 待 按 鍵 釋 放進 行 按 鍵 處 理有 鍵 按 下 嗎 ?真 的 有 鍵 按 下 嗎 ?延 時 1 0 m按 鍵 釋 放 了 嗎 ?按 鍵 真 的 釋 放 了 嗎 ?YYYYNNNN結(jié) 束 按鍵檢測框圖 LED 數(shù)碼管顯示程序設(shè)計 將所得到的結(jié)果用 LED 數(shù)碼管顯示出來,給 人直觀的了解當前系統(tǒng)的狀態(tài),數(shù)碼管要顯示當前系統(tǒng)的值 ,就要有一定的端口往數(shù)碼管送入數(shù)據(jù),還要有點亮數(shù)碼管的信號為,我們要將 0~ 9 這十個數(shù)字的碼字定義成一個數(shù)組,通過檢驗輸出的數(shù)據(jù)查斷碼表,就能顯示相應(yīng)的數(shù)字。 7 段 LED 的字型碼 40 33 顯示字符 共陽極字型碼 共陰極字型碼 顯示字符 共陽極字型碼 共陰極字型碼 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ù)碼管亮滅有關(guān),掌握著是哪個數(shù)碼管亮,接下來程序就要定義相關(guān)端口: ( 1)定義字位和字型口 define sled_dm_port P0 /*定義數(shù)碼管段碼的控制腳 */ define sled_wm_port P2 /*定義數(shù)碼管位碼的控制腳 */ ( 2)定義字型編碼表(數(shù)字 0~ 9) uchar code du_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}。 ( 3)顯示:得到字型和字位口的地址后,向不同的字位送數(shù)據(jù),進行顯示。 ( 4)動態(tài)掃描:由于使用動態(tài)顯示法,在 LED 顯示程序中,需要不停地進行掃描字位口,從而實現(xiàn)不同字位的數(shù)據(jù)的動態(tài)掃描結(jié)果。 開 始顯 示 緩 沖 區(qū) 初 始 化指 定 字 型 口查 表 得 到 字 型 碼送 指 定 字 位 碼延 時 1 0 m s LED 顯示程序流程圖 ( 5)數(shù)碼管顯示主程序 /*1MS 為單位的延時程序 */ void delay_1ms(uchar z) { uchar x,y。 for(x=z。x0。x) 40 34 for(y=110。y0。y)。 } main() { uint temp_buff。 uchar i。 sled_dm_port=0。 while(1) { temp_buff=ReadTemperature()。 /*讀取當前溫度 */ sled_data[5] = du_char[temp_buff/100]。 sled_data[6] = du_char[temp_buff%100/10]。 sled_data[7] = du_char[temp_buff%10]。 for(i=0。i8。i++) { sled_wm_port = 0x00。 /*關(guān)閉顯示 */ sled_dm_port = sled_data[i]。 /*輸出段碼數(shù)據(jù)到數(shù)碼管 */ if(i==6) sled_dm_port = sled_dm_portamp。0x7f。 /*顯示小數(shù)點 */ sled_wm_port = we_table[i]。 /*輸出位碼數(shù)據(jù)到數(shù)碼管
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1