2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  第1節(jié) 前 言……………………………………………………………………………1</p><p>  1.1 多路溫度采集系統(tǒng)概述…………………………………………………………1</p><p>  1.2 本設(shè)計任務(wù)和主要內(nèi)容………………………………………………………1</

2、p><p>  第2節(jié) 系統(tǒng)總體設(shè)計…………………………………………………………………2</p><p>  2.1 系統(tǒng)概述………………………………………………………………………2</p><p>  2.2 系統(tǒng)工作原理…………………………………………………………………2</p><p>  第3節(jié) 系統(tǒng)的硬件設(shè)計…………………………

3、……………………………………3</p><p>  3.1 CPU的選用……………………………………………………………………3</p><p>  3.2 ADC0809………………………………………………………………………4</p><p>  3.2.1 ADC0809的內(nèi)部邏輯結(jié)構(gòu)………………………………………………4</p><p&g

4、t;  3.2.2引腳結(jié)構(gòu)…………………………………………………………………5</p><p>  第4節(jié) 軟件編輯思路及流程……………………………………………………………6</p><p>  軟件編輯思路…………………………………………………………………6</p><p>  具體軟件編程…………………………………………………………………6</p>

5、<p>  第5節(jié) 結(jié)束語…………………………………………………………………………18</p><p>  參考文獻(xiàn)…………………………………………………………………………………19</p><p>  基于單片機(jī)的多路溫度采集系統(tǒng)</p><p><b>  前 言 </b></p><p>  本課

6、題要設(shè)計一種多路溫度采集檢測系統(tǒng),采用目前低價位但技術(shù)十分成熟的AT89C52單片機(jī)作為內(nèi)核,選用電位器代替熱敏電阻為輸入元件,利用ADC0809轉(zhuǎn)換信號,送到顯示器(8個LED數(shù)碼管)循環(huán)顯示所測的四路溫度數(shù)值,并根據(jù)現(xiàn)場工業(yè)需要,設(shè)置了一定范圍的報警值,報警優(yōu)先顯示,利用按鍵消除報警??捎冒存I查看某一路的溫度值,查看時采集不中斷。軟件算法上采用了直接擬合的方法(通過電壓-溫度關(guān)系來計算溫度值),符合課題要求。本課題構(gòu)成的多路溫度系統(tǒng)

7、具有結(jié)構(gòu)簡單、價格低廉、測量精度高、量程寬的特點(diǎn),在很多場合具有一定的適用性。</p><p>  關(guān)鍵詞: AT89單片機(jī)、溫度采集、顯示、報警</p><p>  1.1 多路溫度采集系統(tǒng)概述 </p><p>  溫度采集在工業(yè)中的應(yīng)用越來越廣泛,而且要求也越來越高,我們結(jié)合本學(xué)期所學(xué)的《單片機(jī)原理與應(yīng)用技術(shù)》課程,利用實(shí)驗(yàn)室已有的AT89系列單片機(jī),作一個

8、簡易的可多路檢測溫度并能在超出范圍時報警的系統(tǒng)。該系統(tǒng)用AT89S52單片機(jī)作為內(nèi)核,利用ADC0809轉(zhuǎn)換芯片輔助,以八個電位器作為模擬溫度輸入信號,一個5路8位數(shù)碼管作為顯示設(shè)備??蓡为?dú)循環(huán)顯示每一路的溫度值,并且有鍵盤控制顯示每路的溫度值,這樣可以滿足在工業(yè)需要。</p><p>  本設(shè)計任務(wù)和主要內(nèi)容</p><p>  設(shè)計應(yīng)解決下列各主要問題:</p><

9、p>  1、8路溫度值(可用0~5V電壓值模擬0-100℃)的數(shù)據(jù)采集,經(jīng)A/D轉(zhuǎn)換后送入單片機(jī);</p><p>  2、8個鍵盤、8個LED數(shù)碼管顯示電路,用于循環(huán)顯示每一路的溫度值(顯示精確到小數(shù)點(diǎn)后一位),通過按鍵還可以選擇任意一路顯示。</p><p>  3、設(shè)溫度值的正常范圍,若當(dāng)前溫度值超過此范圍,則LED閃爍報警;</p><p>  4、通

10、過按鍵解除報警。</p><p><b>  系統(tǒng)總體設(shè)計</b></p><p><b>  2.1 系統(tǒng)概述</b></p><p>  根據(jù)設(shè)計要求的性能指標(biāo),本系統(tǒng)不僅要滿足一定精度的溫度采集的基本功能,而且由于測量的路數(shù)為8路,還存在多路信號的循環(huán)顯示問題,還要考慮溫度超限報警輸出的功能,同時系統(tǒng)還具有顯示當(dāng)前

11、各路的測量溫度值的功能和鍵盤選擇顯示路數(shù)的功能。</p><p>  2.2 系統(tǒng)工作原理</p><p>  根據(jù)本課題的設(shè)計目標(biāo)以及硬件的特點(diǎn),本系統(tǒng)的結(jié)構(gòu)原理圖如下圖2-1所示:</p><p>  圖2-1  系統(tǒng)結(jié)構(gòu)原理圖</p><p>  圖2-2 系統(tǒng)原理圖</p><p>  第3節(jié)

