水溫控制系統(tǒng)設(shè)計(jì)畢業(yè)論文_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  水溫控制系統(tǒng)設(shè)計(jì)報(bào)告</p><p><b>  摘要</b></p><p>  考慮到題目的要求,本設(shè)計(jì)采用單片機(jī)開實(shí)現(xiàn),設(shè)計(jì)采用現(xiàn)成有的AT89C52單片機(jī)(實(shí)際AT89C2051即可滿足要求)。單片機(jī)軟件編程靈活,自由度大,可用軟件編程實(shí)現(xiàn)各種控制算法和各種邏輯控制。</p><p><b>  本設(shè)計(jì)的

2、主要特點(diǎn):</b></p><p>  1)溫度采集部分采用DS18B20單總線數(shù)字溫度傳感器。DS18B20具有微型化,低功耗,高性能,抗干擾能力強(qiáng)的特點(diǎn)。該器件將半導(dǎo)體溫敏器件,A/D轉(zhuǎn)換器,存儲(chǔ)器等集成在一個(gè)芯片上,傳感器輸出的就是溫度信號(hào)數(shù)字值。使用該器件不僅大大簡(jiǎn)化了溫度采集部分,而且也提高了溫度采集部分的抗干擾性。</p><p>  2)控制部分采用固態(tài)繼電器。&

3、lt;/p><p>  a固態(tài)繼電器內(nèi)部采用光耦合方式,可實(shí)現(xiàn)弱電部分與強(qiáng)電部分的完全隔離。</p><p>  b固態(tài)繼電器的反應(yīng)時(shí)間較短。考慮到加熱器件的熱慣性,使用固態(tài)繼電器在實(shí)際溫度接近設(shè)定溫度時(shí)可采用調(diào)節(jié)輸出信號(hào)占空比的方式(即PWM方式)來控制繼電器的通斷,使系統(tǒng)穩(wěn)定時(shí)間縮短。</p><p>  3)設(shè)定值可被記憶。DS18B20內(nèi)部含有EEPROM電擦除

4、ROM用于存儲(chǔ)設(shè)定的上下限報(bào)警值,因此每次設(shè)定的值都可以被存儲(chǔ)下來,直到下一次設(shè)定為止。</p><p><b>  一.方案論證和比較</b></p><p><b> ?。?)方案一</b></p><p>  采用二位式模擬控制方案,利用上下限比較電路,提高精度。這種方法是模擬控制方式,因此不能實(shí)現(xiàn)復(fù)雜的控制算法使控

5、制精度做得較高,而且不能用數(shù)碼顯示和鍵盤設(shè)定。(框圖見C-1)</p><p><b> ?。▓DC-1)</b></p><p><b> ?。?)方案二</b></p><p>  采用熱敏電阻作傳感器,以AT89C52單片機(jī)為核心進(jìn)行整個(gè)系統(tǒng)的管理、協(xié)調(diào)。該方案有A/D轉(zhuǎn)換、測(cè)量和控制等部分。比第一種方案有設(shè)計(jì)靈活、精

6、度高等優(yōu)點(diǎn)。但該方案采用A/D轉(zhuǎn)換器,在線路設(shè)計(jì)上數(shù)據(jù)線多,不易實(shí)現(xiàn)數(shù)摸隔離,且成本高。(框圖見C-2)</p><p><b> ?。驁D見C-2)</b></p><p><b>  (3)方案三</b></p><p>  此方按采用AT89C52單片機(jī),并利用溫度傳感器DS18B20。它具有精度高﹑可靠性好和能直接

7、將模擬被測(cè)量轉(zhuǎn)換成數(shù)字量輸出,因此不需要加A/D轉(zhuǎn)換,電路更加簡(jiǎn)單。加上單片機(jī)軟件編程靈活﹑自由度大,可用軟件編程實(shí)現(xiàn)各種控制算法和邏輯控制。單片機(jī)系統(tǒng)可用數(shù)碼管顯示水溫的實(shí)際值,可用鍵盤輸入設(shè)定值。(設(shè)計(jì)框圖如圖C—3所示)</p><p><b> ?。?圖C—3)</b></p><p><b>  方案論證</b></p>

