版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于AT89C52的智能溫控儀設(shè)計(jì)</p><p> 基于AT89C52的智能溫控儀設(shè)計(jì)</p><p><b> 一、設(shè)計(jì)任務(wù)及要求</b></p><p> 1. 設(shè)計(jì)題目:基于AT89C52的智能溫控儀設(shè)計(jì)
2、 </p><p><b> 2. 設(shè)計(jì)要求:</b></p><p> (1)采用Pt1000溫度傳感器,測(cè)溫范圍0--100℃;</p><p> ?。?)系統(tǒng)可設(shè)定溫度值;</p><p> (3)設(shè)定溫度值與測(cè)量溫度值可實(shí)時(shí)顯示;</p><p> (4)控溫精度:
3、±0.5℃。</p><p><b> 3. 設(shè)計(jì)任務(wù)</b></p><p><b> (1)擬定電路。</b></p><p> ?。?)編制軟件流程圖及給出系統(tǒng)軟件主要部分的源程序</p><p><b> 二、設(shè)計(jì)背景簡(jiǎn)介</b></p>
4、<p> 溫度是科學(xué)技術(shù)中最基本的物理量之一,物理化學(xué)生物等學(xué)科都離不開(kāi)溫度。在工業(yè)生產(chǎn)和實(shí)驗(yàn)研究中,像電力、化工、石油、冶金、航空航天、機(jī)械制造、糧食存儲(chǔ)、酒類(lèi)生產(chǎn)等領(lǐng)域內(nèi)溫度往往是表征對(duì)象和過(guò)程狀態(tài)的最重要的參數(shù)之一。</p><p> 本文介紹采用測(cè)溫范圍寬、精度高的鉑熱電阻進(jìn)行溫度系統(tǒng)的測(cè)量和控制。</p><p> 溫度控制系統(tǒng)具有非線性、時(shí)滯以及不確定性。單純依
5、靠傳統(tǒng)的控制方式或現(xiàn)代控制方式都很難以達(dá)到高質(zhì)量的控制效果。而智能控制中的模糊控制通過(guò)從專(zhuān)家們積累的經(jīng)驗(yàn)中總結(jié)的控制規(guī)則,對(duì)溫度進(jìn)行控制,可以有效地解決溫度控制系統(tǒng)的非線性、時(shí)滯以及不確定性。本節(jié)采用模糊控制對(duì)溫度進(jìn)行控制。</p><p><b> 三、系統(tǒng)總體框圖</b></p><p> 框圖說(shuō)明:本系統(tǒng)共用到兩片AT89C52單片機(jī),即單片機(jī)A和單片機(jī)B,
6、其中A機(jī)用于現(xiàn)場(chǎng)溫度采集和顯示,B機(jī)用于控制。A、B機(jī)通過(guò)max232硬件連接串口實(shí)現(xiàn)全雙工通信。A機(jī)采用中斷方式將采集的溫度值不停的發(fā)往B機(jī),B機(jī)采用查詢(xún)方式實(shí)時(shí)接受A機(jī)發(fā)送的溫度數(shù)據(jù)并將處理后的數(shù)據(jù)送往液晶顯示。B機(jī)通過(guò)按鍵輸入溫度設(shè)定值,并可將設(shè)定溫度值通過(guò)按鍵選擇發(fā)送模式發(fā)送到B機(jī),經(jīng)A機(jī)簡(jiǎn)單處理送數(shù)碼管顯示。</p><p> A機(jī)將接收到的溫度值與當(dāng)前溫度值比較,將比較值作為控制加熱絲和風(fēng)扇<
7、/p><p> 圖1 系統(tǒng)總體框圖</p><p> 以及PWM占空比的依據(jù),A機(jī)通過(guò)兩個(gè)四位一體的數(shù)碼管現(xiàn)場(chǎng)顯示當(dāng)前溫度和設(shè)定溫度,因此可以在現(xiàn)場(chǎng)可以動(dòng)態(tài)觀察到當(dāng)前溫度變化和當(dāng)前溫度與設(shè)定溫度之間的差值的大小。由于需要顯示日期、時(shí)間、溫度等眾多信息B機(jī)采用液晶顯示。B機(jī)的日期、時(shí)間等信息由實(shí)時(shí)時(shí)鐘芯片DS12887提供,因?yàn)镈S12887在斷電情況下可長(zhǎng)時(shí)間運(yùn)行,且時(shí)間誤差極小所以省去
8、時(shí)間調(diào)整環(huán)節(jié)。B機(jī)的存儲(chǔ)電路采用24C02存儲(chǔ)芯片,每次存儲(chǔ)包括日期、時(shí)間和A機(jī)發(fā)送來(lái)的溫度值在內(nèi)的共5個(gè)字節(jié)的信息,每隔一分鐘存儲(chǔ)一次信息,存儲(chǔ)芯片寫(xiě)滿(mǎn)以后地址指針指向頭地址,覆蓋掉最初的溫度值,由于24C02最多包含256個(gè)字節(jié),因此最多可以保留51次存儲(chǔ)記錄,即最多能記錄50分鐘內(nèi)的溫度值。所以在查詢(xún)模式下最多可以查詢(xún)50分鐘以?xún)?nèi)的溫度。</p><p><b> 四、電路設(shè)計(jì)</b>
9、;</p><p> 1.電路設(shè)計(jì)整體思路</p><p> 在溫度測(cè)量控制系統(tǒng)中,實(shí)際溫度值由鉑電阻恒流工作調(diào)理電路進(jìn)行測(cè)量。為了克服鉑電阻的非線性特點(diǎn),在信號(hào)調(diào)理電路加入負(fù)反饋非線性校正網(wǎng)絡(luò);調(diào)理電路的輸出電壓經(jīng)8 通道、多量程雙極性輸入、串行輸出、逐次逼近型12 bit AD 轉(zhuǎn)換器max1270轉(zhuǎn)換后送入單片機(jī)AT89C52;對(duì)采樣數(shù)據(jù)進(jìn)行濾波及標(biāo)度變換處理后。由高集成化的串行
10、輸入/輸出的共陰極LED驅(qū)動(dòng)顯示器max7219連接兩個(gè)四位一體數(shù)碼管顯示。輸入的設(shè)定值則有4位的獨(dú)立式鍵盤(pán)電路進(jìn)行調(diào)整,可分別對(duì)設(shè)定值的十位和個(gè)位進(jìn)行加一減一操作,送入單片機(jī)AT89c52后,有另一4位七段數(shù)碼管顯示。</p><p> 本系統(tǒng)的模糊控制由單片機(jī)AT89C52的程序來(lái)實(shí)現(xiàn)。首先有溫度采樣值與設(shè)定值之差求出溫度誤差,進(jìn)一步求出誤差變化率,經(jīng)量化及限幅程序處理,得到誤差語(yǔ)言變量E和誤差變化率語(yǔ)言變
11、量Ec,直接查詢(xún)模糊控制表就可獲的控制量U,然后有定時(shí)子程序處理,發(fā)出控制信號(hào),控制加熱片及風(fēng)扇工作。加熱片及風(fēng)扇的控制電路采用晶體管驅(qū)動(dòng)的直流電磁繼電器的通斷時(shí)間,從而達(dá)到控制溫度的目的。若系統(tǒng)溫度偏高,則控制風(fēng)扇工作,進(jìn)行降溫;若溫度未達(dá)到設(shè)定值,則輸出溫度控制信號(hào),控制加熱電路,進(jìn)行加熱。從而實(shí)現(xiàn)自動(dòng)控制溫度的目的。</p><p><b> 2.基本硬件組成</b></p&g
12、t;<p> ?。?)鉑電阻測(cè)溫調(diào)理電路</p><p> 本系統(tǒng)采用恒流工作調(diào)理電路,鉑電阻選用標(biāo)稱(chēng)值為1000歐的PT1000作為溫度傳感器,其物理、化學(xué)性能在高溫和氧化性介質(zhì)中非常穩(wěn)定,其靈敏度遠(yuǎn)高于PT100,在-259.34℃~630.74℃溫域內(nèi)可作為溫度標(biāo)準(zhǔn)。A1、A2和A3采用低溫漂移運(yùn)放OP07C,由于有電流流經(jīng)鉑電阻傳感器,所以當(dāng)溫度為0℃時(shí),載波電阻傳感器上有壓降,這個(gè)電壓為
13、鉑電阻傳感器的偏置電壓,是運(yùn)放A1輸出電壓的一部分,是恒流工作調(diào)理電路的輸出實(shí)際不為零。所以需要對(duì)這個(gè)偏置電壓調(diào)零,圖中R1為調(diào)零電阻,其作用是當(dāng)溫度為零度時(shí),將恒流工作調(diào)理電路的輸出調(diào)為零。又因?yàn)殂K電阻的電阻特性為非線性,鉑電阻在0~100度變化范圍內(nèi)的非線性誤差為0.4%(0.4℃),就有可能對(duì)A/D量化和數(shù)碼管顯示造成影響,所以加入了線性化電路,圖中運(yùn)放AR3、及R5、R6和R7一起構(gòu)成了負(fù)反饋非線性化校正化網(wǎng)絡(luò),R3用于調(diào)整運(yùn)放
14、A2的增益。</p><p> 電路的調(diào)整方法如下(用精密可調(diào)電阻代替鉑電阻進(jìn)行調(diào)整):</p><p> ?、?將精密可調(diào)電阻調(diào)整到相當(dāng)于0℃的阻值(1000歐),用R1調(diào)零。</p><p> ?、?將精密可調(diào)電阻調(diào)整到相當(dāng)于50℃的阻值(1193.971歐),用R3調(diào)整增益。</p><p> ③ 將精密可調(diào)電阻調(diào)整到相當(dāng)于100℃
15、的阻值(1385.055歐),用R6或R7調(diào)整線性。</p><p> ④ 反復(fù)調(diào)整多次,在0~100℃溫度范圍內(nèi)適宜為止。</p><p> 圖2 鉑電阻恒流工作調(diào)理電路</p><p> ?。?)A/D轉(zhuǎn)換電路</p><p> 目前A/D 轉(zhuǎn)換器的種類(lèi)繁多,從數(shù)據(jù)輸出形式上可分為串行輸出與并行輸出兩大類(lèi)。其中串行輸出AD轉(zhuǎn)換器
16、因其硬件接口簡(jiǎn)單而得到廣泛應(yīng)用。另外,從可接受的輸入信號(hào)極性上看,A/D 轉(zhuǎn)換器又可分為單極性輸入和雙極性輸入。在很多的數(shù)據(jù)采集場(chǎng)合常常面對(duì)極性可變的模擬信號(hào)。當(dāng)然可將待轉(zhuǎn)換信號(hào)進(jìn)行電位移動(dòng)以將其轉(zhuǎn)化為單一極性,但如此便增加了電路的復(fù)雜性。串行輸出、雙極性輸入A/D 轉(zhuǎn)換器MAX1270不增加任何硬件電路可實(shí)現(xiàn)對(duì)雙極性模擬信號(hào)A/D 轉(zhuǎn)換。MAX1270 是8 通道、多量程雙極性輸入、串行輸出、逐次逼近型12 bit AD 轉(zhuǎn)換器。其封
17、裝形式有24 腳Narrow PDIP 和28 腳SSOP 兩種。PDIP 封裝的引腳排列如圖4所示。各有用引腳功能如下:1-VDD,+5V 電源輸入端;2、4-DGND,數(shù)字地;5-SCLK,串行時(shí)鐘輸入端;6-/CS,片選輸入端,低電平有效;7-DIN,串行數(shù)據(jù)輸入,即AD 轉(zhuǎn)換控制字輸入端;8-SSTRB,串行數(shù)據(jù)輸出選通輸出端;10-DOUT,串行數(shù)據(jù)輸出端;11-/SHDN,掉電模式控制輸入端,</p><
18、p> 圖3 MAX1270 引腳排列</p><p> 低電平有效;12-AGND,模擬地;13~20-CH0~CH7,模擬信號(hào)輸入端;21-REFADJ,參考電壓輸出/外部調(diào)節(jié)輸入;23-REF,參考電壓緩沖輸出/ADC 的參考輸入。</p><p> ?、?MAX1270 的控制字</p><p> MAX1270 的8 位控制字及其功能如表1 所
19、示。最高位START 為起始位(高電平),標(biāo)志控制字的開(kāi)始。/CS 為低電平期間,控制字在時(shí)鐘脈沖SCLK 作用下先高位后低位通過(guò)DIN 端輸入。</p><p><b> 表1 控制字格式</b></p><p> ?、?時(shí)鐘模式與轉(zhuǎn)換速率</p><p> PD1PD0 為掉電/時(shí)鐘模式選擇位。PD1PD0=10、11 時(shí)為省電模式。正
20、常工作時(shí)MAX1270有外部時(shí)鐘與內(nèi)部時(shí)鐘兩種工作模式。PD1PD0=01 時(shí)為外部時(shí)鐘模式,串行數(shù)據(jù)的移入、移出以及數(shù)據(jù)采集、轉(zhuǎn)換都由SLCK 端的輸入脈沖控制。PD1PD0=00 時(shí)為內(nèi)部時(shí)鐘模式,</p><p> 數(shù)據(jù)轉(zhuǎn)換時(shí)鐘由芯片自己產(chǎn)生,減輕了微處理器的負(fù)擔(dān),使得轉(zhuǎn)換后的數(shù)據(jù)可在微處理器方便的任何時(shí)刻讀取,利于提高微處理器的工作效率。外部時(shí)鐘模式分為25SCLK/s(每個(gè)數(shù)據(jù)轉(zhuǎn)換需要25 個(gè)時(shí)鐘周期
21、)和18 SCLK/s 兩種方式,后者轉(zhuǎn)換速率稍快的原因是在全部數(shù)</p><p> 據(jù)轉(zhuǎn)換期間/CS 始終維持有效電平。內(nèi)部時(shí)鐘模式也有20、16、13 SCLK/s 等不同轉(zhuǎn)換方式。不同的時(shí)鐘模式和轉(zhuǎn)換方式,其轉(zhuǎn)換速率不同。在外部時(shí)鐘模式、SCLK 速率為2MHz、18SCLK/s 時(shí)MAX1270 轉(zhuǎn)換速率可達(dá)110ksps。</p><p> ?、?通道選擇與輸入范圍</p
22、><p> SEL2~SEL0 為通道選擇位,000~111 分別選擇輸入通道CH0~CH7。RNG~BIP 為輸入范圍選擇位,MAX1270 有4 種輸入范圍RNG~BIP 置00 時(shí) 0~5V 單極性輸入, 置01 時(shí)0~+10V 單極性輸入; 置10 時(shí) -5~+5V 雙極性輸入;置11 時(shí)-10~+10V 雙極性輸入。</p><p> ?、軅鬏敽瘮?shù)與輸出數(shù)據(jù)格式</p>
23、<p> 對(duì)單極性輸入,1LSB=FS/4096,輸出數(shù)據(jù)為12 位二進(jìn)制碼。對(duì)雙極性輸入,1LSB=FS/2048,輸出數(shù)據(jù)為12 位二進(jìn)制補(bǔ)碼。</p><p><b> ?、輩⒖茧妷?lt;/b></p><p> MAX1270 可使用芯片內(nèi)的4.096V 參考電壓,也可使用外部參考。。圖是使用片外參考和片內(nèi)參考時(shí)相關(guān)管腳的接法。</p>
24、;<p> 圖4 管腳連接圖 (a) 使用片內(nèi)參考電壓 (b)、(c)使用片外參考電壓</p><p> 圖5 AD轉(zhuǎn)換電路</p><p> (3)7219顯示電路</p><p> ① MAX721 9功能和設(shè)置簡(jiǎn)介</p><p> MAX7219是串行輸出共陰極顯示性能非常卓越的驅(qū)動(dòng)芯片。其接口采用流行的
25、同步串行外設(shè)接口SPI,可與任何一種單片機(jī)方便接口,并可同時(shí)驅(qū)動(dòng)8位LED,還具有級(jí)聯(lián)功能可控制更多的LED。 MAX7219為24引腳芯片,除與LED顯示相連的線外,與微控制器只需3根連線相接:芯片端管腳分別為CLK. DIN.LOAD,其中CLK為時(shí)鐘輸入端,DIN為數(shù)據(jù)輸入端,LOAD為鎖存信號(hào)。其工作時(shí)序?yàn)椋簳r(shí)鐘的上升沿MAX7219把DIN引腳數(shù)據(jù)移入內(nèi)部移位寄存器,在時(shí)鐘下降沿MAX7219把數(shù)據(jù)移向DOUT端, 而LOAD
26、的上升沿則鎖存最后移入的16位串行數(shù)據(jù)。對(duì)MAX7219的控制操作很方便其內(nèi)部具有15×8位RAM 功能控制寄存器,可方便尋址,對(duì)每位數(shù)字可單獨(dú)控制、刷新,不需要重寫(xiě)整個(gè)顯示器。顯示亮度可數(shù)字控制。MAX7219的這些功能,使系統(tǒng)編程簡(jiǎn)單方便,同時(shí)節(jié)省I/O 口。</p><p> MAX7219的控制寄存器分別為:不工作方式寄存器、譯碼方式寄存器、亮度控制寄存器、掃描個(gè)數(shù)寄存器、關(guān)閉寄存器.顯示測(cè)試
27、寄存器.寄存器的操作格式為2字節(jié)的串行數(shù)據(jù),第一個(gè)字節(jié)為寄存器地址,第二個(gè)字節(jié)為控制命令或待顯示數(shù)據(jù)。寄存器的地址分配及功能如下所示:</p><p> ?、?不工作寄存器(0x00):用于MAX7219級(jí)聯(lián)控制。</p><p> ?、?位寄存器(0x01·0x08):8位LED待顯示內(nèi)容。</p><p> ?、?譯碼方式寄存器(OxOg):決定譯碼方
28、式,分B碼和不譯碼兩種。</p><p> ㈣ 亮度控制寄存器(0x0A):LED段電流控制.</p><p> ?、?掃描個(gè)數(shù)寄存器(0x0B):決定顯示多少個(gè)LED。</p><p> ?、?關(guān)閉寄存器(0xOC):決定正常工作方式或關(guān)閉LED顯示。</p><p> ?、?顯示測(cè)試寄存器(0x0D):決定正常工作方式或顯示測(cè)試.<
29、;/p><p> 引腳功能和功能框圖: MAX1279 引腳排列如圖7 所示</p><p> 圖6 MAX7219引腳排列圖</p><p> 引腳功能如下: ?、?DIN 為串行數(shù)據(jù)輸入端。當(dāng)CLK為上升沿時(shí),數(shù)據(jù)被載入16 b內(nèi)部移 位寄存器?! 、?CLK 為串行時(shí)鐘輸入端。其最大工作頻率可達(dá)10 MHz?! 、?LOAD 為片選端,當(dāng)L
30、OAD為低電平時(shí),芯片接收來(lái)自DIN的數(shù)據(jù),接收完畢,LOAD回到高電平時(shí),接收的數(shù)據(jù)將被鎖定。</p><p> 圖7 DIN,CLK和LOAD的工作時(shí)序。 ?、?DIG0~DIG7 為吸收顯示器共陰極電流的位驅(qū)動(dòng)線。其最大值可達(dá)500 mA,關(guān)閉狀態(tài)時(shí),輸出+VCC?! 、?SEGA~SEGG,DP 為驅(qū)動(dòng)顯示器7段及小數(shù)點(diǎn)的輸出電流,一般為40 mA左右,可軟件調(diào)整,關(guān)閉狀態(tài)時(shí),接入GND。
31、 ㈥ DOUT 為串行數(shù)據(jù)輸出端,通常直接接入下一片MAX7219的DIN端。</p><p> 圖8 MAX7219 的功能框圖</p><p> 串行輸入數(shù)據(jù)在時(shí)鐘上升沿時(shí)移入內(nèi)部的16 位移位寄存器, 在裝載的上升沿時(shí)數(shù)據(jù)被鎖存在每一位或寄存器中。裝載信號(hào)必須在第16 個(gè)時(shí)鐘上升沿發(fā)生時(shí)或之后達(dá)到高電平, 但要在下一個(gè)時(shí)鐘的上升沿和數(shù)據(jù)丟失之前到達(dá)。串行輸入數(shù)據(jù)通過(guò)移
32、位寄存器傳輸, 在以后數(shù)據(jù)輸出的16. 5 個(gè)時(shí)鐘循環(huán)出現(xiàn),數(shù)據(jù)在時(shí)鐘的下降沿記錄下來(lái)。數(shù)據(jù)各位記錄為D0~D15 (如表2 所列) , D8~D11 為移位寄存器地址, D0~D7 為數(shù)據(jù), D12~D15 是無(wú)關(guān)位。第一位接收到的位是最高位D15。D7 為數(shù)據(jù)最高有效位,D0 為數(shù)據(jù)最低有效位。</p><p> 表2串行數(shù)據(jù)格式(16位)</p><p> MAX7219 控制字
33、</p><p> 表3 max7219寄存器地址控制字</p><p> MAX7219 有14 個(gè)可尋址的控制字寄存器(如表3) , 控制字寄存器由芯片的8 ×8 雙端口SRAM 識(shí)別,SRAM 直接尋址, 這樣單一的位能被更改或保留, 條件是電源電壓明顯大于2V ??刂谱旨拇嫫靼ㄗg碼模式、顯示強(qiáng)度、掃描限制(被掃描位的個(gè)數(shù)) 、關(guān)閉模式、顯示測(cè)試(點(diǎn)亮所有的L ED
34、) 。另外還有一個(gè)空操作寄存器, 該寄存器允許數(shù)據(jù)從DIN 直送DOU T , 在設(shè)備串接情況下, 不會(huì)改變顯示或影響任何控制寄存器。</p><p> 基于以上優(yōu)點(diǎn)MAX7219 已用于血氧監(jiān)護(hù)儀的脈搏強(qiáng)度柱狀圖顯示及血氧、脈率的L ED 顯示, 節(jié)省了許多鎖存器、譯碼器及驅(qū)動(dòng)器,大大提高了儀器顯示器部分的集成程度。 在很多嵌入式系統(tǒng)設(shè)計(jì)中,都要用到LED顯示驅(qū)動(dòng)芯片,MAXIM 公司生產(chǎn)的MAX7219串行
35、LED驅(qū)動(dòng)顯示器具有接口簡(jiǎn)單.占用資源少、控制靈活方便、LED級(jí)聯(lián)擴(kuò)展便利的優(yōu)點(diǎn),從而成為很多開(kāi)發(fā)人員的首選。</p><p> 圖9 max7219驅(qū)動(dòng)數(shù)碼管顯示電路</p><p> (4 ) Max232遠(yuǎn)程通信電路</p><p> AT89C52單片機(jī)內(nèi)部的串行接口是全雙工的,即它能同時(shí)發(fā)送和接收數(shù)據(jù)。發(fā)送緩沖器只能寫(xiě)入不能讀出,接收緩沖器只能讀
36、出不能寫(xiě)入。串行口還有接收緩沖作用,即從接收寄存器中讀出前一個(gè)已收到的字節(jié)之前就能開(kāi)始接收第二字節(jié)。</p><p> 兩個(gè)串行口數(shù)據(jù)緩沖器(實(shí)際上是兩個(gè)寄存器)通過(guò)特殊功能寄存器SBUF來(lái)訪問(wèn)。寫(xiě)入SBUF的數(shù)據(jù)儲(chǔ)存在發(fā)送緩沖器,用于串行發(fā)送;從SBUF讀出的數(shù)據(jù)來(lái)自接收緩沖器。兩個(gè)緩沖器共用一個(gè)地址99H(特殊功能寄存器SBUF的地址)。</p><p> ?、?串行口控制寄存器&l
37、t;/p><p> 控制串行口的寄存器有兩個(gè)特殊功能寄存器:即串行口控制寄存器SCON和電源控制器PCON。</p><p> ?、?PCON中的波特率選擇位</p><p> PCON是一個(gè)特殊功能寄存器(如下圖所示),沒(méi)有位尋址功能,字節(jié)地址為87H。</p><p> 其中D7位(SMOD)為波特率選擇位。其他均無(wú)意義。復(fù)位時(shí)的SMO
38、D值為0??捎肕OV PCON,#80H或MOV 87H,#80H指令使該位置1。當(dāng)SMOD=1時(shí),在串行口方式1,2或3情況下,波特率提高一倍。</p><p> 串行口控制寄存器SCON</p><p> 特殊功能寄存器SCON用于定義串行口的操作方式和控制它的某些功能。其字節(jié)地址為98H。寄存器中各位內(nèi)容如下:</p><p> D7 D6
39、 D5 D4 D3 D2 D1 D0</p><p> ?、?SM0,SM1 串行口操作方式選擇位,兩個(gè)選擇位對(duì)應(yīng)于四種狀態(tài),所以串行口能以四種方式工作,見(jiàn)表4。</p><p> ?、?SM2 允許方式2和3的多機(jī)通信使能位,在方式2或3中,若SM2置為1,且接收到的第9位數(shù)據(jù)(RB8)為0,則接收中斷標(biāo)志RI不會(huì)被激活,在方式1中,若SM2=1,則只有收
40、到有效的停止位時(shí)才會(huì)激活RI。在方式0中,SM2必須置為0。</p><p> ?、?REN 允許串行接收位。由軟件置位或清零,使允許接收或禁止接收。</p><p> ?、?TB8 是在方式2和3中要發(fā)送的第9位數(shù)據(jù)可按需要由軟件置位或復(fù)位。</p><p> ⅴ RB8 是方式2和3中已接收到的第9位數(shù)據(jù)。在方式1中,若SM2=0,RB8是接收到的停止位
41、。在方式0中,不使用RB8位。</p><p> ?、?TI 發(fā)送中斷標(biāo)志。在方式0中當(dāng)串行發(fā)送完第8位數(shù)據(jù)時(shí)由硬件置位;在其他方式中,在發(fā)送停止位的開(kāi)始時(shí)由硬件置位。當(dāng)TI=1時(shí),申請(qǐng)中斷,CPU響應(yīng)中斷后,發(fā)送下一幀數(shù)據(jù)。在任何方式中,該位都必須由軟件清0。</p><p> ?、?RI 接收中斷標(biāo)志。在方式0中串行接收到第8位結(jié)束時(shí)由硬件置位。在其他方式中,在接收到停止位的中間時(shí)
42、刻由硬件置位。RI=1時(shí)申請(qǐng)中斷,要求CPU取走數(shù)據(jù)。但在方式1中,當(dāng)SM2=1時(shí),若未接收到有效的停止位,則不會(huì)對(duì)RI置位。在任何工作方式中,該位都必須由軟件清0。在系統(tǒng)復(fù)位時(shí),SCON中的所有位都被清0。</p><p> ?、?串行接口工作方式</p><p> 串行口的操作方式由SM0,SM1定義,編碼和功能如表3所示,</p><p> 表4 串行口
43、方式選擇</p><p><b> 方式0</b></p><p> 串行口的工作方式0為移位寄存器輸入輸出方式,可外接移位寄存器,以擴(kuò)展I/O口,也可外接同步輸入輸出設(shè)備。方式0主要用于使用CMOS或TTL移位寄存器進(jìn)行I/O擴(kuò)展的場(chǎng)合。</p><p><b> 方式1</b></p><p&
44、gt; 串行口工作于方式1時(shí),被控制為波特率可變的8位異步通信接口。傳送一幀信息為10位,即1位起始位(0),8位數(shù)據(jù)位(低位在先)和1位停止位(1)。數(shù)據(jù)位由TXD發(fā)送,由RXD接收。波特率是可變的,取決于定時(shí)器1或2的溢出速率。</p><p><b> ?、?方式2和方式3</b></p><p> 串行工作于方式2和方式3時(shí),被自定義為9位的異步通信接口,
45、發(fā)送(通過(guò)TXD)和接收(通過(guò)RXD)一幀信息都是11位,1位起始位(0),8位數(shù)據(jù)位(低位在先,)1位可編程位(即第9位數(shù)據(jù))和1位停止位(1)。方式2和方式3的工作原理相似,唯一的差別是方式2的波特率是固定的。為fosc/32或fosc/64;方式3的波特率是可變的,利用定時(shí)器1或定時(shí)器2作波特率發(fā)生器。</p><p><b> ?、?波特率</b></p><p
46、> 串行口每秒鐘發(fā)送(或接收)的位數(shù)稱(chēng)為波特率。假設(shè)發(fā)送一位數(shù)據(jù)所需要的時(shí)間為T(mén),則波特率為。</p><p> 串行口以方式0工作時(shí),波特率固定為振蕩器頻率的1/12。為方式2時(shí)波特率為振蕩器頻率的1/64或1/32,它取決于特殊功能寄存器PCON中的SMOD位的狀態(tài)。如果SMOD=0(復(fù)位時(shí)SMOD=0)。波特率為振蕩器頻率的1/64,如果SMOD=1,波特率為振蕩器頻率的1/32。</p&g
47、t;<p> 方式1和3的波特率由定時(shí)器1的溢出率所決定。當(dāng)定時(shí)器1作波特率發(fā)生器時(shí),波特率由下式確定:</p><p> 波特率=(定時(shí)器1溢出率)/n</p><p> 式中:定時(shí)器1=溢出率+定時(shí)1的溢出次數(shù)/秒,n為32或16,取決于特殊功能寄存器PCON中的SMOD位的狀態(tài)。若SMOD=0,則n=32。若SMOD=1,則n=16。</p><
48、;p> 對(duì)于定時(shí)器的不同工作方式,得到的波特率的范圍是不一樣的,這主要由定時(shí)器1的計(jì)數(shù)位數(shù)不同所決定。對(duì)于非常低的波特率,應(yīng)選擇16位定時(shí)器方式(即TMOD.5=0,TMOD.4=1),并且在定時(shí)器1中斷程序中實(shí)現(xiàn)時(shí)間常數(shù)重新裝入。在這種情況下,應(yīng)該允許定時(shí)器1中斷 (IE.3=1)。</p><p> 圖10 max232遠(yuǎn)程通信電路</p><p> (5) Ds128
49、87實(shí)時(shí)時(shí)鐘電路</p><p> DS12887是一款集成了DS12R885裸片、32.768KHz石英晶體和一個(gè)可充電電池的時(shí)鐘器件。器件內(nèi)部含有14字節(jié)的實(shí)時(shí)時(shí)鐘/日歷、鬧鐘、控制/狀態(tài)寄存器以及114字節(jié)的非易失、電池備份的的靜態(tài)RAM。少于31天的月份,月末日期可自動(dòng)調(diào)整,其中包括閏年補(bǔ)償,該器件提供一個(gè)定時(shí)鬧鐘、三個(gè)可屏蔽中斷和一個(gè)通用中斷輸出,以及可編程方波輸出,DS12887可以工作于24小時(shí)或
50、帶AM/PM指示的12小時(shí)格式。一個(gè)精密的溫度補(bǔ)償電路用來(lái)監(jiān)視VCC的狀態(tài),如果檢測(cè)到主電源故障,該器件可以自動(dòng)切換到備用電源供電。備用電源支持可充電電池或超級(jí)電容,器件內(nèi)部包含一個(gè)集成的涓流充電器,涓流充電器始終有效,可通過(guò)多路復(fù)用的地址/數(shù)據(jù)總線訪問(wèn)ds12887,總線支持Intel和Motorola模式。</p><p> DS12887可作為IBM AT 計(jì)算機(jī)的時(shí)鐘和日歷與MC146818和DS128
51、7的管腳兼容在沒(méi)有外部電源的情況下可工作10年,可以計(jì)算到2100年前的秒、分、小時(shí)、星期、日期、月、年七種日歷信息并帶閏年補(bǔ)償,可以編程選擇用二進(jìn)制碼或BCD碼代表日歷和鬧鐘信息,可以切換到夏令時(shí)。 </p><p> 圖 11 實(shí)時(shí)時(shí)鐘電路</p><p> (6)24c02存儲(chǔ)與讀取電路</p><p> ?、?24C02功能概述</p>
52、<p> 24C02是一個(gè)2K 位串行CMOS E2PROM 內(nèi)部含有256 個(gè)字節(jié)的存儲(chǔ)空間。采用I2C總線接口可與400KHz I2C 總線兼容,工作電壓范圍為1.8 到6.0 V,采用低功耗CMOS 技術(shù)功耗很低。設(shè)有一個(gè)專(zhuān)門(mén)的寫(xiě)保護(hù)功能:當(dāng)WP為高電平時(shí)進(jìn)入寫(xiě)保護(hù)狀態(tài)??勺远〞r(shí)擦寫(xiě)周期,具有1,000,000 編程/擦除周期,數(shù)據(jù)可保存100 年。</p><p><b> ② 功
53、能描述</b></p><p> 24WC02支持I2C 總線數(shù)據(jù)傳送協(xié)議I2C總線協(xié)議規(guī)定:任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器,任何從總線接收數(shù)據(jù)的器件作為接收器件。數(shù)據(jù)傳送是由產(chǎn)生串行時(shí)鐘和所有起始停止信號(hào)的主器件控制的,主器件和從器件都可以作為發(fā)送器或接收器但由主器件控制傳送數(shù)據(jù)發(fā)送或接收的模式通過(guò)器件地址輸入端A0 A1 和A2 可以實(shí)現(xiàn)將最多8 個(gè)24WC01 和24WC02 器件4 個(gè)
54、242C04 器件,2 個(gè)24WC08 器件和1 個(gè)24WC16 器件連接到總線上。</p><p><b> ③ 管腳描述</b></p><p> ?、?SCL 串行時(shí)鐘</p><p> CAT24WC02串行時(shí)鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時(shí)鐘,是一個(gè)輸入管腳。</p><p> ㈡ SD
55、A 串行數(shù)據(jù)/地址</p><p> CAT24WC02雙向串行數(shù)據(jù)/地址管腳,用于器件所有數(shù)據(jù)的發(fā)送或接收。SDA是一個(gè)開(kāi)漏輸出管腳可與其它開(kāi)漏輸出或集電極開(kāi)路輸出進(jìn)行線與。</p><p> ?、?A0 A1 A2 器件地址輸入端</p><p> 這些輸入腳用于多個(gè)器件級(jí)聯(lián)時(shí)設(shè)置器件地址,當(dāng)這些腳懸空時(shí)默認(rèn)值為0(24WC01 除外)當(dāng)使用24WC02
56、時(shí)最大可級(jí)聯(lián)8個(gè)器件如果只有一個(gè)24WC02 被總線尋址這三個(gè)地址輸入腳A0 A1 A2 可懸空或連接到Vss; 如果只有一個(gè)24WC01 被總線尋址這三個(gè)地址輸入腳A0 A1 A2 必須連接到Vss;當(dāng)使用24WC04 時(shí)最多可連接4 個(gè)器件該器件僅使用A1 A2地址管腳A0管腳未用,可以連接到Vss 或懸空如果只有一個(gè)24WC04 被總線尋址A1和A2地址管腳可懸空或連接到Vss;當(dāng)使用24WC08 時(shí)最多可連接2 個(gè)器件且僅使用地
57、址管腳A2 A0 A1 管腳未用,可以連接到Vss 或懸空;如果只有一個(gè)24WC08 被總線尋址A2 管腳可懸空或連接到Vss;當(dāng)使用24WC16 時(shí)最多只可連接1個(gè)器件所有地址管腳A0 A1 A2 都未用管腳可以連接到Vss 或懸空。</p><p><b> ?、?WP 寫(xiě)保護(hù)</b></p><p> 如果WP管腳連接到Vcc所有的內(nèi)容都被寫(xiě)保護(hù)只能讀,當(dāng)W
58、P管腳連接到Vss 或懸空允許器件進(jìn)行正常的讀/寫(xiě)操作。</p><p> ④ I2C 總線協(xié)議</p><p> I2C 總線協(xié)議定義如下</p><p> ?、?只有在總線空閑時(shí)才允許啟動(dòng)數(shù)據(jù)傳送</p><p> ?、?在數(shù)據(jù)傳送過(guò)程中當(dāng)時(shí)鐘線為高電平時(shí)數(shù)據(jù)線必須保持穩(wěn)定狀態(tài)不允許有跳變時(shí)鐘線為高電平時(shí)數(shù)據(jù)線的任何電平變化將被
59、看作總線的起始或停止信號(hào)起始信號(hào)時(shí)鐘線保持高電平期間數(shù)據(jù)線電平從高到低的跳變作為I2C 總線的起始信號(hào)停止信號(hào)時(shí)鐘線保持高電平期間數(shù)據(jù)線電平從低到高的跳變作為I2C 總線的停止信號(hào)</p><p><b> 圖12 總線時(shí)序</b></p><p> 圖13 寫(xiě)周期時(shí)序</p><p> 圖14 起始/停止時(shí)序</p>
60、;<p><b> ?、缙骷ぶ?lt;/b></p><p> 主器件通過(guò)發(fā)送一個(gè)起始信號(hào)啟動(dòng)發(fā)送過(guò)程,然后發(fā)送它所要尋址的從器件的地址,8位從器件地址的高4 位固定為1010,接下來(lái)的3 位A2 A1 A0為器件的地址位用來(lái)定義哪個(gè)器件以及器件的哪個(gè)部分被主器件訪問(wèn)。上述8 個(gè)CAT24WC01/02 4 個(gè)CAT24WC04 2 CAT24WC08</p>&l
61、t;p> 1 個(gè)CAT24WC16 可單獨(dú)被系統(tǒng)尋址,從器件8 位地址的最低位作為讀寫(xiě)控制位,1表示對(duì)從器件進(jìn)行讀操作,0表示對(duì)從器件進(jìn)行寫(xiě)操作。在主器件發(fā)送起始信號(hào)和從器件地址字節(jié)后,CAT24WC02監(jiān)視總線并當(dāng)其地址與發(fā)送的從地址相符時(shí)響應(yīng)一個(gè)應(yīng)答信號(hào),通過(guò)SDA24WC02 再根據(jù)讀寫(xiě)控制位R/W 的狀態(tài)進(jìn)行讀或?qū)懖僮?lt;/p><p><b> ?、钁?yīng)答信號(hào)</b></
62、p><p> I2C總線數(shù)據(jù)傳送時(shí)每成功地傳送一個(gè)字節(jié)數(shù)據(jù)后接收器都必須產(chǎn)生一個(gè)應(yīng)答信號(hào),應(yīng)答的器件在第9 個(gè)時(shí)鐘周期時(shí)將SDA 線拉低表示其已收到一個(gè)8 位數(shù)據(jù)。CAT24WC01/02/04/08/16 在接收到起始信號(hào)和從器件地址之后響應(yīng)一個(gè)應(yīng)答信號(hào),如果器件已選擇了寫(xiě)操作則在每接收一個(gè)8位字節(jié)之后響應(yīng)一個(gè)應(yīng)答信號(hào)。當(dāng)CAT24WC01/02/04/08/16 工作于讀模式時(shí),在發(fā)送一個(gè)8 位數(shù)據(jù)后釋放SDA
63、線并監(jiān)視一個(gè)應(yīng)答</p><p> 信號(hào),一旦接收到應(yīng)答信號(hào)CAT24WC01/02/04/08/16 繼續(xù)發(fā)送數(shù)據(jù),如主器件沒(méi)有發(fā)送應(yīng)答信號(hào)器件停止傳送數(shù)據(jù)且等待一個(gè)停止信號(hào)。</p><p> 圖15 應(yīng)答時(shí)序</p><p> 圖16 從器件地址位</p><p><b> ⑤ 寫(xiě)操作</b>&
64、lt;/p><p><b> ?、?字節(jié)寫(xiě)</b></p><p> 在字節(jié)寫(xiě)模式下,主器件發(fā)送起始信號(hào)和從器件地址信息R/W 位置0 給從器件,在從器件送回應(yīng)答信號(hào)后,主器件發(fā)送兩個(gè)8 位地址字寫(xiě)入CAT24WC32/64 的地址指針,主器件在收到從器件的應(yīng)答信號(hào)后,再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。CAT24WC32/64 再次應(yīng)答,并在主器件產(chǎn)生停止信號(hào)后開(kāi)始內(nèi)部數(shù)
65、據(jù)的擦寫(xiě),在內(nèi)部擦寫(xiě)過(guò)程中, 24WC32/64不再應(yīng)答主器件的任何請(qǐng)求。</p><p><b> ㈡ 頁(yè)寫(xiě)</b></p><p> 在頁(yè)寫(xiě)模式下,單個(gè)寫(xiě)周期內(nèi)CAT24WC32/64 最多可以寫(xiě)入32 個(gè)字節(jié)數(shù)據(jù)。頁(yè)寫(xiě)操作的啟動(dòng)和字節(jié)寫(xiě)一樣,不同在于傳送了一字節(jié)數(shù)據(jù)后,主器件允許繼續(xù)發(fā)送31 個(gè)字節(jié)。每發(fā)送一個(gè)字節(jié)后,CAT24WC32/64 將響應(yīng)一個(gè)應(yīng)
66、答位,且內(nèi)部低5 位地址加1,高位地址保持不變。如果主器件在發(fā)送停止信號(hào)之前發(fā)送大于32 個(gè)字節(jié),地址計(jì)數(shù)器將自動(dòng)翻轉(zhuǎn),先前寫(xiě)入的數(shù)據(jù)被覆蓋。當(dāng)所有32 字節(jié)接收完畢,主器件發(fā)送停止信號(hào),內(nèi)部編程周期開(kāi)始。此時(shí)所有接收到的數(shù)據(jù)在單個(gè)寫(xiě)周期內(nèi)寫(xiě)入CAT24WC32/64。</p><p><b> ?、?讀操作</b></p><p> CAT24WC32/64 讀
67、操作的初始化方式和寫(xiě)操作時(shí)一樣,僅把R/W 位置為1。有三種不同的讀操作方式:立即/當(dāng)前地址讀選擇/隨機(jī)讀和連續(xù)讀。</p><p> ㈠ 立即/當(dāng)前地址讀</p><p> CAT24WC32/64 的地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址加1。也就是說(shuō),如果上次讀/寫(xiě)的操作地址為N,則立即讀的地址從地址N+1開(kāi)始,如果N=E (這里對(duì)24WC32 ,E=4095 ,對(duì)24WC64,
68、E=8191)則計(jì)數(shù)器將翻轉(zhuǎn)到0 且繼續(xù)輸出數(shù)據(jù)。CAT24WC32/64 接收到從器件地址信號(hào)后(R/W 位置1),它首先發(fā)送一個(gè)應(yīng)答信號(hào),然后發(fā)送一個(gè)8 位字節(jié)數(shù)據(jù)。主器件不需發(fā)送一個(gè)應(yīng)答信號(hào)但要產(chǎn)生一個(gè)停止信號(hào)。</p><p><b> ?、?選擇/隨機(jī)讀</b></p><p> 選擇/隨機(jī)讀操作允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操,作主器件首先通過(guò)發(fā)送
69、起始信號(hào)、從器件地址和它想讀取的字節(jié)數(shù)據(jù)的地址執(zhí)行一個(gè)偽寫(xiě)操作。在CAT24WC32/64 應(yīng)答之后,主器件重新發(fā)送起始信號(hào)和從器件地址,此時(shí)R/W 位置“1”, CAT24WC32/64 響應(yīng)并發(fā)送應(yīng)答信號(hào),然后輸出所要求的一個(gè)8 位字節(jié)數(shù)據(jù),主器件不發(fā)送應(yīng)答信號(hào)但產(chǎn)生一個(gè)停止信號(hào)。</p><p><b> ㈢ 連續(xù)讀</b></p><p> 連續(xù)讀操作可
70、通過(guò)立即讀或選擇性讀操作方式啟動(dòng)。在CAT24WC32/64 發(fā)送完一個(gè)8 位字節(jié)數(shù)據(jù)后,主器件產(chǎn)生一個(gè)應(yīng)答信號(hào)來(lái)響應(yīng),告知CAT24WC32/64 主器件要求更多的數(shù)據(jù),對(duì)應(yīng)每個(gè)主機(jī)產(chǎn)生的應(yīng)答信號(hào)CAT24WC32/64 將發(fā)送一個(gè)8 位數(shù)據(jù)字節(jié)。當(dāng)主器件不發(fā)送應(yīng)答信號(hào)而發(fā)送停止位時(shí)結(jié)束此操作。</p><p> 從CAT24WC32/64 輸出的數(shù)據(jù)按順序由N 到N+1 輸出。讀操作時(shí)地址計(jì)數(shù)器在CAT24
71、WC32/64 整個(gè)地址內(nèi)增加,這樣整個(gè)寄存器區(qū)域在可在一個(gè)讀操作內(nèi)全部讀出。當(dāng)讀取的字節(jié)超過(guò)E (對(duì)于24WC32,</p><p> E=4095; 對(duì)24WC64, E=8191) 計(jì)數(shù)器將翻轉(zhuǎn)到零并繼續(xù)輸出數(shù)據(jù)字節(jié)。</p><p> 圖17 24C02存儲(chǔ)電路</p><p> (7)鍵盤(pán)與顯示電路</p><p> 圖18
72、 鍵盤(pán)與液晶顯示電路</p><p> 在本系統(tǒng)中,采用獨(dú)立式鍵盤(pán)。本鍵盤(pán)完成的功能為輸入控制系統(tǒng)的設(shè)定值,以便與系統(tǒng)的采樣值比較,求出系統(tǒng)的誤差與誤差變化率供以后的模糊控制子程序使用。為了完成預(yù)定值設(shè)置,系統(tǒng)中設(shè)置了4個(gè)按鍵,分別為圖中S1、S2、S3和S3,依次代表設(shè)定溫度功能鍵、加1鍵、減1鍵和查看存儲(chǔ)功能鍵。功能鍵以它按下的次數(shù)來(lái)區(qū)分它的多種功能。當(dāng)溫度功能鍵第一次被按下時(shí),液晶顯示當(dāng)前溫度值和日期,
73、此時(shí)按加1、減1鍵無(wú)響應(yīng),再按下功能鍵則進(jìn)入溫度設(shè)定模式,液晶顯示當(dāng)前時(shí)間和設(shè)定默認(rèn)值,按加1減1鍵使該值每次加減0.5℃,設(shè)定完參數(shù)后,再按一次功能鍵系統(tǒng)將進(jìn)入設(shè)定值發(fā)送狀態(tài),當(dāng)液晶上顯示“OK”表示設(shè)定溫度已經(jīng)成功發(fā)送到子機(jī)。再按一下溫度設(shè)定功能鍵回復(fù)原來(lái)狀態(tài)。當(dāng)查看存儲(chǔ)功能鍵按下一次時(shí),液晶顯示系統(tǒng)最后記錄的溫度,和該溫度對(duì)應(yīng)的日期和時(shí)間。</p><p> 所用的四個(gè)鍵全部選用按鈕開(kāi)關(guān)。在編寫(xiě)軟件處理子
74、程序時(shí)主要注重以下3個(gè)問(wèn)題:</p><p> ?、?如何減少開(kāi)關(guān)的使用次數(shù)以提高開(kāi)關(guān)的使用壽命。</p><p> ?、?如何更快捷更方便的給出設(shè)定值。</p><p> ?、?如何更有利于總程序的總體調(diào)度。</p><p> 為此,采用4各按鍵來(lái)搭建電路,第一個(gè)按鍵用于查看日期、進(jìn)入設(shè)定溫度模式和發(fā)送設(shè)定溫度到從機(jī)。第四個(gè)按鍵用于
75、查看存儲(chǔ)的溫度值以及該溫度值所對(duì)應(yīng)的時(shí)間和日期。在設(shè)定溫度模式下,按鍵二和按鍵三分別用于對(duì)設(shè)定值的加減操作;在查看已存儲(chǔ)溫度模式下,按鍵二和按鍵三分別用于向前查看和向后查看。</p><p><b> (8)系統(tǒng)電源設(shè)計(jì)</b></p><p><b> 圖19 系統(tǒng)電源</b></p><p><b>
76、五、系統(tǒng)總體電路圖</b></p><p> 圖20 系統(tǒng)總體電路圖</p><p><b> 附件1:A機(jī)源程序</b></p><p> #include<reg52.h></p><p> #include <intrins.h></p><p>
77、; #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define delay1us _nop_(); //精確延時(shí)1微秒</p><p> #define delay2us {delay1us;delay1us;}
78、 //精確延時(shí)2微秒</p><p> #define delay4us {delay2us;delay2us;} //精確延時(shí)4微秒</p><p> #define delay12us {delay4us;delay4us;delay4us;}//精確延時(shí)12微秒</p><p> uchar data
79、table[]={0,0,0,0}; //定義一維數(shù)組緩存區(qū),存取當(dāng)前溫度數(shù)值</p><p> uchar data table0[]={0,0,0,0}; //定義一維數(shù)組緩存區(qū),存取設(shè)定溫度數(shù)值</p><p> sbit din=P0^0; //串行顯示芯片max7219引腳定義</p><p> sbit c
80、lk=P0^2;</p><p> sbit load=P0^1;</p><p> sbit max1270_clk=P2^2; //12位ADC,MAX1270引腳定義</p><p> sbit max1270_cs=P2^1;</p><p> sbit max1270_din=P2^0;<
81、;/p><p> sbit max1270_dout=P2^3;</p><p> sbit HOT=P1^2; //溫度控制PWM輸出端口</p><p> sbit COOL=P1^3;</p><p> uint data SET_temp; //設(shè)定溫
82、度變量,用于接受上位機(jī)設(shè)定溫度</p><p> uint data REA_temp,temp,temp0,temp1,temp2; //當(dāng)前溫度變量</p><p> uint PWM; //脈寬大小調(diào)節(jié)變量 </p><p> sign
83、ed int data comp; //當(dāng)前溫度與設(shè)定溫度差值</p><p><b> uchar a;</b></p><p> /********函數(shù)名稱(chēng):延時(shí)函數(shù)*************************</p><p><b> *</b></p>
84、<p> *功能:含形參,延時(shí)長(zhǎng)短可調(diào)</p><p><b> *</b></p><p> *說(shuō)明:z=1時(shí),延時(shí)10ms</p><p><b> *</b></p><p><b> *位置:</b></p><p><
85、b> *</b></p><p> ****************************************************/</p><p> void delay(uchar z)</p><p><b> {</b></p><p> uchar i,j,k;</p
86、><p> for(k=z;k>0;k--)</p><p> for(i=20;i>0;i--)</p><p> for(j=248;j>0;j--);</p><p><b> }</b></p><p> /********函數(shù)名稱(chēng):MAX1270_AD轉(zhuǎn)換函數(shù)**
87、*************</p><p><b> *</b></p><p> *功能:max1270 12位的模數(shù)轉(zhuǎn)換芯片</p><p><b> *</b></p><p> ****************************************************/
88、</p><p> //=================MAX1270_AD轉(zhuǎn)換函數(shù)==============//</p><p> //---------------寫(xiě)入一個(gè)字節(jié)----------------------//</p><p> void Max1270_write(uchar dat)</p><p><b
89、> {</b></p><p> uchar cnt;</p><p> for(cnt=0;cnt<8;cnt++)</p><p><b> {</b></p><p> max1270_din=(bit)(dat&0x80);</p><p><
90、;b> dat<<=1;</b></p><p> max1270_clk=1;</p><p><b> delay1us;</b></p><p> max1270_clk=0;</p><p><b> delay1us;</b></p>
91、<p><b> }</b></p><p><b> }</b></p><p> //-------------------讀出一個(gè)字節(jié)------------------//</p><p> uint Max1270_read(void)</p><p><b>
92、 {</b></p><p> uint dat=0;</p><p> uchar cnt;</p><p> for(cnt=0;cnt<16;cnt++)</p><p><b> {</b></p><p><b> dat<<=1;&l
93、t;/b></p><p> max1270_clk=1;</p><p> delay12us;</p><p> max1270_clk=0;</p><p> if(max1270_dout) dat++;</p><p> delay12us;</p><p><
94、;b> }</b></p><p> return dat;</p><p><b> }</b></p><p> //------------讀取MAX1270某一通道轉(zhuǎn)換的數(shù)值----------//</p><p> uint Max1270_read_data()</p>
95、<p><b> {</b></p><p> uint AD_data;</p><p> max1270_cs=0;</p><p> delay12us;</p><p> Max1270_write(0x81);</p><p> delay12us;</p
96、><p> AD_data=Max1270_read();</p><p> max1270_cs=1;</p><p> delay12us;</p><p> return AD_data;</p><p><b> }</b></p><p> /*****
97、***函數(shù)名稱(chēng):MAX7219顯示芯片控制函數(shù)*************</p><p><b> *</b></p><p> *功能:串口8位數(shù)碼管顯示芯片</p><p><b> *</b></p><p> *************************************
98、****************/</p><p> //---------------------對(duì)7219的寫(xiě)字節(jié)程序-------------/</p><p> //----------------功能:實(shí)現(xiàn)對(duì)控制寄存器的讀寫(xiě)--------/</p><p> void Write_Max7219_byte(uchar DATA)
99、 //LED寫(xiě)數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> load=0;</b></p><p> for(i=8;i>=1;i--)</p><p><
100、;b> {</b></p><p><b> clk=0;</b></p><p> din=DATA&0x80;</p><p> DATA=DATA<<1;</p><p><b> clk=1;</b></p><p>&
101、lt;b> }</b></p><p><b> }</b></p><p> /*****************7219寫(xiě)數(shù)字程序************************/</p><p> //功能:先寫(xiě)LED數(shù)字控制寄存器,再將要顯示的字符送到相應(yīng)的數(shù)字寄存器顯示</p><p>
102、; void Write_Max7219(uchar address,uchar dat)</p><p><b> { </b></p><p><b> load=0;</b></p><p> Write_Max7219_byte(address); </p><p> Write_
103、Max7219_byte(dat);</p><p> load=1; </p><p><b> }</b></p><p> /****************7219初始化程序**********************/</p><p> //功能:完成對(duì)各個(gè)內(nèi)部寄存器的初始
104、化</p><p> void Init_Max7219(void) </p><p><b> { </b></p><p> Write_Max7219(0x09, 0xff); //譯碼寄存器,寫(xiě)入0ffH,對(duì)0至7位均譯碼</p><p> Write_Max721
105、9(0x0a, 0x04); //亮度調(diào)節(jié)寄存器,寫(xiě)入03H,實(shí)現(xiàn)一般的亮度顯示</p><p> Write_Max7219(0x0b, 0x07); //掃描界限寄存器,寫(xiě)入03H,實(shí)現(xiàn)對(duì)0到3位數(shù)碼管的顯示 </p><p> Write_Max7219(0x0c, 0x01); //停機(jī)寄存器,寫(xiě)入01H,實(shí)現(xiàn)正常工作&l
106、t;/p><p> Write_Max7219(0x0d, 0x08); //顯示測(cè)試寄存器,寫(xiě)入0H,實(shí)現(xiàn)正常工作</p><p><b> }</b></p><p> /********函數(shù)名稱(chēng):當(dāng)前與設(shè)定溫度顯示函數(shù)*****************</p><p><b&g
107、t; *</b></p><p> *功能:顯示當(dāng)前與設(shè)定溫度</p><p><b> *</b></p><p> *****************************************************/</p><p> void display()</p>
108、<p><b> {</b></p><p> table[0]=temp0%10;</p><p> if(table[0]<5)</p><p> table[0]=5;</p><p><b> else </b></p><p><b&
109、gt; {</b></p><p> table[0]=0;</p><p> temp0=temp0+10;</p><p> } //小數(shù)位采用四舍五入算法濾抖</p><p> table[1]=temp0%100/10;&
110、lt;/p><p> table[2]=temp0%1000/100;</p><p> table[3]=temp0/1000;</p><p> Write_Max7219(0x01,table[0]);</p><p> Write_Max7219(0x02,table[1]|0x80);</p><p>
111、 Write_Max7219(0x03,table[2]);</p><p> Write_Max7219(0x04,table[3]); //(三位半)當(dāng)前溫度顯示,精確到0.5°C</p><p> table0[0]=SET_temp%10;</p><p> table0[1]=SET_temp%100/10;</p
112、><p> table0[2]=SET_temp%1000/100;</p><p> table0[3]=SET_temp/1000;</p><p> Write_Max7219(0x05,table0[0]);</p><p> Write_Max7219(0x06,table0[1]|0x80);</p><p
113、> Write_Max7219(0x07,table0[2]);</p><p> Write_Max7219(0x08,table0[3]); //(三位半)設(shè)定溫度顯示,精確到0.5°C</p><p><b> }</b></p><p> /********函數(shù)名稱(chēng):PWM函數(shù)T0&T2初
114、始化*****************</p><p><b> *</b></p><p> *功能:PWM調(diào)節(jié),T0&T2初始化</p><p><b> *</b></p><p> ***********************************************
115、******/</p><p> void Initimer()</p><p><b> {</b></p><p><b> PT2=1;</b></p><p> TMOD=0x21; // PWM周期20ms</p><
116、;p> RCAP2L=0xff;</p><p> RCAP2H=0xb7 ; </p><p> TH0=(65535-PWM)/256 ; //脈寬調(diào)節(jié)占空比為PWM/20000</p><p> TL0=(65535-PWM)%256;</p><p><b> EA=1;</b&
117、gt;</p><p><b> ET0=1;</b></p><p><b> ET2=1; </b></p><p><b> TR2=1;</b></p><p><b> }</b></p><p> voi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c52的智能小車(chē)設(shè)計(jì)
- 基于at89c52的智能小車(chē)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c52單片機(jī)智能循跡小車(chē)的設(shè)計(jì)
- 基于at89c52單片機(jī)的智能澆花系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于AT89C52單片機(jī)的β-γ智能巖心編錄儀的設(shè)計(jì).pdf
- 畢業(yè)設(shè)計(jì)---基于at89c52單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)at89c52的led點(diǎn)陣設(shè)計(jì)
- 基于at89c52的電子時(shí)鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-基于at89c52單片機(jī)的自動(dòng)澆花系統(tǒng)
- 基于at89c52單片機(jī)的智能報(bào)警系統(tǒng)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于at89c52單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于at89c52的電阻爐溫度控制器設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c52多功能數(shù)字鐘的設(shè)計(jì)與仿真
- 基于at89c52的計(jì)算器設(shè)計(jì)
- 基于at89c52單片機(jī)的智能報(bào)警系統(tǒng)的設(shè)計(jì)
- 基于at89c52單片機(jī)的智能報(bào)警系統(tǒng)的設(shè)計(jì)
- 基于stc89c52的智能小車(chē)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)論文:基于at89c52單片機(jī)的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
- 基于at89c52的數(shù)字電壓表設(shè)計(jì)
- 基于at89c52單片機(jī)簡(jiǎn)易環(huán)境檢測(cè)儀器的設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
評(píng)論
0/150
提交評(píng)論