12、 系統(tǒng)的硬件設(shè)計</p><p>  一個溫度采集系統(tǒng),包括被采集信息的采集、轉(zhuǎn)換、顯示等環(huán)節(jié),在本多路溫度采集系統(tǒng)中,包括A/D轉(zhuǎn)換電路的設(shè)計,CPU的選型以及包括顯示電路,存儲器、報警電路、電源電路等設(shè)計。</p><p>  3.1 CPU的選用</p><p>  目前,生產(chǎn)單片機(jī)的廠商有很多,尤其是近年來微電子技術(shù)、計算機(jī)技術(shù)的飛速發(fā)展,比較著名的有Int

13、el、Philips、Microchip、Motorola、Zilog、Atmel等半導(dǎo)體企業(yè)。</p><p>  在上述著名的半導(dǎo)體企業(yè)產(chǎn)品中,尤其在工業(yè)測控場合,運(yùn)用較多的為Intel公司的MCS-51系列,Microchip公司的PIC系列,如果作單路溫度測量,恐怕要選擇該系列的CPU,但由于本系統(tǒng)涉及的是多路,各路報警的輸出信號需要單獨(dú)輸出,而且考慮信號調(diào)理電路的切換等還需要不少的控制線,因此該系列的少

14、引腳特點(diǎn)就不適合本設(shè)計的需要,因此,本設(shè)計還是選用了ATMEL最新的8位單片機(jī)AT89S52作為本系統(tǒng)的CPU。下面簡單地介紹一下89S52。</p><p>  功能特性描述:AT89S52 是一種低功耗、高性能 CMOS8 位微控制器,具有8K 在系統(tǒng)可編程 Flash 存儲器。使用 Atmel 公司高密度易失性存儲器技術(shù)制造,與工業(yè)  80S52 產(chǎn)品指令和引腳完全兼容。片上 Flash 允許程序

15、存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng)可編程 Flash,使得 AT89S52 為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。</p><p>  89S52 具有以下標(biāo)準(zhǔn)功能:8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個 16 位定時器/計數(shù)器,一個 6 向量 2 級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶

16、振及時鐘電路。另外,AT89S52 可降至  0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。</p><p>  圖3-1   89C52的引腳  </p><

17、p>  3.2 ADC0809</p><p>  ADC0809是把采集的模擬量轉(zhuǎn)換成數(shù)字量并傳送到89C52中。它是帶有8位A/D轉(zhuǎn)換器、8路多路開關(guān)以及微處理機(jī)兼容的控制邏輯的CMOS組件并且還是逐次逼近式A/D轉(zhuǎn)換器,可以和單片機(jī)直接接口。  </p><p>  3.2.1  ADC0809的內(nèi)部邏輯結(jié)構(gòu)</p><p>

18、;  圖3-2  ADC0809的內(nèi)部邏輯結(jié)構(gòu)</p><p>  由圖3-2可知,ADC0809由一個8路模擬開關(guān)、一個地址鎖存與譯碼器、一個A/D轉(zhuǎn)換器和一個三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。</p><p> 

19、 3.2.2 引腳結(jié)構(gòu)</p><p>  圖3-4 ADC0809的引腳</p><p>  第4節(jié) 軟件編輯思路及流程</p><p>  4.1 軟件編輯思路 </p><p>  軟件編輯思路:數(shù)字顯示----算法----一路采集----一路采集轉(zhuǎn)換及顯示---八路采集轉(zhuǎn)換及顯示----鍵盤小子程序----八路循環(huán)采集且鍵盤

20、控制------八路循環(huán)采集且鍵盤控制和報警。</p><p>  4.2 具體軟件編程</p><p><b>  ORG 0000H</b></p><p>  AJMP MAIN;</p><p>  BUF  EQU  40H ;顯示緩沖區(qū)</p><

21、p>  MOTATA  EQU  50H ;AD0809數(shù)據(jù)存放于此</p><p>  WH    EQU  48H ;溫度上限數(shù)據(jù)存放區(qū)</p><p>  WL  EQU  58H ;溫度下限數(shù)據(jù)存放區(qū)</p><p> 

22、 BUFF1S  EQU 38H;</p><p>  BUFF1MS  EQU  39H;</p><p>  BUFF5S  EQU  3AH;</p><p>  INNAL  EQU  3CH;</p><p>  ALARMBUF  EQU 33H<

23、;/p><p>  BUFFH     EQU 31H ;八路LED報警信號 紅燈</p><p>  BUFFL     EQU  32H ;八路LED報警信號 綠燈</p><p>  BACK  EQU  34H ;利用與

24、BUF地址的重復(fù)修改路數(shù)</p><p>  CHANNEL  EQU  35H</p><p>  TEMPBUF  EQU  36H</p><p>  READ_AD  BIT  30H ;是否要讀寫AD0809的標(biāo)志位</p><p>  DISPIN &

25、#160; BIT  31H;</p><p>  SETWARN BIT  32H</p><p>  SOLIDISP  BIT  33H</p><p>  ENTER    BIT   P1.2</p><p>  SETH  BIT&

26、#160;  35H</p><p>  SETL   BIT   36H</p><p>  SETIN     BIT   P1.3</p><p>  ABYTEIN   BIT  p1.1</p><