8、<p>  方案一是傳統(tǒng)的模擬控制方式,而模擬的控制系統(tǒng)難以實(shí)現(xiàn)復(fù)雜控制規(guī)律,控制方案的修改也比較麻煩。而方案二雖采用AT89C52為控制核心,但它利用摸數(shù)轉(zhuǎn)換器件實(shí)現(xiàn)數(shù)據(jù)采集,它在電路設(shè)計(jì)上比較復(fù)雜。而方案三是采用AT89C52為控制核心的單片機(jī)控制系統(tǒng),利用數(shù)字溫度傳感器DS48B20進(jìn)行溫度的采集。DS18B20可以直接讀出被測(cè)溫度,而且采用三線制與單片機(jī)相連減少了外部硬件電路,具有低成本和易使用的特點(diǎn)。在電路上設(shè)計(jì)上比

9、方案二更加簡(jiǎn)單,也可以實(shí)現(xiàn)顯示、鍵盤設(shè)定、報(bào)警等功能,大大的提高了系統(tǒng)的智能化,也使得系統(tǒng)所測(cè)結(jié)果精度大大提高。故經(jīng)過對(duì)三種方案的比較,本設(shè)計(jì)及制作采用了方案三。</p><p><b>  系統(tǒng)原理</b></p><p>  (1) 傳感器選擇 常見的感溫元件有熱電偶、熱電阻、半導(dǎo)體和集成等傳感器,它們的主要優(yōu)缺點(diǎn)是:熱電偶價(jià)格便宜,但精度低,需冷端補(bǔ)償,電路

10、設(shè)計(jì)復(fù)雜;熱電阻精度高,但需要標(biāo)準(zhǔn)穩(wěn)定電阻匹配才能使用。而半導(dǎo)體溫度傳感器需要經(jīng)過模數(shù)轉(zhuǎn)換,數(shù)據(jù)線多,電路設(shè)計(jì)比較難。而集成溫度傳感器具有精度高,線性度好,電路簡(jiǎn)單,價(jià)格適中等優(yōu)點(diǎn)。因此我們選用由美國DALLAS半導(dǎo)體公司生產(chǎn)的智能型溫度傳感器DS18B20。</p><p>  (2) 控制算法 實(shí)驗(yàn)表明,水溫控制系統(tǒng)中,由于加熱電爐的熱慣性,溫度會(huì)有一定的超調(diào)。而采用單純的PID控制始終具有較大的超調(diào),因此

11、在輸出控制上我們采用PWM方式實(shí)現(xiàn),PWM的基本原理是在一定周期內(nèi)調(diào)節(jié)占空比,設(shè)定值與實(shí)測(cè)溫度值之差和輸出信號(hào)的占空比成正比,即實(shí)測(cè)值與設(shè)定值越接近,則輸出信號(hào)的占空比越小。當(dāng)實(shí)測(cè)溫度值等于設(shè)定值時(shí),輸出信號(hào)占空比為0,控制繼電器關(guān)斷,停止加熱。</p><p><b>  (3)單元電路描述</b></p><p><b>  CPU</b>&

12、lt;/p><p>  本系統(tǒng)采用AT89C52芯片作為核心部件,89C52內(nèi)部帶有8K字節(jié)FLASH閃速存儲(chǔ)器,256字節(jié)內(nèi)部RAM,32個(gè)I/O口線。(圖見1—1)</p><p><b>  信號(hào)采集電路</b></p><p>  本系統(tǒng)信號(hào)主要由溫度傳感器DS18B20組成,因?yàn)槭羌尚酒?,可以不加其它電路直接將芯片?shù)據(jù)輸出口接到CPU

13、I/O口上。(見圖1-2)</p><p> ?。▓D1—1) (圖1—2)</p><p><b>  鍵盤設(shè)定</b></p><p>  本系統(tǒng)共設(shè)4個(gè)鍵:其中一個(gè)鍵是單片機(jī)系統(tǒng)復(fù)位用,一個(gè)是溫度設(shè)定鍵(p1.6)、加一(p1.4)、減一鍵(p1.5)。(圖見1—3) &

14、lt;/p><p>  (圖1—3) (圖1—4) </p><p><b>  4.?dāng)?shù)碼顯示</b></p><p>  數(shù)碼管采用三位共陽數(shù)碼管。使用單片機(jī)P0口輸出段碼,用P2.5—P2.7控制三極管的導(dǎo)通和截至,進(jìn)行位選擇,實(shí)現(xiàn)三位數(shù)據(jù)動(dòng)態(tài)顯示。(圖見1—4)</p&

