找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5818|回复: 3
打印 上一主题 下一主题
收起左侧

单片机汇编语言温度控制系统设计程序仿真-智能仪器仪表综合实训

[复制链接]
跳转到指定楼层
楼主
这是一个51单片机的温度控制系统,包括proteu仿真程序、代码和文档。

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


目录
一、系统设计第 1 页
系统总体设计方案第 1 页                                                                                 
温度信号采集电路选择和数据处理第 3 页
软件设计第 3 页
二、单元电路设计第 5 页
温度信号采集电路第 5 页
步进电机电路 第 5 页
液晶显示模块 第 6 页
晶振复位电路第 7 页   
三、总结体会第 7 页
四、参考文献第 8 页
附录:程序清单第 8 页

一、系统设计(一) 系统总体设计方案
设计框图如下所示:
图1  系统总体设计框图





总电路图如下:

图2  系统总电路图
简单功能说明:
一个显示实时温度的小系统,可以自行设定高温报警和低温报警值,实现温度控制电机带动外围器件功能。本系统通过温度传感器DS18B20实现对温度数据的采集,数据处理后显示到液晶屏上,通过数据处理,温度值精确度为0.1。

简单操作方法:
系统上电后液晶显示实时温度,通过按键可以设定高低温限定值:
A.按下K1,显示系统的高低温限定值;
B.再按K1,进入设定状态,液晶屏光标闪动提示设定,此时设定高温限值还是低温限值可以在
  K1键转换;
C.进入设定状态后,K2键用于值加1,K3键用于值减1;
D.设定完后,按键K4确认后退出,返回显示实时温度!
(二) 温度信号采集电路选择和数据处理
方案:采用温度传感器DS18B20
美国DALLAS公司的产品可编程单总线数字式温度传感器DS18B20可实现室内温度信号的采集,有很多优点:如直接输出数字信号,故省去了后继的信号放大及模数转换部分,外围电路简单,成本低;单总线接口,只有一根信号线作为单总线与MCU连接,且每一只都有自己唯一的64位系列号存储在其内部的ROM存储器中,故在一根信号线上可以挂接多个DS18820,便于多点测量且易于扩展.
DS18B20的测温范围较大,集成度较高,故选用此方案。
DS18B20内部1,2位寄存器存放实时温度值,本系统对以上两寄存器数据处理后精度为0.1;DS18B20第3,4位寄存器分别存放高温限值和低温限值,并且DS18B20内部还有EEPROM,因此通过第3,4寄存器与EEPROM的数据交换就能实现对设定后的值进行贮存。
(三) 软件设计
本实验中我选用Keil编程平台.
主程序流程图:

图3 主程序流程图


二、单元电路设计(一) 温度信号采集电路
图4 温度信号采集电路
(二) 步进电机电路
图5 步进电机电路

(三) 液晶显示模块
图6液晶显示模块
(四) 晶振复位电路
图7 晶振复位电路

三、总结体会

本次设计给我们提供了一个将自己所学的知识应用于实践的良机,通过了两个周的设计我学到了很多非常有价值的东西,懂得了如何将理论知识转化成实际程序的设计;掌握的单片机开发与设计的思路与方案确定;学会了更有效的查找自己所需的资料;同时也意识到了团队协作的重要性;掌握了硬件与程序设计的一般步骤和方法。这对我们以后的学习和工作的是非常有帮助的。

设计是我们将来必需的技能,这次设计刚好给我们提供了一个应用自己所学知识的机会,从到图书馆和网上查找资料到对硬件与程序模块的设计对各模块的调试再到最后整体设计调试,都对我所学的知识进行了检验,增强了自信心。

    通过本次设计,我进一步温习和巩固了课本的理论知识,对单片机各接口与外部电路之间的连接关系有了更加深刻的理解。同时掌握了Proteus和keil软件的基本应用。同时,在设计过程中,将理论知识应用于实际应用,增强了理论联系实际的能力。虽然设计时有时一个问题需要我们花费很长的时间,很烦很累但当我们通过查找资料解决了之后心里很开心很有成就感。同时也使我明白了要将理论运用于实践还是一种非常重要的能力,要想牢固的掌握所学的知识我们必须将理论与实践结合起来,用理论来指导实践,用实践来验证理论,增强对理论的理解。不断地充实自己的理论,提高自己的动手能力。最终完成了整个设计之后,使我更加坚信只要我们努力和采用正确的方法,没有什么事是我们解决不了的。   

