1、完整word版)煤气退火炉控制系统设计 自动化专业《计算机控制技术》课程设计任务书 论文 题目 煤气退火炉控制系统设计 设计类型 导师姓名 主要内容及目标 煤气罩式退火炉主要用于对冷轧钢板进行热处理,采用高炉煤气作为燃料。炉体分内罩和外罩,在内罩内放入退火钢卷,并投入保护性气体防止氧化。燃烧在内罩和外罩之间进行。12个喷嘴分为上下两层,每层6个环绕排列。煤气和空气的喷燃比由两个阀门的连杆共同带动。设计系统保护气体温度为输入及控制量,以电动执行器带动的蝶阀开度(对应于煤气输入量)为输出的一个单输入单输出的温度控制系统。 设计系统要求温度在升温、保温过程中按一定的工艺曲
2、线升温和保温,在400℃温度内,保护气体温度在供气阀门开到最大情况下,以自由升温的速率在最短的时间内升到400℃。从400℃开始到700℃的保温该点,温度按45~75℃/h速率上升,此段为升温段,到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温。钢卷保温一定时间后停火,进入降温段,而降温过程为自由降温,在此段中温控系统停用。选择合适的控制算法进行控制。 具有的设计条件 1. PC机一台,教学实验箱一台; 计划学生数及任务 3人 (1):明确课题功能。 (2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。 (3):存储器资源分配 (4):编制程序,
3、根据流程图来编制源程序 (5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。 计划设计进程 一、 总体方案设计 二、 控制系统的建模和数字控制器设计 三、 硬件的设计和实现 1、 选择计算机字长(选用 51内核的单片机) 2、 设计支持计算机工作的外围电路(EPROM、RAM、I/O端口、键盘、显示接口电路等); 3、 设计输入信号接口电路; 4、 设计输出控制电路; 5、 设计串行通讯接口; 6、 其它相关电路的设计或方案(电源、通信等)。 四、 软件设计 1、 分配系统资源,编写系统初始化和主程序模块框图; 2、 编写A/D转换和位置检测子程序框图;
4、 3、 编写控制程序和D/A转换控制子程序模块框图; 4、 其它程序模块(显示与键盘等处理程序)框图。 五、编写课程设计说明书,绘制完整的系统电路图(A3幅面)。 参考文献 1.于海生 计算机控制技术[M] 北京:机械工业出版社,2007.6 2、周荷琴等 微型计算机原理及接口技术[M]合肥:中国科技大学出版社,2008.6 3、李刚民等 单片机原理及应用技术[M]北京:高等教育出版社 4、楼然苗 51系列单片机设计实例[M]北京:北京航空航天大学出版社 5、计算机控制技术实验指导书
5、 目 录 摘要: 2 关键字: 2 引言 3 1设计任务与要求 3 1.1设计题目 3 1.2工艺要求 3 1.3要求实现系统基本功能 3 2.总体方案设计 3 2.1.系统设计方案的提出 3 2.2.方案比较及确定 4 2.3. 控制系统方框图 5 2.4. 算法设计问题 6 3.系统硬件设计 7 3.1.系统硬件电路设计 7 3.2单元模块设计 7 3.2.1.电源模块 7 3.2.2. 控制模块 8 3.2.3.执行模块 9 3.2.4.温度采集模块 9 3.2.5.显示模块 11 3.3.元器件清单 12 4.系统软件设计
6、 13 4.1.软件流程图 13 4.2.软件代码(见附录) 14 5.调试部分 14 5.1.调试中遇到的问题 14 5.2.调试过程 14 5.3.调试结果与分析 14 6.总结 17 7.参考文献 18 8.致谢 18 9.附录 18 摘要: 本设计是基于单片机AT89C52的煤气退火炉控制系统。设计中综合利用单片机的可编程性,灵活利用A/D转换器、LCD等,完成温度采集、运算控制、输出显示等功能。 A/D能够较高精度和较大范围的进行温度测量,保证了系统设计的精度要求;运算控制部分主要使用单片机小系统对采集的数据进行处理,方便快捷;输出显示部分使用
7、LCD液晶显示屏实现,简单明了。系统性能指标均达到了设计要求。整个系统电路简单,操作方便,用户界面友好。 关键字:单片机 温度采集 运算控制 液晶显示 引言 1设计任务与要求 1.1设计题目 煤气罩式退火炉主要用于对冷轧钢板进行热处理,采用高炉煤气作为燃料。炉体分内罩和外罩,在内罩内放入退火钢卷,并投入保护性气体防止氧化。燃烧在内罩和外罩之间进行。12个喷嘴分为上下两层,每层6个环绕排列。煤气和空气的喷燃比由两个阀门的连杆共同带动。设计系统保护气体温度为输入及控制量,以电动执行器带动的蝶阀开度(对应于煤气输入量)为输出的一
8、个单输入单输出的温度控制系统。 1.2工艺要求 设计系统要求温度在升温、保温过程中按一定的工艺曲线升温和保温,在400℃温度内,保护气体温度在供气阀门开到最大情况下,以自由升温的速率在最短的时间内升到400℃。从400℃开始到700℃的保温该点,温度按45~75℃/h速率上升,此段为升温段,到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温。钢卷保温一定时间后停火,进入降温段,而降温过程为自由降温,在此段中温控系统停用。选择合适的控制算法进行控制。 1.3要求实现系统基本功能 采样功能:能够对温度进行采集。 控制功能:能够使系统按照一定的工艺曲线进行升温和保温。 显示功
9、能:显示当前被控量的设定值、实际值,控制量的输出值。 2.总体方案设计 2.1.系统设计方案的提出 本设计是基于AT89C52单片机的控制及显示电路设计,从系统的设计功能上看,系统可分为五大部分,即控制部分、传感器部分、数字显示部分、电源部分和执行部分,对于每一个部分都有不同的设计方案,起初我们组拟订了下面两种方案: 1.控制部分 (1)AT89C52单片机 (2)其他 2.传感器部分 (1) (J型热电偶)铁-铜镍热电偶 (2) (T型热电偶)铜-铜镍热电偶 3.数字显示部分 (1) 采用LED 数码管显示,利用多个数码管来显示数字。 (2)LCD液晶屏显示。 4
10、.电源部分: (1)购买开关电源。 (2)自制电源。 5.执行部分 (1)用交流电机。 (2)用直流电机,采用集成芯片LM298与LM297组成驱动电路。 2.2.方案比较及确定 (1)本设计中我们采用AT89C52单片机作为主控芯片,AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。AT89C52是一个低电压,高性能CMOS 8位单片机,而且可编程性好。 (2)J型热电偶具有线性度好,热电动势较大,灵敏度较高,稳定性和均匀性较好,价格便宜等优点,广为用户所采用。其温度范围为0~750℃,符合我们的要求。虽然T型热电偶也具有这些优点,但是其测量温区为-200~
11、350℃,不能满足我们的要求。 (3)若用LED数码管显示,LED数码管亮度高、小巧轻便,但是电路复杂,显示信息量较小;LCD的优点是:工作电流较小、功耗很低,而且可以清晰显示大量信息,趣味性强。所以选用LCD液晶显示。 (4)购买的开关电源带负载的能力比较好,比较稳定,但是为了提升自己的动手能力,我们选择自己焊接所需的电路。 (5)若用交流电机,转动速度固定,一般为水平转动速度为4°/秒~6°/秒,垂直转动速度为3°/秒~6°/秒。其缺点是无法大电流驱动.降低了工作效率且不容易实现。若选用集成芯片LM298驱动直流步进电机,具有转速高、可变速的优点,十分适合需要快速捕捉目标的场合。其水
12、平最高转速可达40~50°/秒,垂直可达10~24°/秒。这种电路通过芯片产生正反向电压.开关速度很快.稳定性极强.效率也非常高。基于上述考虑.我们拟选用方案二。 2.3. 控制系统方框图 图1 控制系统方框图 AT89C52单片机作为主控模块,通过传感器进行温度的采集,采集的数据经过A/D转换变成计算机能够接收的数字信号,然后在经过D/A转换将数字信号转变成模拟信号去控制执行机构(直流电机)的转动,并且电机的转动分为三个阶段: 第一阶段:当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动, 而且转动的非常快。电机转动带动阀门,从而控制阀门的开度,使温度快速
13、升高。 第二阶段:当采集到的数据在(400~700)℃范围内时,单片机就会控制直流电机转动, 而且转动速度减慢。电机转动带动阀门,从而控制阀门的开度,并且使速率控制在45~75℃ /h之间,温度由400℃升温到700℃。 第三阶段:当采集的数据达到700℃时,电机就停止转动。 同时系统整个过程都通过LCD液晶屏对温度进行实时跟踪与显示。 2.4. 算法设计问题 运算控制部分主要使用单片机小系统对采集的数据进行处理,方便快捷;我们运用C语言进行编程。 单片机C语言和标准C语言又存在着很大差别,在计算机上进行C语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能
14、实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法]。 在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。比如:用逻辑AN
15、D/&取模比MOD/%操作更有效。
在用热敏电阻测量温度时,可根据热敏电阻—温度特性公式来求值。数学表达式表示为:
RT=RT0expB(1/T-1/T0)
如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用
16、杂高,C语言程序代码也长,但在编译成机器码时,代码长度却很短,只有一、二百字节。 3.系统硬件设计 3.1.系统硬件电路设计 图2 系统硬件电路图 3.2单元模块设计 根据系统要实现的功能,本系统分为五个模块:电源模块、控制模块、执行模块、温度采集模块和显示模块。分别将各单元模块功能介绍如下: 3.2.1.电源模块 稳压电源模块我们采用三端集成线性稳压集成块:L7805CV芯片。 本设计中我们所需的5V电源使用L7805CV芯片完成。因为它的外围电路比较简单,并且工作比较稳定。它的稳压精度为2%,工作电流1.5A,封装为TO-220(A),工作温度也很不错,并且具有过温保护
17、和短路保护,最大输入电压为35V,能对电路的长时间工作有很大的保障,故用其作为稳压芯片。 3.2.2. 控制模块 本设计中我们采用AT89C52单片机作为主控芯片,AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合
18、 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。其引脚图如下所示: 图3 引脚图 主要功能特性: · 兼容MCS51指令系统 · 8k可反复擦写(>1000次)Flash ROM · 32个双向I/O口 · 256x8bit内部RAM · 3个16位可编程定时/计数
19、器中断 · 时钟频率0-24MHz · 2个串行中断 · 可编程UART串行通道 · 2个外部中断源 · 共6个中断源 · 2个读写中断口线 · 3级加密位 · 低功耗空闲和掉电模式 · 软件设置睡眠和唤醒功能 3.2.3.执行模块 执行机构我们采用直流电机作为被控对象,直流电机是电机的主要类型之一。一台直流电机即可作为发电机使用,也可作为电动机使用,用作直流发电机可以得到直流电源,而作为直流电动机,由于直流电机的启动性能好,具有良好的调速性能,运行稳定;直流电动机的调速范围宽广,调速特性平滑,而且直流电动机的过载能力较强,热动和制动转矩较大。
20、在许多调速性能要求较高的场合,仍得到广泛使用。尤其是在调速性能要求较高的大型设备,比如轧钢机上都采用直流电动机拖动。 在本实验中直流电机的作用是:根据电动机转动的快慢来反映煤气退火炉温度上升的快慢。在0℃~400℃时,电动机快速转动打开供气阀门快速供气,使火炉在最短的时间内快速升温到400℃;从400℃~700℃为火炉的保温点,此时直流电机的转速将慢慢降低;当温度上升到700℃时,阀门供气量将会下降,使火炉进入保温阶段。这时直流电机将停止转动 3.2.4.温度采集模块 在本次实验中用到的A/D转换器是ADC0808,其原理图及控制原理如下: (1)①模拟量输入;② A/D 转换器;③数
21、据输出 图4 ADC0808的原理框图 (2)引脚介绍: :主电源输入端。 REF ( + )、 REF ( - ):基准电源输入端,使用中 REF ( - )一般接地, REF ( + )最大可接 ,要求不高时, REF ( + )接 的 电源。 GND :模拟地数字地共用的接地端。 CLK :时钟输入引脚,时钟频率范围 ,典型值 ,此时转换时间约为 。 : 8 路模拟量单极性电压的输入引脚。 ADD A 、 ADD B 、 ADD C : 8 选 1 模拟开关的三位通道地址输入端。用来选择对应的输入通道,其对应关系如图 9-4 所示。比如 CBA=011
22、 ,则选中 引脚的输入电压。 C 、 B 、 A 通常与系统数据总线的 、 、 连接。但也有与系统地址总线相连的,此种用法需小心处理端口地址的组织。 ALE :为通道地址锁存允许选通控制端,输入上跳沿有效;它有效时, C 、 B 、 A 的通道地址值才能进入通道地址锁存器, ALE 下跳为低电平(无效)时,锁存器锁存进入的通道地址。 START :启动 A/D 转换控制引脚,由高电平下跳为低电平时有效;即对该引脚输入正脉冲下跳沿后, ADC 开始逐次比较;也可将 START 与 ALE 连接在一起使用,安排一个 CPU 写端口地址;正脉冲上升沿通道地址(码)被写入通道地址锁存器,下降沿
23、启动 A/D 转换。 EOC : ADC 转换状态输出信号引脚;未启动转换时, EOC 为高电平,启动转换后,正在逐次逼近比较期间 EOC 为低电平,低电平持续时间为 A/D 转换时间,约 (与时钟频率有关),一旦转换完毕, EOC 端上跳为高电平,此信号可供 CPU 查询或向 CPU 发中断。 : 8 位数字量输出引脚, 为 ( MSB ), 为 ( LSB ),它是三态输出数据锁存器的输出引脚,未被选通时, 8 个引脚对片内均为高阻断开;因此可与系统数据总线 直接相连。 OE :数字量输出允许控制端,输入正脉冲有效;它有效时,数据输出三态门被打开,转换好的数字量各位被送到 引脚上;
24、它无效时, 浮空(高阻隔离);显然 OE 端必须设置一个 CPU 读数据的端口地址,未访问时,必须为低电平。 (3)公式 ①单极性 图5 ADC0808/9 芯片的引脚图 ②双极性 可见此系列 ADC 本身是单极性转换器,也可以通过外偏置电路方法,变成双极性输入电压的 A/D 转换器。 3.2.5.显示模块 本系统我们采用LCD液晶显示屏进行显示。LCD为英文Liquid Crystal Display的缩写,即液晶显示器,是一种数字显示技术,可以通过液晶和彩色过滤器过滤光源,在平面面板上产生图象。LCD占用空间小,低功耗,低辐射,无闪烁,降低视觉疲劳。在系统
25、中,LCD主要进行温度的显示。本设计中我们选用LCD1602进行显示,下面是1602的管脚功能说明。 图6 引脚说明 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚功能如下: 表1 引脚功能 引脚 符号 功能说明 1 VSS 一般接地 2 VDD 接电源(+5V) 3 V0 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4 RS RS
26、为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 5 R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 6 E E(或EN)端为使能(enable)端,下降沿使能。 7 DB0 底4位三态、 双向数据总线 0位(最低位) 8 DB1 底4位三态、 双向数据总线 1位 9 DB2 底4位三态、 双向数据总线 2位 10 DB3 底4位三态、 双向数据总线 3位 11 DB4 高4位三态、 双向数据总线 4位 12 DB5 高4位三态、 双向数据总线 5位 13 DB6 高4位三态、 双向数据总
27、线 6位 14 DB7 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 15 BLA 背光电源正极 16 BLK 背光 电源负极 3.3.元器件清单 表2 器件清单 器件名称 个数 单片机 1 A/D转换器 1 D/A转换器 1 LCD1602 1 滑动变阻器 1 运算放大器 1 电流源 5 直流电动机 1 温度传感器 1 4.系统软件设计 4.1.软件流程图 开始 系统初始化 温度传感器采样 A/D转换 AT89C52 LCD显示 D/A转换 执行机构(直流电机) 图7 软件
28、流程图 4.2.软件代码(见附录) 5.调试部分 5.1.调试中遇到的问题 在调试的过程中,起初我们也遇到了一些问题。比如:在进行数据采集时,由于信号的干扰,采集的数据没有按照一定的规律变化,于是我们就加了一个隔离元件,很好的解决了这个问题。 5.2.调试过程 我们通过传感器对炉温进行数据采集,采集到的数据会在LCD液晶显示屏上进行显示。当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动,而且转动的 非常快。电机转动带动阀门,从而控制阀门的开度,由于此时阀门的开度很大,从显示屏上 可以看出温度的变化很快,很快的就达到了400℃。 当采集到的数据在(
29、400~700)℃范围内时,单片机就会控制直流电机转动,而且转动 速度减慢。电机转动带动阀门,从而控制阀门的开度,从显示屏上可以看出温度的变化也减 缓,并且速率在45~75℃/h之间,温度由400℃升温到700℃。 当采集的数据达到700℃时,电机就停止转动。LCD显示屏上的数字停止在700℃不变。 5.3.调试结果与分析 1. 当采集到的数据在(0~400)℃范围内时,仿真图如下: 图8 控制系统硬件仿真图 2. 当采集到的数据在(400~700)℃范围内时,仿真图如下: 图9 控制系统硬件仿真图 3. 当采集到的数据为700℃范围内时,仿真图如
30、下: 图10 控制系统硬件仿真图 4. 停止温度控制,系统进入自由降温阶段。 5. 把系统的四个阶段合并起来,得到如下的工艺曲线: 图11 温度曲线图 从曲线上可以看出:在400℃温度内,气体温度在供气阀门开到最大的情况下,以自由升温的速率在最短的时间(图中为2小时)内升到了400℃。从400℃开始到700℃的保温点,温度按60℃/h速率上升,此段为升温段,到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温,钢卷保温t1时间后停火,进入降温段,而降温过程为自由降温,在此段中温控系统停用了。符合设计系统的要求,使温度在升温、保温过程中都能按照一定的工艺曲线进行
31、了升温和保温。 通过调试,我们看到整个系统能够按照题目的要求完成相应的功能。能够对炉内的温度 进行控制,使其按照要求的曲线进行升温和保温。从而达到了预期的效果。 6.总结 通过本次的课程设计,我受益匪浅。不用说在其中学到的新知识是多么有价值,也不用说它拓宽了多少我的眼界,只是说它让我的能力得到的提高就已足以成为我努力付出的回报。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。下面我对课程设计的过程做一下简单的总结。 第一,接到任务以后进行选题。选题是课程设计的开端,选择恰当的、感兴趣的题目,这对于整个设计是否能够顺利进行关系极大。好比走路,这开始的第一步
32、是具有决定意义的,第一步迈向何方,需要慎重考虑。否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。因此,选题时一定要考虑好了。 第二,题目确定后就是找资料了。查资料是做设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。 第三,通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。 第四,有了研究方向,就应该动手实现了。其实以前的三步都是为这一步作的铺垫。我们小组既有
33、明确的分工,又有很好的合作。通常团队的合作是至关重要的,它往往决定了一个比赛的成败。一位同学主要负责软件部分,我主要负责写报告,另一位同学主要负责硬件部分。在我们的默契的配合下,终于圆满完成了设计。 通过这次设计,我们对数字电路设计和单片机有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛,但在设计的过程中,遇到了很多的问题,有一些知识都已经不太清楚了,但是通过一些资料又重新的温习了一下数字电路部分及单片机方面的内容。在这次比赛中也使我们的同学关系更进一步了,队友之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所
34、以在这里非常感谢我的队友,我从他们身上学到了很多东西。希望以后有更多这样锻炼的机会。
7.参考文献
【1】潘新民、王燕芳.微型计算机控制技术.北京:高等教育出版社,2001.7
【2】周泽魁.控制仪表与计算机控制装置.北京:化学工业出版社,2002.9
【3】徐科军.传感器与检测技术.北京:电子工业出版社,2004.9
【4】于海生 计算机控制技术 北京:机械工业出版社2007.5
8.致谢
在这里我们衷心的感谢院系领导和我们的指导老师们!
9.附录
9.1 #include
35、 TempData); void Lcd_WriteCmd(unsigned char TempData,unsigned char BuysC); void Lcd_ReadStatus(void); void Lcd_Init(void); //LCM初始化 unsigned char Lcd_ReadData(void); void DisplayString(unsigned char X, unsigned char Y, unsigned char *DData); void DisplayOneChar(unsigned char X, unsigned
36、 char Y, unsigned char DData); void Delay(unsigned int delaytime); sbit Lcd_RS=P2^0; sbit Lcd_RW = P2^1; sbit Lcd_E = P2^2; unsigned int dianya[11]={0,50,100,150,200,250,300,350,400,450,500};//0--5V #define Lcd_Data P0 #define DA_Data P3 //----------------------------------
37、 sbit ST=P2^5; sbit EOC=P2^6; sbit OE=P2^7; sbit CLK=P2^4; #define ADC_OUT P1 //------------------------------------------------------------------------- unsigned char b; unsigned int temp; unsigned char table[3]; //==================DAC转换输出控制电热
38、丝加热功率==================== void DAConvert(unsigned long int Voltage) {Voltage=255*Voltage/500; DA_Data=Voltage;} //------------------------------------------------------------------------- unsigned int ADC0808(); //-------------------------------------------------------------------------
39、 void main(void) { Lcd_Init(); // lcd初始化 while(1) { temp=ADC0808(); //temp=100; table[2]=temp%10; table[1]=(temp/10)%10; table[0]=(temp/100)%10; DisplayString(0,1," T:"); DisplayOneChar(10,1,table[0]+0x30);
40、 DisplayOneChar(11,1,table[1]+0x30);//LCD显示测量值 DisplayOneChar(12,1,table[2]+0x30); DisplayOneChar(13,1,'C'); if(temp<=400) DAConvert(dianya[9]); else if(temp>400&&temp<=700) DAConvert(dianya[5]); else DAConvert(dianya[0]); } } unsigned i
41、nt ADC0808() { unsigned int adc; unsigned long int getdata; ST=0; OE=0; ST=1; ST=0; while(1) { CLK=~CLK ; if(EOC==1) break; } //AD时钟脉冲 OE=1; getdata=ADC_OUT; OE=0; adc=getdata*704/255; // adc=adc; return(adc); } void Lcd
42、WriteData(unsigned char TempData) { Lcd_ReadStatus(); Lcd_Data = TempData; Lcd_RS = 1; Lcd_RW = 0; Lcd_E = 0; Lcd_E = 0; Lcd_E = 1; Lcd_E = 0; } //写指令 void Lcd_WriteCmd(unsigned char TempData,unsigned char BuysC) { if (BuysC) Lcd_ReadStatus(); Lcd_Data = TempData; L
43、cd_RS = 0; Lcd_RW = 0; Lcd_E = 0; Lcd_E = 0; Lcd_E = 1; Lcd_E = 0; Lcd_E = 0; } //读数据 unsigned char Lcd_ReadData(void) { Lcd_RS = 1; Lcd_RW = 1; Lcd_E = 0; Lcd_E = 0; Lcd_E = 0; Lcd_E = 0; Lcd_E = 1; Lcd_E = 0; return(Lcd_Data); } void Lcd_ReadStatus(void)
44、{ Delay(100); } void Lcd_Init(void) //LCM初始化 { Lcd_Data = 0; Lcd_WriteCmd(0x38,0); //三次显示模式设置,不检测忙信号 Delay(6000); Lcd_WriteCmd(0x38,0); Delay(6000); Lcd_WriteCmd(0x38,0); Delay(6000); Lcd_WriteCmd(0x38,1); //显示模式设置,开始要求每次检测忙信号 Lcd_WriteCmd(0x08,1); //关闭显示 Lcd_WriteCmd
45、0x01,1); //显示清屏 Lcd_WriteCmd(0x06,1); // 显示光标移动设置 Lcd_WriteCmd(0x0C,1); // 显示开及光标设置 } //按指定位置显示一个字符 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; //算出指令码 Lcd_Wr
46、iteCmd(X, 0); //这里不检测忙信号,发送地址码 Lcd_WriteData(DData); } //按指定位置显示一串字符 void DisplayString(unsigned char X, unsigned char Y, unsigned char *DData) { unsigned char ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]!='\0') //若到达字串尾则退出 { if (X <= 0xF) //X坐标应小于0xF { DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 ListLength++; X++; } } } void Delay(unsigned int delaytime) { while(delaytime--); } 课程设计评语 指 导 教 师 评 语 设 计 成 绩 注