15、gt;<p><b>  5.超溫報(bào)警</b></p><p>  報(bào)警電路利用單片機(jī)P3.7進(jìn)行控制有源蜂鳴器。(當(dāng)溫度超過設(shè)定溫度上限時(shí)開始報(bào)警)(圖略)</p><p><b>  6.繼電器控制</b></p><p>  該部分利用單片機(jī)P1.0引腳對(duì)固態(tài)繼電器進(jìn)行控制,以實(shí)現(xiàn)對(duì)電爐的加熱進(jìn)行控制,

16、既在溫度達(dá)到設(shè)定值時(shí)斷開電爐的電源停止加熱。(圖略)</p><p><b>  7.電源電路</b></p><p>  電源采用采用7805穩(wěn)壓,對(duì)系統(tǒng)供電。如圖(圖略)</p><p>  硬件原理總圖(見圖C—4)</p><p><b> ?。▓DC—4)</b></p>&l

17、t;p><b>  軟件系統(tǒng)設(shè)計(jì)</b></p><p>  1.系統(tǒng)軟件總流程圖如下</p><p>  2.功能鍵掃描子程序:</p><p><b>  控制操作子程序:</b></p><p><b>  五.調(diào)試過程</b></p><p&g

18、t;  在搪瓷器皿中存放1L水,放置在1KW的電爐上打開控制電源,系統(tǒng)進(jìn)入準(zhǔn)備工作、狀態(tài)。</p><p>  用溫度計(jì)(精度為0.2度)對(duì)照測(cè)溫系統(tǒng)測(cè)溫,在水溫分別為40、50、60、70、80、90攝氏度觀察系統(tǒng)測(cè)量溫度值與實(shí)際溫度值,</p><p>  動(dòng)態(tài)測(cè)試:設(shè)定溫度為75攝氏度系統(tǒng)由低溫開始進(jìn)入升溫狀態(tài)。開始記錄數(shù)據(jù),觀測(cè)超調(diào)量、調(diào)節(jié)時(shí)間和穩(wěn)態(tài)誤差;系統(tǒng)進(jìn)入穩(wěn)態(tài)后,用電扇吹涼

19、觀測(cè)系統(tǒng)的抗干擾能力。設(shè)定溫度為80度系統(tǒng)由低溫開始進(jìn)入升溫狀態(tài)。開始記錄數(shù)據(jù),觀測(cè)超調(diào)量、調(diào)節(jié)時(shí)間和穩(wěn)態(tài)誤差;系統(tǒng)進(jìn)入穩(wěn)態(tài)后,用電扇吹涼觀測(cè)系統(tǒng)的抗干擾能力。</p><p><b>  1.溫度測(cè)量</b></p><p>  測(cè)試條件及儀器:水銀溫度計(jì),1000W 電爐,環(huán)境溫度為32℃</p><p><b>  2.<

20、/b></p><p>  穩(wěn)定到75℃,經(jīng)實(shí)驗(yàn)得知在穩(wěn)定后,精度可以達(dá)到≤0.1℃</p><p><b>  六.總結(jié)</b></p><p>  本系統(tǒng)采用AT89C52芯片為核心部件,利用數(shù)字溫度傳感器DS18B20進(jìn)行溫度采集,提高了測(cè)溫精度,充分利用軟件編程,使溫度精確度和穩(wěn)定度均到達(dá)題目要求。另外可以改進(jìn)算法以解決超調(diào)和測(cè)溫

21、精度問題。</p><p><b>  附程序:</b></p><p>  TIMER_L DATA 23H</p><p>  TIMER_H DATA 24H</p><p>  TIMER_COUN DATA 25H</p><p>  TEMPL DA

22、TA 26H</p><p>  TEMPH DATA 27H</p><p>  TEMP_TH DATA 28H</p><p>  TEMP_TL DATA 29H</p><p>  TEMPHC DATA 2AH</p><p>  TEMPLC DA

23、TA 2BH</p><p>  TEMP_ZH DATA 2CH</p><p>  BEEP EQU P3.7</p><p>  DATA_LINE EQU P3.3</p><p>  RELAY EQU P1.0</p><p>  FLAG1

24、 EQU 20H.0</p><p>  ; </p><p>  K1 EQU P1.4</p><p>  K2 EQU P1.5</p><p>  K3 EQU P1.6</p><p>  K4 EQU P1.7</p><p><b

25、>  ;</b></p><p><b>  ORG 0000H</b></p><p><b>  JMP MAIN</b></p><p>  ORG 001BH</p><p>  JMP T1INT1</p><p>  T1INT1: P

