找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6418|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)匯編語言溫度控制系統(tǒng)設(shè)計(jì)程序仿真-智能儀器儀表綜合實(shí)訓(xùn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是一個(gè)51單片機(jī)的溫度控制系統(tǒng),包括proteu仿真程序、代碼和文檔。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


目錄
一、系統(tǒng)設(shè)計(jì)第 1 頁
系統(tǒng)總體設(shè)計(jì)方案第 1 頁                                                                                 
溫度信號采集電路選擇和數(shù)據(jù)處理第 3 頁
軟件設(shè)計(jì)第 3 頁
二、單元電路設(shè)計(jì)第 5 頁
溫度信號采集電路第 5 頁
步進(jìn)電機(jī)電路 第 5 頁
液晶顯示模塊 第 6 頁
晶振復(fù)位電路第 7 頁   
三、總結(jié)體會(huì)第 7 頁
四、參考文獻(xiàn)第 8 頁
附錄:程序清單第 8 頁

一、系統(tǒng)設(shè)計(jì)(一) 系統(tǒng)總體設(shè)計(jì)方案
設(shè)計(jì)框圖如下所示:
圖1  系統(tǒng)總體設(shè)計(jì)框圖





總電路圖如下:

圖2  系統(tǒng)總電路圖
簡單功能說明:
一個(gè)顯示實(shí)時(shí)溫度的小系統(tǒng),可以自行設(shè)定高溫報(bào)警和低溫報(bào)警值,實(shí)現(xiàn)溫度控制電機(jī)帶動(dòng)外圍器件功能。本系統(tǒng)通過溫度傳感器DS18B20實(shí)現(xiàn)對溫度數(shù)據(jù)的采集,數(shù)據(jù)處理后顯示到液晶屏上,通過數(shù)據(jù)處理,溫度值精確度為0.1。

簡單操作方法:
系統(tǒng)上電后液晶顯示實(shí)時(shí)溫度,通過按鍵可以設(shè)定高低溫限定值:
A.按下K1,顯示系統(tǒng)的高低溫限定值;
B.再按K1,進(jìn)入設(shè)定狀態(tài),液晶屏光標(biāo)閃動(dòng)提示設(shè)定,此時(shí)設(shè)定高溫限值還是低溫限值可以在
  K1鍵轉(zhuǎn)換;
C.進(jìn)入設(shè)定狀態(tài)后,K2鍵用于值加1,K3鍵用于值減1;
D.設(shè)定完后,按鍵K4確認(rèn)后退出,返回顯示實(shí)時(shí)溫度!
(二) 溫度信號采集電路選擇和數(shù)據(jù)處理
方案:采用溫度傳感器DS18B20
美國DALLAS公司的產(chǎn)品可編程單總線數(shù)字式溫度傳感器DS18B20可實(shí)現(xiàn)室內(nèi)溫度信號的采集,有很多優(yōu)點(diǎn):如直接輸出數(shù)字信號,故省去了后繼的信號放大及模數(shù)轉(zhuǎn)換部分,外圍電路簡單,成本低;單總線接口,只有一根信號線作為單總線與MCU連接,且每一只都有自己唯一的64位系列號存儲(chǔ)在其內(nèi)部的ROM存儲(chǔ)器中,故在一根信號線上可以掛接多個(gè)DS18820,便于多點(diǎn)測量且易于擴(kuò)展.
DS18B20的測溫范圍較大,集成度較高,故選用此方案。
DS18B20內(nèi)部1,2位寄存器存放實(shí)時(shí)溫度值,本系統(tǒng)對以上兩寄存器數(shù)據(jù)處理后精度為0.1;DS18B20第3,4位寄存器分別存放高溫限值和低溫限值,并且DS18B20內(nèi)部還有EEPROM,因此通過第3,4寄存器與EEPROM的數(shù)據(jù)交換就能實(shí)現(xiàn)對設(shè)定后的值進(jìn)行貯存。
(三) 軟件設(shè)計(jì)
本實(shí)驗(yàn)中我選用Keil編程平臺(tái).
主程序流程圖:

圖3 主程序流程圖


二、單元電路設(shè)計(jì)(一) 溫度信號采集電路
圖4 溫度信號采集電路
(二) 步進(jìn)電機(jī)電路
圖5 步進(jìn)電機(jī)電路

(三) 液晶顯示模塊
圖6液晶顯示模塊
(四) 晶振復(fù)位電路
圖7 晶振復(fù)位電路

三、總結(jié)體會(huì)

本次設(shè)計(jì)給我們提供了一個(gè)將自己所學(xué)的知識(shí)應(yīng)用于實(shí)踐的良機(jī),通過了兩個(gè)周的設(shè)計(jì)我學(xué)到了很多非常有價(jià)值的東西,懂得了如何將理論知識(shí)轉(zhuǎn)化成實(shí)際程序的設(shè)計(jì);掌握的單片機(jī)開發(fā)與設(shè)計(jì)的思路與方案確定;學(xué)會(huì)了更有效的查找自己所需的資料;同時(shí)也意識(shí)到了團(tuán)隊(duì)協(xié)作的重要性;掌握了硬件與程序設(shè)計(jì)的一般步驟和方法。這對我們以后的學(xué)習(xí)和工作的是非常有幫助的。

設(shè)計(jì)是我們將來必需的技能,這次設(shè)計(jì)剛好給我們提供了一個(gè)應(yīng)用自己所學(xué)知識(shí)的機(jī)會(huì),從到圖書館和網(wǎng)上查找資料到對硬件與程序模塊的設(shè)計(jì)對各模塊的調(diào)試再到最后整體設(shè)計(jì)調(diào)試,都對我所學(xué)的知識(shí)進(jìn)行了檢驗(yàn),增強(qiáng)了自信心。

    通過本次設(shè)計(jì),我進(jìn)一步溫習(xí)和鞏固了課本的理論知識(shí),對單片機(jī)各接口與外部電路之間的連接關(guān)系有了更加深刻的理解。同時(shí)掌握了Proteus和keil軟件的基本應(yīng)用。同時(shí),在設(shè)計(jì)過程中,將理論知識(shí)應(yīng)用于實(shí)際應(yīng)用,增強(qiáng)了理論聯(lián)系實(shí)際的能力。雖然設(shè)計(jì)時(shí)有時(shí)一個(gè)問題需要我們花費(fèi)很長的時(shí)間,很煩很累但當(dāng)我們通過查找資料解決了之后心里很開心很有成就感。同時(shí)也使我明白了要將理論運(yùn)用于實(shí)踐還是一種非常重要的能力,要想牢固的掌握所學(xué)的知識(shí)我們必須將理論與實(shí)踐結(jié)合起來,用理論來指導(dǎo)實(shí)踐,用實(shí)踐來驗(yàn)證理論,增強(qiáng)對理論的理解。不斷地充實(shí)自己的理論,提高自己的動(dòng)手能力。最終完成了整個(gè)設(shè)計(jì)之后,使我更加堅(jiān)信只要我們努力和采用正確的方法,沒有什么事是我們解決不了的。   

最后,我在這里衷心地感謝所有教給我知識(shí)和在設(shè)計(jì)中給予我?guī)椭睦蠋焸兒屯瑢W(xué)們,是他們給我們的知識(shí)才使我們得以順利完成此次設(shè)計(jì)。