27、p><b>  ORG 0003H</b></p><p>  AJMP INT_0;</p><p><b>  ORG 000BH</b></p><p>  LJMP INT_T0</p><p><b>  ORG 0100H</b></p><

28、;p>  MAIN: MOV  SP,   #70H        ;設(shè)置堆棧位置</p><p>  SETB   READ_AD         ;初始化標(biāo)志位</p><p>

29、  SETB  EA               ;開總中斷</p><p>  CLR  SETWARN           ;清除溫度設(shè)置標(biāo)志位<

30、/p><p>  SETB  SETIN            ;當(dāng)其為0時表示要進(jìn)行通道數(shù)采集</p><p>  LCALL  INITWARN        ;初始化溫度上下限&l

31、t;/p><p>  LCALL  INIT_2          ;初始化2#工作寄存器區(qū)</p><p>  ;主循環(huán),啟動ADC0809,從第一個通道開始讀取</p><p>  LOOP:  JNB  READ_AD,DIS

32、        ;若不讀AD0809,則調(diào)顯示,次標(biāo)志位也表示1s延時結(jié)束</p><p>  ;延時已完畢,則計算要顯示的溫度路數(shù)及溫度值送緩沖區(qū)</p><p>  LCALL  WARN          

33、  ;報警</p><p>  CLR  READ_AD           ;清楚標(biāo)志位</p><p>  LCALL  READ         

34、   ;讀取一次AD0809</p><p>  LCALL  DLY1MS          ;此處加1ms的延時,否則數(shù)碼管會因中斷的存在而產(chǎn)生閃動</p><p>  LCALL  ADJUST   

35、60;      ;調(diào)整顯示</p><p>  ;在此完成鍵盤檢測及顯示任務(wù)</p><p>  DIS: LCALL  DISPLAY;</p><p>  LCALL  KEYCHK        &

36、#160;  ;調(diào)鍵盤檢測子程序</p><p>  CJNE  A,#0FFH, AKEY     ;若有鍵按下,則跳轉(zhuǎn)</p><p>  LJMP  LOOP           

37、60;  ;若沒有則循環(huán)</p><p>  AKEY:  LCALL  KEYFUNC;</p><p>  CJNE   A,#0FFH,CALLRPD   ;驗(yàn)證按下的鍵是否為數(shù)字鍵,若是則處理輸入</p><p>  LJMP  LOOP  

38、0;            ;不為數(shù)字鍵則返回循環(huán)</p><p>  CALLRPD: LCALL  KEYRPD;</p><p>  SJMP  LOOP;</p><p>  ;*********初始化2#工作寄存器區(qū)

39、************</p><p>  INIT_2: PUSH  PSW               ;初始化2號工作寄存器區(qū)</p><p>  SETB  RS1;</p><p>  

40、CLR   RS0               ;選擇2號工作寄存器區(qū)</p><p>  MOV  R2, #00H          

41、; ;存放要顯示的路數(shù)</p><p>  CLR  DISPIN             ;初始化路顯示標(biāo)志位;</p><p>  MOV  R0, #MOTATA     &#

42、160;  ;R0充當(dāng)指向MOTATA的指針</p><p><b>  POP  PSW;</b></p><p><b>  RET;</b></p><p>  ;*******調(diào)整指針*********</p><p><b>  PADJUST:&l

43、t;/b></p><p>  ONADJUST: DJNZ  R2,INADJUST;</p><p><b>  RET;返回</b></p><p>  INADJUST: INC  R0;</p><p>  SJMP  ONADJUST;</p><p&g

44、t;  ;*************計算并調(diào)整顯示緩存區(qū)的數(shù)據(jù)*******</p><p>  ADJUST: PUSH  PSW ;保護(hù)</p><p>  SETB  RS1;</p><p>  CLR   RS0      &#

45、160;         ;選擇2號工作寄存器區(qū)</p><p>  CJNE  R2,#08H,NE08;</p><p>  GE08: MOV  R2,#00H;</p><p>  MOV  R0,#MOTATA;</p>&

46、lt;p>  SJMP LESS08;</p><p>  NE08: JNC GE08;</p><p>  LESS08: JB  SETWARN,  DISPWARN   ;若在設(shè)定溫度,則也不調(diào)整顯示</p><p>  JB  SOLIDISP,   ADJEND

47、0;  ;若為固定顯示,則跳過調(diào)整</p><p>  JB  DISPIN,DLY_5S        ;若有鍵盤值輸入,則延時5秒來暫時固定顯示</p><p>  INC  R0         

48、         ;調(diào)整R0,使其指向下一個要顯示的溫度值地址</p><p>  INC  R2                  ;調(diào)整R2&

49、lt;/p><p>  mov  channel,r2;</p><p>  SJMP  ADJEND;</p><p>  DLY_5S: DJNZ  BUFF5S,ADJEND;</p><p>  CLR  DISPIN;</p><p>  LJMP  ADJEND

50、</p><p>  DISPWARN: JB  SETH,DISHIGH      ;若在調(diào)整上限值則跳轉(zhuǎn)到上限溫度顯示</p><p>  JB  SETL,DISLOW       ;若在調(diào)整下限值則跳轉(zhuǎn)到下限溫度顯示</p>&