最后,我在这里衷心地感谢所有教给我知识和在设计中给予我帮助的老师们和同学们,是他们给我们的知识才使我们得以顺利完成此次设计。



单片机汇编语言源程序如下:
  1. ;-------------------------------------------------
  2. ; 简单功能说明:一个显示实时温度的小系统,可以自行设
  3. ; 定高温报警和低温报警值,实现温度控制电机带动外围器
  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  ;温度高字节
  19.         TEMPL        EQU        23H  ;温度低字节
  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                ;报错
  35.                
  36. LOOP:        ACALL        READ_T                ;1820读取温度
  37.         ACALL        DISP_TEMP        ;液晶显示实时温度
  38.         ACALL        KEYSCAN                ;键盘设定高温限值和低温限值
  39.         ACALL        TEMP_COMP
  40.         JMP        LOOP

  41. ;=============启动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写字节========================

  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数据======================

  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. ;===========转换数据=============================

  153. TURN:        MOV        XIAOSHU,TEMPL         ;保存TEMPL值,后面用于取低4位转换小数部分
  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,进入键盘扫描
  172.         ACALL        DELAY20               
  173.         JNB        K1,$
  174.         ACALL        CLR_LCD                ;清屏
  175.         ACALL        DISP_THL        ;显示高温限值和低温限值
  176.         ACALL        SET_HL                ;设定限值
  177.         ACALL        WR_THL                ;把高温限值和低温限值写入RAM
  178.         //.../ACALL        LED
  179.         ACALL  WR_PROM                ;限值复制到EEPROM中
  180. RETUN:        RET
  181. ;------------设定高低限值----------------------

  182. SET_HL:        //JNB        K4,EXIT
  183.         JB        K1,KEY4                  
  184.         ACALL        DELAY20
  185.         JNB        K1,$
  186.         CPL        20H.1                ;标志位,标志设定高温限值或低温限值
  187.         JB        20H.1,SET_H
  188.         JMP        SET_L
  189. ;-------------调高温限值-------------------------        
  190. SET_H:        
  191.         ACALL        TH_SHAN                ;光标闪,进入设定
  192.         
  193. KEY2H:        JNB        K1,SET_L         ;高温限值与低温限值间设定转换
  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. ;-------------调低温限值------------------------------
  214. SET_L:        
  215.         ACALL        TL_SHAN
  216. KEY2L:        JNB        K1,SET_H        ;高温限值与低温限值间设定转换
  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用于退出设定
  239.         JMP        SET_HL
  240.         //JMP        SET_HL
  241. EXIT:        ACALL        DELAY20
  242.         JNB        K4,$
  243.          MOV           LCD,#00001100B           ;设置液晶光标不显示、不闪烁
  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. ;=============启动电机========================

  266. ;电机接口是P1低4位,因为P1.7是温度传感器的控制口
  267. ;避免冲突,电机接口按位控制
  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. ;===============报错============================

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

  323. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

仿真程序和文档下载:
基于51单片机的温度控制系统.7z (252.45 KB, 下载次数: 144)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶2 踩
回复

使用道具 举报

来自 2#
ID:262 发表于 2022-3-5 23:48 | 只看该作者
木子236Y 发表于 2022-3-5 20:46
仿真时实时温度不正确呀,一直定在了85

我用Proteus8.8版本打开是正常的 你看图

51hei.gif (108.36 KB, 下载次数: 51)

51hei.gif
回复

使用道具 举报

板凳
ID:349895 发表于 2018-6-12 08:13 | 只看该作者
谢谢分享,
回复

使用道具 举报

地板
ID:853197 发表于 2022-3-5 20:46 来自手机 | 只看该作者
仿真时实时温度不正确呀,一直定在了85
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表