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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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定時值</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 ;復位與檢測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錯誤,報警</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ā)出溫度轉換命令</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 ;讀溫度數據</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 復位與檢測子程序</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 ;主機發(fā)出延時600微秒的復位低脈沖&

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 ;然后拉高數據線</p><p>

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

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

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

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

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

44、OV DATA_LINE,C ;寫入一個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 ;寫入下一個BIT</p><p>  SETB DATA_LINE</p><p><b>  RET</b></p><p><b>  ;</b></p><p>  ;從DS18B20中讀出溫度低位、高位和報警值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 ;延時18微妙</p><p><b>  DJNZ R3,$</b></p><p>  MOV C,DATA_LINE ;從DS18B20總線讀得一個BIT</p><p>  MOV R3,#23</p><p>

50、;  DJNZ R3,$ ;等待46微妙</p><p>  RRC A ;把讀得的位值環(huán)移給A</p><p>  DJNZ R2,RE01 ;讀下一個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>  ;;重新對 DS18B20 初始化</p><p>  ;將設定的溫度報警值寫入 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(報警上限)</p><p>  LCALL WRITE</p><p>

54、;  MOV A,TEMP_TL ;TL(報警下限)</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>  ;設置溫

57、度報警值</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 ;沒有到設定上限值,轉</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 ;沒有到設定下限值,轉</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 ;關閉中斷</p>

63、<p><b>  RET</b></p><p><b>  ;鍵延時子程序</b></p><p>  ;多次調用報警值顯示程序來延時</p><p>  TH_DEL: ;報警高值延時</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>  ;;實時溫度值與設定報警溫度值 TH 比較子程序</p&

65、gt;<p>  ;當實際溫度大于 TH 的設定值時,",繼電器關閉蜂鳴器報警</p><p>  ;當實際溫度小于 TH 的設定值時,”,繼電器吸合。</p><p>  TEMP_COMP:</p><p>  SETB TR0 ;啟動中斷</p><p>  MOV A,TEMP_TH

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

67、LI1 ;借位標志位C=1,轉</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 ;繼電器關閉</p><p><b>  CLR

69、 BEEP</b></p><p>  CLR TR0 ;關閉中斷</p><p><b>  RET</b></p><p>  ;把 DS18B20 暫存器里的溫度報警值拷貝到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 ;溫度報警值拷貝到EEROM</p><p>  LCALL WRITE</p><

71、;p><b>  RET</b></p><p>  ;把 DS18B20 EEROM 里的溫度報警值拷貝回暫存器</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 ;溫度報警值拷貝回暫存器</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=小數部分

75、 BCD</p><p>  MOV A,TEMPL ;整數部分</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 = 十位數 BCD</p><p>  MOV TEMPHC,A</p

78、><p>  MOV A,TEMPL</p><p>  ANL A,#0FH</p><p>  SWAP A ;TEMPLC HI = 個位數 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 = 百位數 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>  ; 小數部分碼表</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 ;小數位</p><p>  MOV A,TEMPLC</p><p><b>  SWAP A</b>&l

83、t;/p><p>  ANL A,#0FH</p><p>  MOV 71H,A ;個位</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、 ;十位數是0</p><p>  MOV A,TEMPHC</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOV 73H,#0AH ;符號位不顯示</p><p>  MOV 7

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

88、時間再逐位循環(huán)。</p><p>  DISP1: MOV R1,#70H ;指向顯示數據首址</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 ;取顯示數據到A</p><p>  MOV DPTR,#TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR

90、 ;查顯示數據對應段碼</p><p>  MOV P0,A ;段碼放入P0口</p><p><b>  MOV A,R5</b></p><p>  JB ACC.6,LOOP5 ;小數點處理</p><p><b>  CLR P0.7&

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

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

93、lt;p>  ENDOUT: MOV P0,#0FFH ;一次顯示結束,P0口復位</p><p>  MOV P2,#0FFH ;P2口復位</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延時程序,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é)十六進制轉 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>  ;報警值 TH 數據轉換</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></p><p>  ALERT_PLAY:</p><p>  MOV

102、 R1,#75H ;指向顯示數據首址</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 ;取顯示數據到A</p><p>  MOV DPTR,#ALERT_TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR ;查顯示數據對應段碼</p><p>  MOV P0,

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

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

106、 P0,#0FFH ;一次顯示結束,P0口復位</p><p>  MOV P2,#0FFH ;P2口復位</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延時程序,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 ;對 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)*延時10MS</p><p>  MOV R6,#50</p><p>  DEL1: MOV

溫馨提示

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

評論

0/150

提交評論