51、lt;p>  SJMP   ADJEND         ;若不在調(diào)整則顯示輸入路數(shù)的當(dāng)前檢測溫度值</p><p>  DISLOW: MOV  R0,#WL           

52、;   ;將指針調(diào)整到溫度上限存放區(qū)</p><p>  SJMP  ADAPT              ;跳轉(zhuǎn)到指針調(diào)整處</p><p>  DISHIGH:MOV  R0,#WH &#

53、160;            ;將指針調(diào)整到溫度下限存放區(qū)</p><p>  ADAPT: MOV  R2,CHANNEL           ;調(diào)整R2的值為通道數(shù)<

54、;/p><p>  LCALL  PADJUST            ;指針指向R2</p><p>  ADJEND: LCALL  LOADTEMP        

55、60; ;將當(dāng)前指針指向數(shù)據(jù)放到緩沖區(qū)</p><p><b>  POP  PSW;</b></p><p><b>  RET;</b></p><p>  ;**************** 將當(dāng)前指針指向數(shù)據(jù)放到緩沖區(qū)********</p><p>  LOADTEMP: LC

56、ALL  COMPUTE        ;調(diào)用COMPUTE得到要顯示的當(dāng)前溫度值</p><p>  MOV  R1,#BUF;</p><p>  MOV  A,channel;</p><p>  MOV  @R1,A  

57、          ;將路數(shù)送入顯示緩沖區(qū)</p><p>  INC  R1               ;調(diào)整到要顯示溫度值的緩沖區(qū)</p>

58、<p>  JB  SETH,DISPH        ;若設(shè)定溫度上限,則顯示H</p><p>  JB  SETL,DISPL        ;若設(shè)定溫度下限,則顯示L</p><p>  M

59、ov  a,#10h           ;消隱</p><p>  SJMP  DISP2</p><p>  DISPH:  MOV  A,#11H</p><p>  SJMP  DISP2</p

60、><p>  DISPL:  MOV  A,#12H</p><p>  DISP2:  mov  @r1,a;</p><p><b>  INC  R1;</b></p><p>  MOV  A,R5;</p><p>  ANL

61、60; A,#0FH;</p><p>  MOV  @R1,A                ; 最低位</p><p><b>  INC  R1;</b></p><

62、;p>  MOV  A,R5;</p><p>  ANL  A,#0F0H;</p><p><b>  SWAP A;</b></p><p>  MOV  @R1,A           

63、60;    ;次低位 ,應(yīng)當(dāng)在此處添加小數(shù)點(diǎn)</p><p><b>  INC  R1;</b></p><p>  MOV  A,R4;</p><p>  ANL  A,#0FH;</p><p>  MOV  @R1,A 

64、                ;次高位</p><p><b>  INC  R1;</b></p><p>  MOV  A,R4;</p><p>  ANL&

65、#160; A,#0F0H;</p><p><b>  SWAP  A;</b></p><p>  MOV  @R1,A                 ;最高位</p&

66、gt;<p><b>  RET;</b></p><p>  ;*************讀取一次0809的內(nèi)容***********</p><p>  READ: MOV  R6,#08H            

67、60;   ;用中斷的方式讀取一次AD0809</p><p>  MOV  R0,#MOTATA             ;0號工作寄存器區(qū)</p><p>  MOV  DPTR,#0FFFEH  

68、         ;A0作為地址</p><p>  MOV  A,#00H                 ;表示先檢測第一個通道</p>

69、<p>  MOV  INNAL,A                ;將檢測的路數(shù)保存</p><p>  MOVX  @DPTR,A       

70、0;       ;開啟ADC0809</p><p>  SETB   EX0              ;開外部中斷0</p><p>  RET &

71、#160;                       ;若已讀取完畢,則返回</p><p>  ;**********************顯示子程序************<

72、;/p><p>  ;要顯示的數(shù)據(jù)入口為BUF(6位);1號工作寄存器區(qū)</p><p>  DISPLAY: PUSH  PSW          ;壓棧保護(hù)</p><p>  SETB  RS0;</p><p>  

73、CLR   RS1           ;切換工作寄存器區(qū)到 1</p><p>  MOV  R0,#BUF</p><p>  MOV  R7,#06H</p><p>  MOV  R1,#01H&l

74、t;/p><p>  NEXTDIS: MOV  A,@R0</p><p>  MOV  DPTR,#TABLE</p><p>  MOVC  A,@A+DPTR ;取段碼</p><p>  CJNE  R7,#03H,NODIP ;顯示小數(shù)點(diǎn)</p><p&

75、gt;  ANL   A,#07FH</p><p>  NODIP:  MOV  DPTR,#0FFDCH</p><p>  MOVX  @DPTR,A   ;送段碼</p><p>  MOV  DPTR,#0FFDDH</p><

76、p><b>  MOV  A,R1</b></p><p>  MOVX  @DPTR,A    ;送位碼</p><p><b>  RL   A</b></p><p><b>  MOV  R1,A<

77、;/b></p><p>  LCALL  DLY1MS</p><p>  INC  R0         ;調(diào)整顯示</p><p>  DJNZ  R7,NEXTDIS;</p><p><b&g