26、USH ACC</p><p><b>  PUSH PSW</b></p><p><b>  INC 2DH</b></p><p>  MOV A , 2DH</p><p>  CJNE A , #50 , T1INT1E</p><p>  MOV 2DH , #0

27、</p><p><b>  CPL P1.0</b></p><p><b>  INC 2EH</b></p><p>  MOV A , 2EH</p><p>  CJNE A , #3 , T1INT1E</p><p><b>  SETB 7FH<

28、;/b></p><p>  MOV 2EH , #0</p><p>  T1INT1E: POP PSW</p><p><b>  POP ACC</b></p><p><b>  RETI</b></p><p><b>  ;</b>

29、</p><p>  MAIN: mov SP,#30H</p><p>  MOV TMOD,#11H ;T0,方式1</p><p>  MOV TIMER_L,#00H ;50ms定時(shí)值</p><p>  MOV TIMER_H,#4CH</p><p>  MOV TH1

30、, #00H</p><p>  MOV TL1 , #00H</p><p>  MOV IE,#82H ;EA=1,ET0=1</p><p><b>  SETB ET1</b></p><p>  LCALL READ_E2</p><p>  MOV 20H,#0

31、0H</p><p>  SETB BEEP</p><p>  SETB RELAY</p><p>  MOV 7FH,#0AH ;熄滅符</p><p>  CALL RESET ;復(fù)位與檢測(cè)DS18B20</p><p>  JNB FLAG1,MAIN1

32、 ;FLAG1=0,DS18B20不存在</p><p>  JMP START</p><p>  MAIN1: CALL RESET</p><p>  JB FLAG1,START</p><p>  LCALL BEEP_BL ;DS18B20錯(cuò)誤,報(bào)警</p><p>  JMP

33、 MAIN1</p><p><b>  START:</b></p><p>  MOV A,#0CCH ; 跳過ROM匹配</p><p>  CALL WRITE</p><p>  MOV A,#044H ; 發(fā)出溫度轉(zhuǎn)換命令</p><p>  CALL

34、WRITE</p><p>  CALL RESET</p><p>  MOV A,#0CCH ; 跳過ROM匹配</p><p>  CALL WRITE</p><p>  MOV A,#0BEH ; 發(fā)出讀溫度命令</p><p>  CALL WRITE</p>

35、<p>  CALL READ ;讀溫度數(shù)據(jù)</p><p>  CALL CONVTEMP</p><p>  CALL DISPBCD</p><p>  CALL DISP1</p><p>  CALL SCANKEY</p><p>  LCALL TEMP_COMP

36、</p><p>  JMP MAIN1</p><p><b>  ;</b></p><p>  ;DS18B20 復(fù)位與檢測(cè)子程序</p><p>  ;FLAG1=1 OK, FLAG1=0 ERROR</p><p><b>  ;</b></p>

37、<p><b>  RESET:</b></p><p>  SETB DATA_LINE</p><p><b>  NOP</b></p><p>  CLR DATA_LINE</p><p>  MOV R0,#64H ;主機(jī)發(fā)出延時(shí)600微秒的復(fù)位低脈沖&

38、lt;/p><p>  MOV R1,#03H</p><p>  RESET1: DJNZ R0,$</p><p>  MOV R0,#64H</p><p>  DJNZ R1,RESET1</p><p>  SETB DATA_LINE ;然后拉高數(shù)據(jù)線</p><p>

39、<b>  NOP</b></p><p>  MOV R0,#25H</p><p>  RESET2: JNB DATA_LINE,RESET3 ;等待DS18B20回應(yīng)</p><p>  DJNZ R0,RESET2</p><p>  JMP RESET4 ; 延時(shí)</p>

40、;<p>  RESET3: SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在</p><p>  JMP RESET5</p><p>  RESET4: CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在</p><p>  JMP RESET6</p><p&

41、gt;  RESET5: MOV R0,#064H</p><p>  DJNZ R0,$ ; 時(shí)序要求延時(shí)一段時(shí)間</p><p>  RESET6: SETB DATA_LINE</p><p><b>  RET</b></p><p>  ;====================

42、=======================================</p><p>  WRITE: MOV R2,#8 ;一共8位數(shù)據(jù)</p><p><b>  CLR CY</b></p><p><b>  WR1:</b></p><p>  CLR D

43、ATA_LINE ;開始寫入DS18B20總線要處于復(fù)位(低)狀態(tài)</p><p>  MOV R3,#09</p><p>  DJNZ R3,$ ;總線復(fù)位保持18微妙以上</p><p>  RRC A ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給C</p><p>  M