單片機(jī)匯編語言源程序如下:
  1. ;-------------------------------------------------
  2. ; 簡單功能說明:一個(gè)顯示實(shí)時(shí)溫度的小系統(tǒng),可以自行設(shè)
  3. ; 定高溫報(bào)警和低溫報(bào)警值,實(shí)現(xiàn)溫度控制電機(jī)帶動(dòng)外圍器
  4. ; 件功能。
  5. ;
  6. ;-------------------------------------------------
  7.         DQ        EQU        P1.7        ;DS18B20控制口
  8.         RS          EQU         P2.4
  9.             RW          EQU         P2.5
  10.             E           EQU         P2.6
  11.             LCD         EQU         P0
  12.         FLAG        EQU        30H        
  13.              GEWEI        EQU        29H
  14.         SHI        EQU        28H
  15.         XIAOSHU        EQU        27H
  16.         TEMP_TL        EQU        20H  ;低溫限值
  17.         TEMP_TH        EQU        21H  ;高溫限值
  18.         TEMPH        EQU        22H  ;溫度高字節(jié)
  19.         TEMPL        EQU        23H  ;溫度低字節(jié)
  20.         TEMP        EQU        24H
  21.         K1        EQU        P3.0
  22.          K2        EQU        P3.1
  23.         K3        EQU        P3.2
  24.         K4        EQU        P3.3
  25. ;===============================================

  26. MAIN:        MOV        TEMP_TH,#25
  27.         MOV        TEMP_TL,#01
  28.         ACALL         INIT_LCD        ;初始化液晶
  29.         ACALL        WR_THL                ;寫入高溫限值和低溫限值寄存器
  30.         ACALL        WR_PROM
  31.         ACALL        RE_PROM         ;從EEPROM中返回高溫限值和低溫限值
  32.         ACALL        RESET                 ;初始化1820
  33.         JB        FLAG,LOOP        
  34.         ACALL        ERROR                ;報(bào)錯(cuò)
  35.                
  36. LOOP:        ACALL        READ_T                ;1820讀取溫度
  37.         ACALL        DISP_TEMP        ;液晶顯示實(shí)時(shí)溫度
  38.         ACALL        KEYSCAN                ;鍵盤設(shè)定高溫限值和低溫限值
  39.         ACALL        TEMP_COMP
  40.         JMP        LOOP

  41. ;=============啟動(dòng)1820讀取溫度====================

  42. READ_T:        SETB        DQ
  43.         ACALL        RESET
  44.         JB        FLAG,READ_T1
  45.         RET
  46. READ_T1:
  47.         MOV        A,#0CCH
  48.         ACALL        WR_1820
  49.         MOV        A,#44H
  50.         ACALL        WR_1820
  51.         ACALL        RESET
  52.         MOV        A,#0CCH
  53.         ACALL        WR_1820
  54.         MOV        A,#0BEH
  55.         ACALL        WR_1820
  56.         ACALL        READ_1820
  57.         RET

  58. ;=========把高溫和低溫限值寫入寄存器=================

  59. WR_THL:        JB        FLAG,WR_HL
  60.         RET
  61. WR_HL:        ACALL        RESET
  62.         MOV        A,#0CCH
  63.         ACALL        WR_1820
  64.         MOV        A,#4EH
  65.         ACALL        WR_1820
  66.         MOV        A,TEMP_TH
  67.         ACALL        WR_1820
  68.         MOV        A,TEMP_TL
  69.         ACALL        WR_1820
  70.         RET

  71. ;==========把高溫和低溫限值寫入EEPROM=================

  72. WR_PROM:ACALL        RESET
  73.         MOV        A,#0CCH
  74.         ACALL        WR_1820
  75.         MOV        A,#48H
  76.         ACALL        WR_1820
  77.         RET

  78. ;========把EEPROM的值返回到高溫和低溫限值寄存器========
  79. RE_PROM:
  80.         ACALL        RESET
  81.         MOV        A,#0CCH
  82.         ACALL        WR_1820
  83.         MOV        A,#0B8H
  84.         ACALL        WR_1820
  85.         RET
  86. ;===========初始化1820==================================

  87. RESET:        SETB         DQ
  88.         NOP
  89.         CLR        DQ
  90.         MOV        R5,#250
  91.         DJNZ        R5,$

  92.         SETB        DQ            
  93.         NOP
  94.         
  95.         MOV        R5,#25H
  96. RESET1:        JNB        DQ,FLAG1
  97.         DJNZ        R5,RESET1
  98.         JMP        NDQ


  99. FLAG1:        SETB        FLAG
  100.         MOV        R5,#100
  101.         DJNZ        R5,$
  102.         SETB        DQ
  103.         MOV        R5,#100
  104.         DJNZ        R5,$
  105.         JMP        RETU

  106. NDQ:        CLR        FLAG
  107.         ACALL        ERROR
  108. RETU:        SETB        DQ
  109.         RET

  110. ;=============1820寫字節(jié)========================

  111. WR_1820:
  112.         MOV        R6,#8
  113.         CLR        C
  114.         
  115. WR1:        CLR        DQ
  116.         MOV        R5,#7
  117.         DJNZ        R5,$
  118.         RRC        A
  119.         MOV        DQ,C
  120.         MOV        R5,#25
  121.         DJNZ        R5,$
  122.         SETB        DQ
  123.         NOP
  124.         NOP
  125.         DJNZ        R6,WR1
  126.         SETB        DQ
  127.         RET
  128. ;==============讀取1820數(shù)據(jù)======================

  129. READ_1820:
  130.         MOV        R2,#4
  131.         MOV        R1,#TEMPL
  132.         
  133. RE1:        MOV        R6,#8
  134. RE2:        SETB        DQ
  135.         NOP
  136.         CLR        DQ
  137.         CLR        C
  138.         NOP
  139.         NOP

  140.         SETB        DQ
  141.         MOV        R5,#9
  142.         DJNZ        R5,$

  143.         MOV        C,DQ
  144.         MOV        R5,#24
  145.         DJNZ        R5,$
  146.         RRC        A

  147.         DJNZ        R6,RE2
  148.         MOV        @R1,A
  149.         DEC        R1
  150.         DJNZ        R2,RE1
  151.         RET
  152. ;===========轉(zhuǎn)換數(shù)據(jù)=============================

  153. TURN:        MOV        XIAOSHU,TEMPL         ;保存TEMPL值,后面用于取低4位轉(zhuǎn)換小數(shù)部分
  154.         MOV        A,TEMPL
  155.         MOV        C,16                 ;22H的位尋址
  156.         RRC        A
  157.         MOV        C,17
  158.         RRC        A
  159.         MOV        C,18
  160.         RRC        A
  161.         MOV        C,19
  162.         RRC        A
  163.         MOV        TEMP,A
  164.         MOV        A,XIAOSHU
  165.         ANL        A,#00001111B
  166.         MOV        XIAOSHU,A

  167.             
  168.         RET
  169. ;========鍵盤掃描=============================

  170. KEYSCAN:
  171.         JB        K1,RETUN        ;按下K1,進(jìn)入鍵盤掃描
  172.         ACALL        DELAY20               
  173.         JNB        K1,$
  174.         ACALL        CLR_LCD                ;清屏
  175.         ACALL        DISP_THL        ;顯示高溫限值和低溫限值
  176.         ACALL        SET_HL                ;設(shè)定限值
  177.         ACALL        WR_THL                ;把高溫限值和低溫限值寫入RAM
  178.         //.../ACALL        LED
  179.         ACALL  WR_PROM                ;限值復(fù)制到EEPROM中
  180. RETUN:        RET
  181. ;------------設(shè)定高低限值----------------------

  182. SET_HL:        //JNB        K4,EXIT
  183.         JB        K1,KEY4                  
  184.         ACALL        DELAY20
  185.         JNB        K1,$
  186.         CPL        20H.1                ;標(biāo)志位,標(biāo)志設(shè)定高溫限值或低溫限值
  187.         JB        20H.1,SET_H
  188.         JMP        SET_L
  189. ;-------------調(diào)高溫限值-------------------------        
  190. SET_H:        
  191.         ACALL        TH_SHAN                ;光標(biāo)閃,進(jìn)入設(shè)定
  192.         
  193. KEY2H:        JNB        K1,SET_L         ;高溫限值與低溫限值間設(shè)定轉(zhuǎn)換
  194.         JNB        K4,EXIT
  195.         JB        K2,KEY3H        ;按下K2,值加1

  196.         ACALL        DELAY20

  197.         JNB        K2,$
  198.              INC        TEMP_TH
  199.         MOV        A,TEMP_TH
  200.         CJNE        A,#99,A0
  201.         MOV        TEMP_TH,#00
  202. A0:        ACALL        DISP_THL     

  203. KEY3H:  
  204.         JB        K3,KEY2H         ;按下K3,值減1
  205.         ACALL        DELAY20
  206.         JNB        K3,$
  207.         DEC         TEMP_TH
  208.         MOV         A,TEMP_TH
  209.         CJNE        A,#0,A1
  210.         MOV        TEMP_TH,#99
  211. A1:        ACALL        DISP_THL
  212.         JMP        SET_H
  213. ;-------------調(diào)低溫限值------------------------------
  214. SET_L:        
  215.         ACALL        TL_SHAN
  216. KEY2L:        JNB        K1,SET_H        ;高溫限值與低溫限值間設(shè)定轉(zhuǎn)換
  217.         JNB        K4,EXIT
  218.         JB        K2,KEY3L        ;按下K2,值加1
  219.                
  220.         ACALL        DELAY20
  221.         JNB        K2,$
  222.         INC        TEMP_TL
  223.         MOV        A,TEMP_TL
  224.         CJNE        A,#99,A2
  225.         MOV        TEMP_TL,#00
  226. A2:        ACALL        DISP_THL   
  227. KEY3L:        JB        K3,KEY2L                 ;按下K3,值減1
  228.         ACALL        DELAY20
  229.         JNB        K3,$
  230.         DEC        TEMP_TL
  231.         MOV        A,TEMP_TL
  232.         CJNE        A,#0,A3
  233.         MOV        TEMP_TL,#99

  234. A3:        ACALL        DISP_THL
  235.         JMP        SET_L
  236.         
  237. ;----------------------
  238. KEY4:        JNB        K4,EXIT                  ;K4用于退出設(shè)定
  239.         JMP        SET_HL
  240.         //JMP        SET_HL
  241. EXIT:        ACALL        DELAY20
  242.         JNB        K4,$
  243.          MOV           LCD,#00001100B           ;設(shè)置液晶光標(biāo)不顯示、不閃爍
  244.            ACALL         WR_COMM
  245.         ACALL        CLR_LCD
  246.         ACALL        DISP_TEMP        
  247.         RET        

  248. ;==============溫度比較======================================

  249. TEMP_COMP:
  250.         MOV        A,TEMP_TH
  251.         SUBB        A,TEMP
  252.         ACALL        DIANJI
  253.         MOV        A,TEMP
  254.         SUBB        A,TEMP_TL
  255.         ACALL        DIANJI
  256.         RET
  257. ;============================================
  258. /*MORE:        MOV        DPTR,#MORE0
  259.         MOV        LCD,#0CEH
  260.         ACALL        WR_COMM
  261.         ACALL        DISP0
  262.         RET
  263. MORE0:        DB        '>H',0H        
  264. */                        
  265. ;=============啟動(dòng)電機(jī)========================

  266. ;電機(jī)接口是P1低4位,因?yàn)镻1.7是溫度傳感器的控制口
  267. ;避免沖突,電機(jī)接口按位控制
  268. DIANJI:        JC        DIAN0
  269.         RET        
  270. DIAN0:        MOV        R0,#4
  271.         //ACALL        MORE
  272. DIAN1:        
  273.         SETB        P1.0
  274.         CLR        P1.1
  275.         CLR        P1.2
  276.         CLR        P1.3
  277.         ACALL        DELAY
  278.         CLR        P1.0
  279.         SETB        P1.1
  280.         ACALL        DELAY
  281.         CLR        P1.1
  282.         SETB        P1.2
  283.         ACALL        DELAY
  284.         CLR        P1.2
  285.         SETB        P1.3
  286.         ACALL        DELAY
  287.         //RL        A
  288.         DJNZ        R0,DIAN1
  289.         CLR        P1.0
  290.         CLR        P1.1
  291.         CLR        P1.2
  292.         CLR        P1.3
  293.         RET
  294. DELAY:        MOV        R5,#5
  295. DLY1:        MOV        R6,#10
  296. DLY2:        MOV        R7,#50
  297.         DJNZ        R7,$
  298.         DJNZ        R6,DLY2
  299.         DJNZ        R5,DLY1
  300.         RET
  301. ;============清屏=============================

  302. CLR_LCD:
  303.         MOV        LCD,#80H
  304.         ACALL        WR_COMM
  305.         MOV        R0,#16
  306. CLR1:        MOV        LCD,#' '
  307.         ACALL        WR_DATA
  308.         DJNZ        R0,CLR1

  309.         MOV        LCD,#0C0H
  310.         ACALL        WR_COMM
  311.         MOV        R0,#16
  312. CLR2:        MOV        LCD,#' '
  313.         ACALL        WR_DATA
  314.         DJNZ        R0,CLR2
  315.         RET
  316. ;===============報(bào)錯(cuò)============================

  317. ERROR:        MOV        LCD,#80H
  318.         ACALL        WR_COMM
  319.         MOV        DPTR,#ERORTAB
  320.         ACALL        DISP0
  321.         RET
  322. ……………………

  323. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

仿真程序和文檔下載:
基于51單片機(jī)的溫度控制系統(tǒng).7z (252.45 KB, 下載次數(shù): 144)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

來自 2#
ID:262 發(fā)表于 2022-3-5 23:48 | 只看該作者
木子236Y 發(fā)表于 2022-3-5 20:46
仿真時(shí)實(shí)時(shí)溫度不正確呀,一直定在了85

我用Proteus8.8版本打開是正常的 你看圖

51hei.gif (108.36 KB, 下載次數(shù): 54)

51hei.gif
回復(fù)

使用道具 舉報(bào)

板凳
ID:349895 發(fā)表于 2018-6-12 08:13 | 只看該作者
謝謝分享,
回復(fù)

使用道具 舉報(bào)

地板
ID:853197 發(fā)表于 2022-3-5 20:46 來自手機(jī) | 只看該作者
仿真時(shí)實(shí)時(shí)溫度不正確呀,一直定在了85
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表