78、t;  POP  PSW;</b></p><p><b>  RET</b></p><p>  ;**************************延時1ms****************************</p><p>  DLY1MS: MOV  BUFF1MS,#0F9H</p>

79、<p>  DJNZ  BUFF1MS,$</p><p><b>  RET</b></p><p>  ;*************************按鍵檢查子程序********************</p><p>  KEYCHK:MOV  A,#00H   &#

80、160;  ;查看是否有鍵按下</p><p>  MOV  DPTR,#0FFDDH</p><p>  MOVX  @DPTR,A</p><p>  MOV  DPTR,#0FFDEH</p><p>  MOVX  A,@DPTR</p><p><b&g

81、t;  CPL  A</b></p><p>  ANL  A,#0FH</p><p>  JNZ  TEST      ;若有鍵按下則檢測,無則返回。</p><p>  MOV  A,#0FFH</p><p><b> 

82、 RET</b></p><p>  TEST: LCALL KEYTEST</p><p>  MOV  BACK,A</p><p>  LCALL DISPLAY</p><p>  LCALL KEYTEST</p><p>  CJNE  A,B

83、ACK,NOKEYD</p><p>  WAIT: LCALL  DISPLAY;</p><p>  MOV  A,#00H       ;等待鍵抬起</p><p>  MOV  DPTR,#0FFDDH</p><p>  MOVX&#

84、160; @DPTR,A</p><p>  MOV  DPTR,#0FFDEH</p><p>  MOVX  A,@DPTR</p><p><b>  CPL  A</b></p><p>  ANL  A,#0FH</p><p>  JNZ

85、0; WAIT     ;若鍵未抬起,則繼續(xù)等待</p><p>  MOV  A,BACK ;將檢測到的鍵值送給A</p><p>  SJMP  CHKEND</p><p>  NOKEYD: MOV A,#0FFH</p><p>  CHKEND: RET</p&

86、gt;<p>  ;**********************按鍵檢測子程序********************</p><p>  KEYTEST: MOV  R0,#0FEH</p><p>  MOV  R1,#00H</p><p>  MOV  R2,#08H</p><p>  N

87、EXTL: MOV  A,R0</p><p>  MOV  DPTR,#0FFDDH</p><p>  MOVX  @DPTR,A</p><p>  MOV  DPTR,#0FFDEH</p><p>  MOVX  A,@DPTR</p><p><b

88、>  CPL  A</b></p><p>  ANL  A,#0FH</p><p>  JNZ   KEYDWN     ;看按下的鍵是否在當(dāng)前列</p><p>  DJNZ  R2,GOSCAN  ;看是否掃描完畢,若沒有則調(diào)整繼續(xù)

89、掃描</p><p>  SJMP  TSTEND     ;若掃描完畢,則返回。</p><p>  GOSCAN: MOV  A,R0</p><p><b>  RL   A</b></p><p><b>  M

90、OV  R0,A</b></p><p><b>  INC  R1</b></p><p>  SJMP  NEXTL</p><p>  KEYDWN: MOV  R3,#00H</p><p>  LL0: RRC  A</p>

91、<p><b>  JC  LL1</b></p><p><b>  INC  R3</b></p><p><b>  SJMP  LL0</b></p><p>  LL1:  MOV  A,R3</p><p

92、><b>  MOV  B,A</b></p><p><b>  MOV  A,#8</b></p><p><b>  MUL  AB</b></p><p>  ADD  A,R1  ;A中返回的為按下的鍵的代碼</p>&l

93、t;p><b>  RET</b></p><p>  TSTEND: MOV  A,#0FFH</p><p><b>  RET</b></p><p>  ;***********延時1s*******************</p><p>  DLY_1S: MOV T

94、MOD,#01H;</p><p>  SETB  ET0;</p><p>  MOV  TH0,#0F0H    ;10ms</p><p>  MOV  TL0,#0D8H;</p><p>  MOV  buff1s,#100;</p><p&g

95、t;  SETB  TR0;</p><p><b>  RET;</b></p><p>  ;*********定時器T0中斷服務(wù)程序**********</p><p>  INT_T0:CLR  TR0 ;關(guān)計數(shù)器</p><p>  DJNZ  buff1s ;NEXT_1

96、0MS;若不到1s繼續(xù)</p><p>  SETB  READ_AD;若到了,則置標(biāo)志位</p><p>  cpl  p1.0;</p><p><b>  clr  et0;</b></p><p>  SJMP  T0_END;</p><p>  

97、NEXT_10MS: MOV  TMOD,#01H</p><p>  MOV  TH0,#0F0H    ;定時10ms</p><p>  MOV  TL0,#0D8H</p><p><b>  SETB  TR0</b></p><p>  

98、T0_END:   RETI</p><p>  ;*************計算子程序,完成一路計算****************</p><p>  COMPUTE: MOV  A,@R0;</p><p>  MOV  B,#04H ;測得的溫度數(shù)乘以4</p><p><b>

99、  MUL  AB;</b></p><p>  MOV  R6,B;</p><p>  MOV  R7,A;</p><p>  LCALL  HB2 ;調(diào)用子程序轉(zhuǎn)化為壓縮BCD碼,R4,R5為出口</p><p><b>  RET;</b></p&g