44、OV DATA_LINE,C ;寫入一個(gè)BIT</p><p>  MOV R3,#23</p><p>  DJNZ R3,$ ;等待46微妙</p><p>  SETB DATA_LINE ;重新釋放總線</p><p><b>  NOP</b></p>

45、<p>  DJNZ R2,WR1 ;寫入下一個(gè)BIT</p><p>  SETB DATA_LINE</p><p><b>  RET</b></p><p><b>  ;</b></p><p>  ;從DS18B20中讀出溫度低位、高位和報(bào)警值TH、TL<

46、;/p><p>  ;存入26H、27H、28H、29H</p><p><b>  ;</b></p><p>  READ: MOV R4,#4 ; 將溫度高位和低位從DS18B20中讀出</p><p>  MOV R1,#26H ; 存入26H、27H、28H、29H&l

47、t;/p><p>  RE00: MOV R2,#8</p><p>  RE01: CLR C</p><p>  SETB DATA_LINE</p><p><b>  NOP</b></p><p><b>  NOP</b></p><p

48、>  CLR DATA_LINE ;讀前總線保持為低</p><p><b>  NOP</b></p><p><b>  NOP</b></p><p><b>  NOP</b></p><p>  SETB DATA_LINE ;開始讀總

49、線釋放</p><p>  MOV R3,#09 ;延時(shí)18微妙</p><p><b>  DJNZ R3,$</b></p><p>  MOV C,DATA_LINE ;從DS18B20總線讀得一個(gè)BIT</p><p>  MOV R3,#23</p><p>

50、;  DJNZ R3,$ ;等待46微妙</p><p>  RRC A ;把讀得的位值環(huán)移給A</p><p>  DJNZ R2,RE01 ;讀下一個(gè)BIT</p><p><b>  MOV @R1,A</b></p><p><b> 

51、 INC R1</b></p><p>  DJNZ R4,RE00</p><p><b>  RET</b></p><p>  ;;重新對(duì) DS18B20 初始化</p><p>  ;將設(shè)定的溫度報(bào)警值寫入 DS18B20</p><p><b>  RE_18B20

52、:</b></p><p>  JB FLAG1,RE_18B20A</p><p><b>  RET</b></p><p>  RE_18B20A:</p><p>  CALL RESET</p><p>  MOV A,#0CCH ;跳過ROM匹配</

53、p><p>  LCALL WRITE</p><p>  MOV A,#4EH ;寫暫存寄存器</p><p>  LCALL WRITE</p><p>  MOV A,TEMP_TH ;TH(報(bào)警上限)</p><p>  LCALL WRITE</p><p>

54、;  MOV A,TEMP_TL ;TL(報(bào)警下限)</p><p>  LCALL WRITE</p><p>  MOV A,#7FH ;12位精確度</p><p>  LCALL WRITE</p><p><b>  RET</b></p><p><

55、b>  ;功能鍵掃描子程序</b></p><p><b>  SCANKEY:</b></p><p>  MOV P1,#0F0H</p><p>  SCAN_K3: JB K3,SCAN_END</p><p>  CALL BEEP_BL</p><p>

56、;  LCALL RESET_TH</p><p>  LCALL RE_18B20</p><p>  LCALL WRITE_E2</p><p>  SCAN_END: CLR TR0</p><p><b>  RET</b></p><p><b>  ;設(shè)置溫

57、度報(bào)警值</b></p><p><b>  RESET_TH:</b></p><p>  CALL ALERT_TH</p><p>  CALL ALERT_PLAY</p><p><b>  JNB K3,$</b></p><p><b&g

58、t;  SETB TR0</b></p><p>  RESET_TH1: CALL ALERT_TH</p><p>  mov 75h,7Eh ;</p><p>  mov 76h,7Dh</p><p>  CALL ALERT_PLAY</p><p>  R_TH

59、02: JNB K1,K021A</p><p>  JNB K2,K021B</p><p>  JNB K3,TH_DEL</p><p>  JNB K3,SCAN_END</p><p>  JMP RESET_TH1</p><p><b>  K021A:</b><

60、/p><p>  INC TEMP_TH</p><p>  MOV A,TEMP_TH</p><p>  CJNE A,#90,K022A ;沒有到設(shè)定上限值,轉(zhuǎn)</p><p>  MOV TEMP_TH,#70</p><p>  K022A: CALL TH_DEL</p>&

