mcs51单片机机应用于温度控制器本科生毕业论文(编辑修改稿)内容摘要:

输入 CPU 18 CS ADS7844E片选信号 CPU 19 DCLK 串行口时钟 CPU 液晶显示及驱动电路 HT1621B 是 128 点内存映象和多功能的 LCD 驱动器, HT1621B 的软件配置特性使它适用于多种 LCD 应用场合,包括 LCD 模块和显示子系统,用于连接主控制器和 HT1621 的管脚只有 4 或 5 条, HT1621 还有一个节电命令用于降低系统功耗。 第 16 页 共 31 页 HT1621B 的引脚功能及与其它电路的连接见表 4: 表 4: HT1621B的引脚功能及与其它电路的连接表 序号 引脚名称 功能 与其它电路的连接 备注 1 CS Ht1621B 片选 CPU 低电平有效 2 RD 读控制 3 WR 写控制 4 DATA 数据线 5 Vss 电源地 电源地 6/7 OSCI/OSCO 时钟 未连接 使用片内 RC振荡器 8 VLCD LCD电源 +5V 选用 5VLCD 9 VDD 电源 +5V 10 IRQ 看门狗输出 未连接 1 12 BZ 声音频率输出 未连接 13~16 COM0~COM3 LCD 公共输出口 LCD 公共输出口 17~48 SEG0~SEG31 LCD 段输出口 LCD 段输出口 只用到其中 12位 第 17 页 共 31 页 电源电路 图 5 电源电路 第 18 页 共 31 页 系统 软件设计 软件结 构设计 温控器软件主要包括主程序模块、定时器中断处理模块、 LCD 显示处理模块、ADC转换模块和键盘处理模块。 定时器中断处理模块主要产生时间事件,其中 200ms事件用于读取键盘的健值, 500ms 为 ADC 转换事件。 主程序模块循环判断系统是否有事件发生,当发生 200ms 事件时,调用键盘处理子程序、 LCD 显示刷新子程序。 当发生 500ms 事件时,调用 ADC 转换子程序及 LCD 显示刷新子程序。 主要模块调用关系如图 6 所示 ADC 转换模块 LCD 显示刷新 定时器中断程序 读取键值 图 6 主要模块调用关系图 页面处理 保存处理 移位处理 加键处理 闪烁处理 显示转换 写显示数据 启动 ADC 转换 读 ADC 数据 求温度平均值 温度比较 温度校正 二进制转换BCD 码温度 主程序模块 键盘处理 系统初始化程序 第 19 页 共 31 页 系统程序流程图设计 主程序流程图 图 7 主程序流程图 看门狗复位 主循环开始 判断是否有键盘事件 Y N 上电或复位,程序开始 设置堆栈,清内存 调用设备初始化子程序 开中断 N N N 清键盘事件标志 判断上次键盘事件处理是否完成 判断键盘值是否为 0 键盘处理子程序 判断是否有 ADC转换事件 清 ADC 转换事件标志 ADC 处理子程序 显示刷新处理子程序 第 20 页 共 31 页 键盘处理流程 功能:显示相应页面以及修改系统参数 输入:键值 输出:修改显示缓冲器数据及系统参数 寄存器分配:寄存器组 1,各子程序具体分配情况见子程序说明。 调用子程序:页面处理子程序 (Pagehandle)、加键处程序 (Uphandle)、保存数据子程序 (Savehandle)、移位处理子程序 (Shifthandle) 父函数:主程序 图 8 键盘处理程序流程图 压堆栈,设置寄存器组 置键盘未处理完标志 是否有为功能键 Y N 是否为加键 Y N 是否为保存键 Y N 是否为移位键 Y N 调用页面处理子程序 调用加键处理子程序 调用移位处理子程序 调用保存数据处理子程序 恢复堆栈 第 21 页 共 31 页 ADC转换处理流程 功能:启动 ADC 转换、读取 ADC 转换结果、进行温度校正、比较、继电 器控制输出 输入:无 输出:温度值显示值、继电器控制输出 寄存器分配:寄存器组 3,各子程序具体分配情况见子程序说明。 调用子程序:启动 ADC 转换子程序 (Start_Adc)、读转换结果程序 (ReadADC)、求平均值子程序 (Average)、二进制温度转 BCD 码子程序 (Bin_Temp_BCD)、温度校正子程序 (TempAdjust)、温度比较子程序 (TempCopmare) 父函数:主程序 图 9 ADC 转换程序流程图 压堆栈,设置寄存器组 调用 ADC 启动子程序 延时等待 ADC 转换结束 调用读 ADC 结果子程序 调用二进制温度转换子程序 调用求平均值子程序 恢复堆栈 调用温度校正子程序 调用温度比较子程序 第 22 页 共 31 页 定时器中断处理程序流程 功能:产生定时事件 输入:无 输出:时间事件 寄存器分 配:寄存器组 1。 调用子程序:读取键值子程序 (Getkeyvalume)、定时器初始化子程序 父函数:无 Y N 图 10 定时器中断处理子程序流程图 判 断是否为200ms 判断是否为500ms 置 200ms 事件标志 置 500ms 事件标志 Y Y N N 恢复堆栈 清超时标志,恢复正常显示 判断是否为1000ms 判断键盘是否超时 N Y Y N 压堆栈,设置寄存器组 重装定时计数器 (调用定时器初始化子程序 ) ms 计数单元加 1 调用取键值子程序 判断是否为 100ms 键盘事件处理是否完成 第 23 页 共 31 页 系统程序设计 目前许多公司在生产单片机的同时,都会推出自己的编译系统,并且许多编译系统都会支持 C 语言、汇编语言或两种语言的混合编程;本系统采用汇编语言编程,使用 Keil C51 编译。 由于程序的篇幅较长,下面主要介绍主程序及二进制温度转换为 BCD 温度值子程序,其它程序请查阅附录中的程序清单。 主程序清单 ORG 0000H ; 复位入口 JMP PROGRAME_STAR ; 程序开始 ORG 0003H ; 外部中断 0入口 RETI ; ORG 000BH ; 定时 0中断入口 AJMP TIME0_INT ; ORG 0013H ; 外部中断 1入口 RETI ; ORG 001BH ; 定时 1中断入口 RETI ; ORG 0023H ; 串口中断入口 RETI ; ORG 0060H ; 程序起点 PROGRAME_STAR: MOV SP , STACK ; 设置堆栈 MOV PSW , (0 SHL 3) ; 使用寄存器组 0 MOV R0 , 10H ; 清内存的开始地址 MOV R1 , 50H 1 ; 设置清除内存计数 MOV A , 00H ; MAIN0: MOV @R0 , A ; 内存清零 INC R0 ; DJNZ R1 , MAIN0 ; 第 24 页 共 31 页 ACALL DEVICE_INIT ; 设备初始化 MOV IE ,82H ; 开中断 MAINLOOP: ACALL WDRESET ; 看门狗复位 MOV A , TIMEEVENT ; 200ms事件标志 , 处理键盘事件 ANL A , EVT_MS200 ; A和 EVT_MS200做与运算 ,取出 200ms事件标志位 JZ MAIN1 ; 200ms事件标志位为 0时跳到 MAIN1 MOV A , EVT_MS200 ; CPL A ; ANL TIMEEVENT , A ; 清除 200ms事件标志 MOV A , KEYOVER ; 键盘处理完标志 JNZ MAIN3 ; ******************** MOV A , KEY_VALUE ; 取键值 JZ MAIN3 ; 键盘值为 0时跳出 ********** ACALL KEYHANDLE ; 处理键盘事件 AJMP MAIN3 ; *********************** MAIN1: MOV。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。