100、t;<p>  HB2: CLR ;BCD碼初始化</p><p><b>  MOV R4,A</b></p><p><b>  MOV R5,A</b></p><p>  MOV R3,#10H ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)</p><p>  HB3:

101、 MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中</p><p><b>  RLC A</b></p><p><b>  MOV R7,A</b></p><p><b>  MOV A,R6</b></p><p><b>  RLC A<

102、;/b></p><p><b>  MOV R6,A</b></p><p>  MOV A,R5 ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2</p><p><b>  ADDC A,R5</b></p><p>  DA A ;十進(jìn)制調(diào)整</p><p&

103、gt;<b>  MOV R5,A</b></p><p><b>  MOV A,R4</b></p><p><b>  ADDC A,R4</b></p><p><b>  DA A</b></p><p><b>  MOV R4,A&

104、lt;/b></p><p>  DJNZ R3,HB3 ;處理完16bit</p><p><b>  RET;</b></p><p>  ;********報警子程序*********</p><p>  WARN: MOV  R0,#MOTATA ;R0指向MOTATA</p>

105、<p>  MOV  R1,#WH ; R1指向WH</p><p>  MOV  R7,#08H    ;R7為循環(huán)次數(shù)</p><p>  WLOOP:MOV  A,@R0</p><p>  MOV  ALARMBUF,@R1 ;與指令相適應(yīng)的必要中轉(zhuǎn)</p&

106、gt;<p>  CJNE  A,ALARMBUF,RED</p><p>  GEHIGH: CLR C      ;紅燈信號</p><p>  LJMP  NEXTRED</p><p>  RED : JNC  GEHIGH  

107、0;    ;讀入數(shù)值比預(yù)設(shè)大</p><p><b>  SETB  C</b></p><p>  NEXTRED:MOV  A,BUFFH</p><p>  RLC  A   ;壓入紅燈信號</p><p>  MOV&

108、#160; BUFFH,A</p><p>  MOV  A,R1  ;調(diào)整R1指向WL</p><p>  ADD  A,#10H</p><p><b>  MOV  R1,A</b></p><p>  MOV  ALARMBUF,@R1</p>

109、;<p>  MOV  A,@R0</p><p>  CJNE  A,ALARMBUF,GREEN</p><p>  LSLOW: CLR  C       ;綠燈信號</p><p>  LJMP  NEXTGRN</p>&l

110、t;p>  GREEN: JC LSLOW      ;讀入數(shù)值比預(yù)設(shè)小</p><p><b>  SETB C</b></p><p>  NEXTGRN:MOV A,BUFFL</p><p><b>  RLC A</b></p><p

111、>  MOV BUFFL,A</p><p><b>  MOV A,R1</b></p><p>  SUBB A,#10H</p><p><b>  MOV R1,A</b></p><p><b>  INC R1</b></p><p>

112、<b>  INC R0</b></p><p>  DJNZ R7,WLOOP</p><p>  MOV  A,BUFFH ;將紅燈報警信息送出</p><p>  MOV  DPTR,#0FBFFH ;紅燈信號對應(yīng)地址p2.2</p><p>  MOVX  @D

113、PTR,A</p><p>  MOV  A,BUFFL ;將綠燈報警信息送出</p><p>  MOV  DPTR,#0F7FFH ;綠燈信號對應(yīng)地址p2.3</p><p>  MOVX  @DPTR,A</p><p><b>  RET</b></p&g

114、t;<p>  ;************鍵位調(diào)整程序************</p><p>  KEYFUNC: MOV  DPTR,#KEYTABLE</p><p>  ANL   A,#0FH ;消除鍵位干擾</p><p>  MOVC  A,@A+DPTR ;調(diào)整跳轉(zhuǎn)位置<

115、;/p><p>  CJNE  A,#0AH,K1</p><p>  MOV   A,#0FFH</p><p>  SETB  SETIN</p><p>  SETB  SETH ;表示要設(shè)定溫度報警上限值</p><p>  CLR &#

116、160; SETL</p><p><b>  RET;</b></p><p>  K1:   CJNE  A,#04H,K2</p><p>  MOV   A,#0FFH</p><p>  SETB  SETIN</p><p>

117、  SETB  SETL ;表示要設(shè)定溫度報警下限值</p><p>  CLR   SETH</p><p><b>  RET</b></p><p>  K2:   CJNE A,#0FH,K3</p><p>  MOV  A,#0FF

118、H</p><p>  JB  SETWARN,ENDISP</p><p>  SETB  SETWARN</p><p>  CLR  ABYTEIN</p><p><b>  CLR  SETH</b></p><p><b>  CLR&

119、#160; SETL</b></p><p>  CLR  ENTER</p><p><b>  RET</b></p><p>  ENDISP: CLR  SETWARN;</p><p>  CLR  SETH;</p><p>  CLR

120、0; SETL;</p><p><b>  RET;</b></p><p>  K3:  CJNE A,#0EH,K4</p><p>  MOV  A,#0FFH</p><p>  JB  SOLIDISP,ENSOLID;</p><p>  S

121、ETB  SOLIDISP</p><p><b>  RET</b></p><p>  ENSOLID: CLR  SOLIDISP</p><p><b>  RET</b></p><p>  K4:   CJNE A,#0CH,K5</p>