61、lt;p>  JMP RESET_TH1</p><p><b>  K021B:</b></p><p>  DEC TEMP_TH ;減1</p><p>  MOV A,TEMP_TH</p><p>  CJNE A,#70,K022B ;沒有到設(shè)定下限值,轉(zhuǎn)</p>

62、;<p>  MOV TEMP_TH,#90</p><p>  K022B: CALL TH_DEL</p><p>  JMP RESET_TH1</p><p>  K002: CALL BEEP_BL</p><p>  CLR TR0 ;關(guān)閉中斷</p>

63、<p><b>  RET</b></p><p><b>  ;鍵延時(shí)子程序</b></p><p>  ;多次調(diào)用報(bào)警值顯示程序來延時(shí)</p><p>  TH_DEL: ;報(bào)警高值延時(shí)</p><p>  MOV R2,#0AH<

64、/p><p>  TH_DEL1: CALL ALERT_TH</p><p>  CALL ALERT_PLAY</p><p>  DJNZ R2,TH_DEL1</p><p><b>  RET</b></p><p>  ;;實(shí)時(shí)溫度值與設(shè)定報(bào)警溫度值 TH 比較子程序</p&

65、gt;<p>  ;當(dāng)實(shí)際溫度大于 TH 的設(shè)定值時(shí),",繼電器關(guān)閉蜂鳴器報(bào)警</p><p>  ;當(dāng)實(shí)際溫度小于 TH 的設(shè)定值時(shí),”,繼電器吸合。</p><p>  TEMP_COMP:</p><p>  SETB TR0 ;啟動(dòng)中斷</p><p>  MOV A,TEMP_TH

66、</p><p>  SUBB A,TEMP_ZH ;減數(shù)>被減數(shù),則</p><p>  JC CHULI1</p><p><b>  JMP L0</b></p><p>  CJNE A ,#5 , LLL1</p><p>  LLL1: JC CHU

67、LI1 ;借位標(biāo)志位C=1,轉(zhuǎn)</p><p><b>  SETB TR1</b></p><p>  L0: SETB RELAY</p><p><b>  SETB BEEP</b></p><p><b>  CLR TR0</b>

68、;</p><p><b>  RET</b></p><p><b>  ;超溫處理</b></p><p>  CHULI1: CLR TR1</p><p>  CLR RELAY ;繼電器關(guān)閉</p><p><b>  CLR

69、 BEEP</b></p><p>  CLR TR0 ;關(guān)閉中斷</p><p><b>  RET</b></p><p>  ;把 DS18B20 暫存器里的溫度報(bào)警值拷貝到EEROM</p><p><b>  WRITE_E2:</b></p&

70、gt;<p>  CALL RESET</p><p>  MOV A,#0CCH ;跳過ROM匹配</p><p>  LCALL WRITE</p><p>  MOV A,#48H ;溫度報(bào)警值拷貝到EEROM</p><p>  LCALL WRITE</p><

71、;p><b>  RET</b></p><p>  ;把 DS18B20 EEROM 里的溫度報(bào)警值拷貝回暫存器</p><p><b>  READ_E2:</b></p><p>  CALL RESET</p><p>  MOV A,#0CCH ;跳過ROM匹配&l

72、t;/p><p>  LCALL WRITE</p><p>  MOV A,#0B8H ;溫度報(bào)警值拷貝回暫存器</p><p>  CALL WRITE</p><p><b>  RET</b></p><p>  ; 處理溫度 BCD 碼子程序</p>&l

73、t;p><b>  CONVTEMP:</b></p><p>  MOV TEMPHC,#0AH ;</p><p>  MOV A,TEMPHC</p><p><b>  SWAP A</b></p><p>  MOV TEMPHC,A</p><p

74、>  MOV A,TEMPL</p><p>  ANL A,#0FH ;乘0.0625</p><p>  MOV DPTR,#TEMPDOTTAB</p><p>  MOVC A,@A+DPTR</p><p>  MOV TEMPLC,A ;TEMPLC LOW=小數(shù)部分

75、 BCD</p><p>  MOV A,TEMPL ;整數(shù)部分</p><p>  ANL A,#0F0H</p><p><b>  SWAP A</b></p><p>  MOV TEMPL,A</p><p>  MOV A,TEMPH</p>

76、;<p>  ANL A,#0FH</p><p><b>  SWAP A</b></p><p>  ORL A,TEMPL</p><p>  MOV TEMP_ZH,A ;組合后的值存入TEMP_ZH</p><p>  LCALL HEX2BCD1</p>