122、;<p>  MOV  A,#0FFH;</p><p>  CLR  SETIN;</p><p>  CLR  SETH;</p><p>  CLR  SETL;</p><p><b>  RET;</b></p><p>  K5:&

123、#160; CJNE A,#0DH,K6</p><p>  MOV   A,#0FFH</p><p>  SETB   ENTER</p><p><b>  RET;</b></p><p>  K6:   RET</p><p&g

124、t;  KEYTABLE:  db 07h,04h,08h,05h,09h,06,0Ah</p><p>  ;  0,   1 ,2  ,3  ,4  ,5  ,6</p><p>  db 04h,01h,00h,02h,0Fh,03h,0Eh,0Ch,0Dh</p><p>  ;

125、  7 ,8  ,9   ,10 ,11,12, 13, 14  ,15</p><p>  ;*********實(shí)現(xiàn)對各個設(shè)定鍵的響應(yīng)**********</p><p>  KEYRPD: JB  SETWARN,WARNSET ;根據(jù)SOLIDISP的值調(diào)顯示</p><p>  PUSH 

126、 PSW;</p><p>  SETB  RS1;</p><p>  CLR   RS0 ;選擇2號工作寄存器區(qū)</p><p>  MOV   R0,#MOTATA;</p><p>  MOV  CHANNEL,A ;將讀入的值放入通道緩沖<

127、;/p><p>  MOV  R2,A;</p><p>  MOV  BACK,A;</p><p>  MOV  BUF,A;</p><p>  LCALL   PADJUST ;調(diào)整R0,使其指向R2通道的溫度值</p><p>  SETB  D

128、ISPIN ;5s計時的標(biāo)志位</p><p>  MOV  BUFF5S,#05H ;初始化5s計時</p><p>  MOV  R2,CHANNEL;</p><p>  POP   PSW;</p><p>  RET ;調(diào)整完畢,返回<

129、/p><p>  WARNSET:JNB SETIN,INSET ;若未設(shè)定通道,先進(jìn)行設(shè)定</p><p>  LJMP  SETTEMP ;若已設(shè)定則跳轉(zhuǎn)到溫度設(shè)定處</p><p>  INSET: MOV  CHANNEL,A</p><p><b>  RET</b&g

130、t;</p><p>  SETTEMP:JB  SETH,HIGHSET ;設(shè)定溫度警告上限</p><p>  JB  SETL,LOWSET ;設(shè)定溫度警告下限</p><p><b>  RET</b></p><p>  HIGHSET: LCALL  READTEM

131、P</p><p>  MOV  R0,#WH ;調(diào)整R0使其指向溫度上限存儲區(qū)</p><p>  LJMP  STORESET</p><p>  LOWSET: LCALL  READTEMP</p><p>  MOV  R0,#WL ; 調(diào)整R0使其指向溫度下限存

132、儲區(qū)</p><p>  STORESET:MOV   A ,TEMPBUF;</p><p>  LCALL  COMPACT ;將輸入的數(shù)轉(zhuǎn)化為16進(jìn)制數(shù)存儲(未改變R0)</p><p>  MOV  R2,CHANNEL ;送入要調(diào)整到的位置</p><p>  LCALL&#

133、160; PADJUST ;調(diào)用調(diào)整子程序</p><p>  MOV  @R0 ,A ; 將溫度值送到相應(yīng)的位置</p><p><b>  RET</b></p><p>  READTEMP: JB  ABYTEIN,READLOW;若已經(jīng)有一位讀入則讀取低位</p><p&

134、gt;  READHIGH: SWAP  A;</p><p>  MOV  TEMPBUF,A;</p><p>  SETB  ABYTEIN;</p><p><b>  RET;</b></p><p>  READLOW: ORL  A,TEMPBUF;</p>

135、;<p>  MOV  TEMPBUF,A;</p><p>  CLR  ABYTEIN;</p><p><b>  RET;</b></p><p>  ;**********將輸入溫度值轉(zhuǎn)化為16進(jìn)制數(shù)**********</p><p>  COMPACT: MOV 

136、 R2,A;</p><p>  ANL  A,#0FH ;分離出十進(jìn)制數(shù)的低位</p><p><b>  SWAP  A;</b></p><p>  MOV  R3,A;</p><p>  MOV  A,R2;</p><p>  ANL

137、60; A,#0F0H ;分離出十進(jìn)制數(shù)的高位</p><p><b>  SWAP  A;</b></p><p>  MOV  R2,A;</p><p>  LCALL  BH2 ;將雙字節(jié)BCD碼轉(zhuǎn)化為十六進(jìn)制整數(shù)</p><p>  MOV  A,R2

138、 ;將R2R3中的數(shù)除以4</p><p><b>  CLR  C;</b></p><p><b>  RRC  A;</b></p><p>  MOV  R2,A;</p><p>  MOV  A,R3;</p><p>&

139、lt;b>  RRC  A;</b></p><p><b>  MOV  R3,A</b></p><p>  MOV  A,R2;</p><p><b>  RRC  A;</b></p><p><b>  MOV 