77、<p>  MOV TEMPL,A</p><p>  ANL A,#0F0H</p><p><b>  SWAP A</b></p><p>  ORL A,TEMPHC ;TEMPHC LOW = 十位數(shù) BCD</p><p>  MOV TEMPHC,A</p

78、><p>  MOV A,TEMPL</p><p>  ANL A,#0FH</p><p>  SWAP A ;TEMPLC HI = 個(gè)位數(shù) BCD</p><p>  ORL A,TEMPLC</p><p>  MOV TEMPLC,A</p><p

79、><b>  MOV A,R7</b></p><p>  JZ TEMPC12</p><p>  ANL A,#0FH</p><p><b>  SWAP A</b></p><p><b>  MOV R7,A</b></p><p&

80、gt;  MOV A,TEMPHC ;TEMPHC HI = 百位數(shù) BCD</p><p>  ANL A,#0FH</p><p><b>  ORL A,R7</b></p><p>  MOV TEMPHC,A</p><p>  TEMPC12: RET</p&g

81、t;<p><b>  ; 小數(shù)部分碼表</b></p><p>  TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H</p><p>  DB 06H,07H,08H,08H,09H,09H</p><p>  ;顯示區(qū) BCD 碼溫度值刷新子程序</

82、p><p>  DISPBCD: MOV A,TEMPLC</p><p>  ANL A,#0FH</p><p>  MOV 70H,A ;小數(shù)位</p><p>  MOV A,TEMPLC</p><p><b>  SWAP A</b>&l

83、t;/p><p>  ANL A,#0FH</p><p>  MOV 71H,A ;個(gè)位</p><p>  MOV A,TEMPHC</p><p>  ANL A,#0FH</p><p>  MOV 72H,A ;十位</p>

84、<p>  MOV A,TEMPHC</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOV 73H,A ;百位</p><p>  MOV A,TEMPHC</p><p>  A

85、NL A,#0F0H</p><p>  CJNE A,#010H,DISPBCD0</p><p>  SJMP DISPBCD2</p><p>  DISPBCD0: MOV A,TEMPHC</p><p>  ANL A,#0FH</p><p>  JNZ DISPBCD2

86、 ;十位數(shù)是0</p><p>  MOV A,TEMPHC</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOV 73H,#0AH ;符號(hào)位不顯示</p><p>  MOV 7

87、2H,A ;十位數(shù)顯示符號(hào)</p><p>  DISPBCD2: RET</p><p>  ; 溫度顯示子程序</p><p>  ;顯示數(shù)據(jù)在70H - 72H 單元內(nèi),用3位共陽數(shù)碼管顯示,P0口輸出段碼數(shù)據(jù),</p><p>  ;P2 口作掃描控制,每個(gè) LED 數(shù)碼管亮 2MS

88、時(shí)間再逐位循環(huán)。</p><p>  DISP1: MOV R1,#70H ;指向顯示數(shù)據(jù)首址</p><p>  MOV R5,#7FH ;掃描控制字初值</p><p>  PLAY: MOV P0,#0FFH</p><p>  MOV A,R5

89、 ;掃描字放入A</p><p><b>  MOV P2,A</b></p><p>  MOV A,@R1 ;取顯示數(shù)據(jù)到A</p><p>  MOV DPTR,#TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR

90、 ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼</p><p>  MOV P0,A ;段碼放入P0口</p><p><b>  MOV A,R5</b></p><p>  JB ACC.6,LOOP5 ;小數(shù)點(diǎn)處理</p><p><b>  CLR P0.7&

91、lt;/b></p><p>  LOOP5: LCALL DL_MS ;顯示2MS</p><p>  INC R1 ;指向下一個(gè)地址</p><p>  MOV A,R5 ;放回 R5 內(nèi)</p><p>  JNB A

92、CC.4,ENDOUT ;ACC.4=0時(shí)一次顯示結(jié)束</p><p>  RR A ;A 中數(shù)據(jù)循環(huán)左移</p><p>  MOV R5,A ;放入 R5 中</p><p>  AJMP PLAY ;跳回 PLAY 循環(huán)</p>&

93、lt;p>  ENDOUT: MOV P0,#0FFH ;一次顯示結(jié)束,P0口復(fù)位</p><p>  MOV P2,#0FFH ;P2口復(fù)位</p><p><b>  RET</b></p><p><b>  TAB:</b></p>&l

94、t;p>  DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,</p><p>  ; “0" “1" “2" “3" “4"“5"“6"“7"“8"“9"</p><p>  DL_MS: MOV R6,#0AH

95、 ;2MS延時(shí)程序,LED 顯示程序用</p><p>  DL1: MOV R7,#64H</p><p>  DL2: DJNZ R7,DL2</p><p>  DJNZ R6,DL1</p><p><b>  RET</b></p><p>  ;

96、單字節(jié)十六進(jìn)制轉(zhuǎn) BCD</p><p>  HEX2BCD1: MOV B,#064H</p><p><b>  DIV AB</b></p><p><b>  MOV R7,A</b></p><p>  MOV A,#0AH</p><p><b&

97、gt;  XCH A,B</b></p><p><b>  DIV AB</b></p><p><b>  SWAP A</b></p><p><b>  ORL A,B</b></p><p><b>  RET</b><

98、/p><p>  ;報(bào)警值 TH 數(shù)據(jù)轉(zhuǎn)換</p><p><b>  ALERT_TH:</b></p><p>  MOV 79H,#0DH</p><p>  MOV 78H,#0BH</p><p>  MOV A,TEMP_TH</p><p>  MOV R

99、0,#77H</p><p>  MOV B,#064H</p><p><b>  DIV AB</b></p><p>  JMP ALERT_TH2</p><p>  ALERT_TH2: MOV A,#0AH</p><p><b>  XCH A,B</b

100、></p><p><b>  DIV AB</b></p><p><b>  DEC R0</b></p><p>  MOV @R0,A</p><p>  MOV 7DH,A</p><p><b>  DEC R0</b><

101、;/p><p>  MOV @R0,B</p><p>  MOV 7EH,B</p><p><b>  RET</b></p><p><b>  ;報(bào)警值顯示子程序</b></p><p>  ALERT_PLAY:</p><p>  MOV

102、 R1,#75H ;指向顯示數(shù)據(jù)首址</p><p>  MOV R5,#7FH ;掃描控制字初值</p><p>  A_PLAY: MOV P0,#0FFH</p><p>  MOV A,R5 ;掃描字放入A</p><p><b> 

103、 MOV P2,A</b></p><p>  MOV A,@R1 ;取顯示數(shù)據(jù)到A</p><p>  MOV DPTR,#ALERT_TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼</p><p>  MOV P0,

104、A ;段碼放入P0口</p><p>  LCALL DL_MS1 ;顯示2MS</p><p>  INC R1 ;指向下一個(gè)地址</p><p><b>  MOV A,R5</b></p><p>  JNB ACC.3,

105、ENDOUT1</p><p>  RR A ;A 中數(shù)據(jù)循環(huán)左移</p><p>  MOV R5,A ;放入 R5 中</p><p>  AJMP A_PLAY ;跳回 PLAY 循環(huán)</p><p>  ENDOUT1: MOV

106、 P0,#0FFH ;一次顯示結(jié)束,P0口復(fù)位</p><p>  MOV P2,#0FFH ;P2口復(fù)位</p><p><b>  RET</b></p><p>  ALERT_TAB:</p><p>  DB 0c0h,0f9h,0a4h,0b0h,99h,92h

107、,82h,0f8h,80h,90h,0ffh,0bfh,0c7h,09h</p><p>  ;共陽段碼表 “0" “1" “2" “3" “4"“5"“6"“7"“8"“9"“滅" “-"</p><p>  DL_MS1: MOV R6,#0AH

108、 ;2MS延時(shí)程序,LED 顯示程序用</p><p>  ADL1: MOV R7,#64H</p><p>  ADL2: DJNZ R7,ADL2</p><p>  DJNZ R6,ADL1</p><p><b>  RET</b></p><p&g

109、t;  ;蜂鳴器響一聲子程序</p><p>  ;P3.7=0,蜂鳴器響</p><p><b>  BEEP_BL:</b></p><p>  MOV R6,#100</p><p>  BL2: CALL DEX1</p><p>  CPL BEEP ;對(duì) P3

110、.7 取反</p><p>  DJNZ R6,BL2</p><p>  MOV R5,#10</p><p>  CALL DELAY</p><p><b>  RET</b></p><p>  DEX1: MOV R7,#180</p><p>  D

111、E2: NOP</p><p>  DJNZ R7,DE2</p><p><b>  RET</b></p><p>  DELAY: ;(R5)*延時(shí)10MS</p><p>  MOV R6,#50</p><p>  DEL1: MOV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論