140、; A,R3</b></p><p>  RRC  A ;轉(zhuǎn)換完畢A中為要得到的16進(jìn)制數(shù)</p><p><b>  RET;</b></p><p>  ;*********雙字節(jié)BCD碼整數(shù)轉(zhuǎn)換成雙字節(jié)十六進(jìn)制整數(shù)*********</p><p>  BH2: MOV A,R3

141、 ;將低字節(jié)轉(zhuǎn)換成十六進(jìn)制</p><p>  LCALL BCDH</p><p><b>  MOV R3,A</b></p><p>  MOV A,R2 ;將高字節(jié)轉(zhuǎn)換成十六進(jìn)制</p><p>  LCALL BCDH</p><p>  MOV B,#

142、100 ;擴(kuò)大一百倍</p><p><b>  MUL AB</b></p><p>  ADD A,R3 ;和低字節(jié)按十六進(jìn)制相加</p><p><b>  MOV R3,A</b></p><p><b>  CLR A</b></p&

143、gt;<p><b>  ADDC A,B</b></p><p><b>  MOV R2,A</b></p><p><b>  RET</b></p><p>  ;*******單字節(jié)BCD碼整數(shù)轉(zhuǎn)換成單字節(jié)十六進(jìn)制整數(shù)</p><p>  BCDH: M

144、OV B,#10H ;分離十位和個位</p><p><b>  DIV AB</b></p><p>  MOV R4,B ;暫存?zhèn)€位</p><p>  MOV B,#10 ;將十位轉(zhuǎn)換成十六進(jìn)制</p><p><b>  MUL AB</b></p>&l

145、t;p>  ADD A,R4 ;按十六進(jìn)制加上個位</p><p><b>  RET</b></p><p>  ;********初始化WH和WL********</p><p>  INITWARN: MOV  R0,#WH;</p><p>  MOV  A,#0AFH;&l

146、t;/p><p>  MOV  R7,#08H;</p><p>  INITHIGH: MOV  @R0,A;</p><p>  DJNZ  R7,HIGHINC;</p><p>  SJMP  ENDHIGH;</p><p>  HIGHINC: INC R0;<

147、;/p><p>  SJMP  INITHIGH;</p><p>  ENDHIGH: MOV  R0,#WL;</p><p>  MOV  A,#04BH;</p><p>  MOV  R7,#08H;</p><p>  INITLOW: MOV  @R0

148、,A;</p><p>  DJNZ  R7,LOWINC;</p><p>  SJMP  ENDLOW;</p><p>  LOWINC: INC R0;</p><p>  SJMP  INITLOW;</p><p>  ENDLOW: RET;</p>

149、<p>  ;***********外部中斷0的服務(wù)程序**********</p><p>  ;完成一個循環(huán)的數(shù)據(jù)讀取</p><p>  INT_0: CLR  EX0 ; 若轉(zhuǎn)換完畢關(guān)中斷</p><p>  MOV  DPTR,#0FFFEH;</p><p>  MOVX

150、0; A,@DPTR ;讀取轉(zhuǎn)換完畢后的數(shù)</p><p>  MOV  @R0,A ;將轉(zhuǎn)換完畢的數(shù)保存</p><p>  DJNZ  R6,READNEXT;若未讀取完畢則調(diào)整后繼續(xù)</p><p>  LCALL  DLY_1S;</p><p>  SJMP  EX0_END;&

151、lt;/p><p>  READNEXT: INC  R0;</p><p>  INC  INNAL;</p><p>  MOV  A,INNAL;</p><p>  MOVX   @DPTR,A ;再次啟動AD0809</p><p>  SETB 

152、EX0 ;開外部中斷0</p><p>  EX0_END:  RETI;</p><p>  TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H</p><p>  DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH</p><p>  DB

153、60; 0FFH,089H,0C7H;</p><p><b>  END</b></p><p><b>  結(jié) 束 語</b></p><p>  為了完成這次設(shè)計讓我專研了很久,通過這次的設(shè)計使我深刻知道了原來學(xué)好一個東西真的很不容易,要花很多時間的研究和去請教別人,也使我知道了 原來我們的知識是多么的缺乏。<

154、/p><p>  但是這個次的設(shè)計總體自己覺得還是不錯的 ,但是也有些瑕疵,我相信在我以后不斷的學(xué)習(xí),慢慢的讓我去把自己的不足彌補(bǔ)上來 是自己的能力漸漸的上升!</p><p>  不僅僅這次多設(shè)計的了解 也多如何去寫好個文本文檔有了一個體驗(yàn) ,也給自己有了一個很深刻的訓(xùn)練!使我知道了只有每做一件事情都要認(rèn)真仔細(xì)才能成功!參考文獻(xiàn)</p><p>  [1]王新賢,通

155、用集成電路速查手冊, 山東: 科學(xué)技術(shù)出版社,2004</p><p>  [2]李逍華,李玲,牛艷,單片機(jī)應(yīng)用系統(tǒng)設(shè)計——入門向?qū)c設(shè)計實(shí)例, 武漢: 武漢大學(xué)出版社,2003.3</p><p>  [3]魏立峰,王寶興,單片機(jī)原理與應(yīng)用技術(shù), 北京: 北京大學(xué)出版,2006.8 [4] 74HC74,74HC02,74HC164,74HC165使用手冊,http://www.eewo

溫馨提示

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

最新文檔

評論

0/150

提交評論