煤气退火炉控制系统设计.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机控制技术
课程设计
课题:煤气退火炉控制系统
系别:电气与控制工程学院
专业:电气工程及其自动化
姓名:武帅克
学号:181413135
指导教师:张磊
河南城建学院
2016年06 月10 日
目录
1设计任务与要求.......................................................................................... 错误!未定义书签。

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.系统软件设计 (13)
4.1.软件流程图 (13)
5.调试部分 (14)
5.1.调试中遇到的问题 (14)
5.2.调试过程 (14)
5.3.调试结果与分析 (16)
6.总结 (17)
7.参考文献 (18)
8.附录(软件代码)...................................................................................... 错误!未定义书签。

1.设计任务与要求
1.1设计题目
煤气罩式退火炉主要用于对冷轧钢板进行热处理,采用高炉煤气作为燃料。

炉体分内罩和外罩,在内罩内放入退火钢卷,并投入保护性气体防止氧化。

燃烧在内罩和外罩之间进行。

12个喷嘴分为上下两层,每层6个环绕排列。

煤气和空气的喷燃比由两个阀门的连杆共同带动。

设计系统保护气体温度为输入及控制量,以电动执行器带动的蝶阀开度(对应于煤气输入量)为输出的一个单输入单输出的温度控制系统。

1.2工艺要求
设计系统要求温度在升温、保温过程中按一定的工艺曲线升温和保温,在400℃温度内,保护气体温度在供气阀门开到最大情况下,以自由升温的速率在最短的时间内升到400℃。

从400℃开始到700℃的保温该点,温度按45~75℃/h速率上升,此段为升温段,到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温。

钢卷保温一定时间后停火,进入降温段,而降温过程为自由降温,在此段中温控系统停用。

选择合适的控制算法进行控制。

1.3要求实现系统基本功能
采样功能:能够对温度进行采集。

控制功能:能够使系统按照一定的工艺曲线进行升温和保温。

显示功能:显示当前被控量的设定值、实际值,控制量的输出值。

2.总体方案设计
2.1.系统设计方案的提出
本设计是基于AT89C52单片机的控制及显示电路设计,从系统的设计功能上看,系统可分为五大部分,即控制部分、传感器部分、数字显示部分、电源部分和执行部分,对于每一个部分都有不同的设计方案,起初我们组拟订了下面两种方案:
1.控制部分
(1)AT89C52单片机
(2)其他
2.传感器部分
(1) (J型热电偶)铁-铜镍热电偶
(2) (T型热电偶)铜-铜镍热电偶
3.数字显示部分
(1) 采用LED 数码管显示,利用多个数码管来显示数字。

(2)LCD液晶屏显示。

4.电源部分:
(1)购买开关电源。

(2)自制电源。

5.执行部分
(1)用交流电机。

(2)用直流电机,采用集成芯片LM298与LM297组成驱动电路。

2.2.方案比较及确定
(1)本设计中我们采用AT89C52单片机作为主控芯片,AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

AT89C52是一个低电压,高性能CMOS 8位单片机,而且可编程性好。

(2)J型热电偶具有线性度好,热电动势较大,灵敏度较高,稳定性和均匀性较好,价格便宜等优点,广为用户所采用。

其温度范围为0~750℃,符合我们的要求。

虽然T型热电偶也具有这些优点,但是其测量温区为-200~350℃,不能满足我们的要求。

(3)若用LED数码管显示,LED数码管亮度高、小巧轻便,但是电路复杂,显示信息量较小;LCD的优点是:工作电流较小、功耗很低,而且可以清晰显示大量信息,趣味性强。

所以选用LCD液晶显示。

(4)购买的开关电源带负载的能力比较好,比较稳定,但是为了提升自己的动手能力,我们选择自己焊接所需的电路。

(5)若用交流电机,转动速度固定,一般为水平转动速度为4°/秒~6°/秒,垂直转动速度为3°/秒~6°/秒。

其缺点是无法大电流驱动.降低了工作效率且不容易实
现。

若选用集成芯片LM298驱动直流步进电机,具有转速高、可变速的优点,十分适合需要快速捕捉目标的场合。

其水平最高转速可达40~50°/秒,垂直可达10~24°/秒。

这种电路通过芯片产生正反向电压.开关速度很快.稳定性极强.效率也非常高。

基于上述考虑.我们拟选用方案二。

2.3. 控制系统方框图
图1 控制系统方框图
AT89C52单片机作为主控模块,通过传感器进行温度的采集,采集的数据经过A/D转换变成计算机能够接收的数字信号,然后在经过D/A转换将数字信号转变成模拟信号去控制执行机构(直流电机)的转动,并且电机的转动分为三个阶段:
第一阶段:当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动,而且转动的非常快。

电机转动带动阀门,从而控制阀门的开度,使温度快速升高。

第二阶段:当采集到的数据在(400~700)℃范围内时,单片机就会控制直流电机转动,而且转动速度减慢。

电机转动带动阀门,从而控制阀门的开度,并且使速率控制在45~75℃/h之间,温度由400℃升温到700℃。

第三阶段:当采集的数据达到700℃时,电机就停止转动。

同时系统整个过程都通过LCD液晶屏对温度进行实时跟踪与显示。

2.4.算法设计问题
运算控制部分主要使用单片机小系统对采集的数据进行处理,方便快捷;我们运用C 语言进行编程。

单片机C语言和标准C语言又存在着很大差别,在计算机上进行C语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C 语言程序设计就必须考虑系统的硬件资源。

有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。

不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法]。

在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。

在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。

比如:用逻辑AND/&取模比MOD/%操作更有效。

在用热敏电阻测量温度时,可根据热敏电阻—温度特性公式来求值。

数学表达式表示为:
RT=RT0expB(1/T-1/T0)
如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用<Math.h>文件中的对数函数,在编译成机器码时函数有1K多字节,对于一般只有几K字节的单片机系统来说,这是十分不合适的。

考虑到系统资源问题可以用一种替代方法—查表法来实现算法。

只要给出一定温度范围内不同温度值对应热敏电阻的电阻值,然后建立表格,只要按照系统求出的阻值,进行查表,插值,就可以求出相应的温度值。

这种算法相比前面的的公式法的算法复杂高,C语言程序代码也长,但在编译成机器码时,代码长度却很短,只有一、二百字节。

3.系统硬件设计
3.1.系统硬件电路设计
123456789101145678910114567891011CLK ST EOC OE
CLK ST EOC OE
A
B C D E F G H H
G F E D C B A 123R1
1R
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD
17
P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U3
AT89C52
+173
0%
RV1
1k
OUT121ADD B 24ADD A 25ADD C 23VREF(+)12VREF(-)16
IN31IN42IN53IN64IN75START 6OUT58EOC 7OE
9CLOCK 10OUT220OUT714OUT615OUT8
17
OUT418OUT319IN228IN127IN026ALE 22U2
ADC0808
VOUT VREF+VREF-
LE D0D1D2D3D4D5D6D7DAC1
DAC_8
D 7
14
D 613D 512D 411D 310D 29D 18D 0
7E 6
R W 5R S 4V S S 1V D D 2V E E
3
LCD1
LM016L
23456789
1
RP1
RESPACK-8
图2 系统硬件电路图
3.2单元模块设计
根据系统要实现的功能,本系统分为五个模块:电源模块、控制模块、执行模块、温度采集模块和显示模块。

分别将各单元模块功能介绍如下:
3.2.1.电源模块
稳压电源模块我们采用三端集成线性稳压集成块:L7805CV 芯片。

本设计中我们所需的5V 电源使用L7805CV 芯片完成。

因为它的外围电路比较简单,并且工作比较稳定。

它的稳压精度为2%,工作电流1.5A ,封装为TO-220(A),工作温度也很不错,并且具有过温保护和短路保护,最大输入电压为35V ,能对电路的长时间工作有很大的保障,故用其作为稳压芯片。

3.2.2. 控制模块
本设计中我们采用AT89C52单片机作为主控芯片,AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

其引脚图如下所示:
主要功能特性:
·兼容MCS51指令系统· 8k可反复擦写(>1000次)Flash ROM
· 32个双向I/O口· 256x8bit内部RAM
· 3个16位可编程定时/计数器中断·时钟频率0-24MHz
· 2个串行中断·可编程UART串行通道
· 2个外部中断源·共6个中断源
· 2个读写中断口线· 3级加密位
·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能
3.2.3.执行模块
执行机构我们采用直流电机作为被控对象,直流电机是电机的主要类型之一。

一台直流电机即可作为发电机使用,也可作为电动机使用,用作直流发电机可以得到直流电源,而作为直流电动机,由于直流电机的启动性能好,具有良好的调速性能,运行稳定;直流电动机的调速范围宽广,调速特性平滑,而且直流电动机的过载能力较强,热动和制动转矩较大。

在许多调速性能要求较高的场合,仍得到广泛使用。

尤其是在调速性能要求较高的大型设备,比如轧钢机上都采用直流电动机拖动。

在本实验中直流电机的作用是:根据电动机转动的快慢来反映煤气退火炉温度上升的快慢。

在0℃~400℃时,电动机快速转动打开供气阀门快速供气,使火炉在最短的时间内快速升温到400℃;从400℃~700℃为火炉的保温点,此时直流电机的转速将慢慢降低;当温度上升到700℃时,阀门供气量将会下降,使火炉进入保温阶段。

这时直流电机将停止转动
3.2.
4.温度采集模块
在本次实验中用到的A/D转换器是ADC0808,其原理图及控制原理如下:
(1)①模拟量输入;② A/D 转换器;③数据输出
图4 ADC0808的原理框图
(2)引脚介绍:
:主电源输入端。

REF ( + )、 REF ( - ):基准电源输入端,使用中 REF ( - )一般接地, REF ( + )
最大可接
,要求不高时, REF ( + )接

电源。

GND :模拟地数字地共用的接地端。

CLK :时钟输入引脚,时钟频率范围 ,典型值
,此时转
换时间约为。

: 8 路模拟量单极性电压的输入引脚。

ADD A 、 ADD B 、 ADD C : 8 选 1 模拟开关的三位通道地址输入端。

用来选择对应的输
入通道,其对应关系如图 9-4 所示。

比如 CBA=011 ,则选中 引脚的输入电压。

C 、
B 、 A 通常与系统数据总线的


连接。

但也有与系统地址总线相连的,此
种用法需小心处理端口地址的组织。

ALE :为通道地址锁存允许选通控制端,输入上跳沿有效;它有效时, C 、 B 、 A 的通道地址值才能进入通道地址锁存器, ALE 下跳为低电平(无效)时,锁存器锁存进入的通道地址。

START :启动 A/D 转换控制引脚,由高电平下跳为低电平时有效;即对该引脚输入正脉冲下跳沿后, ADC 开始逐次比较;也可将 START 与 ALE 连接在一起使用,安排一个 CPU 写端口地址;正脉冲上升沿通道地址(码)被写入通道地址锁存器,下降沿启动 A/D 转换。

EOC : ADC 转换状态输出信号引脚;未启动转换时, EOC 为高电平,启动转换后,正在逐次逼近比较期间 EOC 为低电平,低电平持续时间为 A/D 转换时间,约
(与时钟频
率有关),一旦转换完毕, EOC 端上跳为高电平,此信号可供 CPU 查询或向 CPU 发中断。

: 8 位数字量输出引脚,

( MSB ),

( LSB ),它是三
态输出数据锁存器的输出引脚,未被选通时, 8 个引脚对片内均为高阻断开;因此可与系
统数据总线
直接相连。

OE :数字量输出允许控制端,输入正脉冲有效;它有效时,数据输出三态门被打开,转换
好的数字量各位被送到
引脚上;它无效时,
浮空(高阻隔离);显然
OE 端必须设置一个 CPU 读数据的端口地址,未访问时,必须为低电平。

(3)公式 ①单极性
图5 ADC0808/9 芯片的引脚图
②双极性
可见此系列 ADC 本身是单极性转换器,也可以通过外偏置电路方法,变成双极性输入电压的 A/D 转换器。

3.2.5.显示模块
本系统我们采用LCD液晶显示屏进行显示。

LCD为英文Liquid Crystal Display的缩写,即液晶显示器,是一种数字显示技术,可以通过液晶和彩色过滤器过滤光源,在平面面板上产生图象。

LCD占用空间小,低功耗,低辐射,无闪烁,降低视觉疲劳。

在系统中,LCD 主要进行温度的显示。

本设计中我们选用LCD1602进行显示,下面是1602的管脚功能说明。

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚功能如下:
3.3.元器件清单
4.系统软件设计4.1.软件流程图
图7 软件流程图
5.调试部分
5.1.调试中遇到的问题
在调试的过程中,起初我们也遇到了一些问题。

比如:在进行数据采集时,由于信号的干扰,采集的数据没有按照一定的规律变化,于是我们就加了一个隔离元件,很好的解决了这个问题。

5.2.调试过程
我们通过传感器对炉温进行数据采集,采集到的数据会在LCD液晶显示屏上进行显示。

当采集到的数据在(0~400)℃范围内时,单片机就会控制直流电机转动,而且转动的非常快。

电机转动带动阀门,从而控制阀门的开度,由于此时阀门的开度很大,从显示屏上可以看出温度的变化很快,很快的就达到了400℃。

当采集到的数据在(400~700)℃范围内时,单片机就会控制直流电机转动,而且转动速度减慢。

电机转动带动阀门,从而控制阀门的开度,从显示屏上可以看出温度的变化也减缓,并且速率在45~75℃/h之间,温度由400℃升温到700℃。

当采集的数据达到700℃时,电机就停止转动。

LCD显示屏上的数字停止在700℃不变。

5.3.调试结果与分析
1.当采集到的数据在(0~400)℃范围内时,仿真图如下:
D 7
D 6D 5D 4D 3D 2D 1D 0
E R W R S V S S V D D V E E
图8 控制系统硬件仿真图
2. 当采集到的数据在(400~700)℃范围内时,仿真图如下:
D 7
D 6D 5D 4D 3D 2D 1D 0
E R W R S V S S V D D V E E
图9 控制系统硬件仿真图
3. 当采集到的数据为700℃范围内时,仿真图如下:
D 7
D 6D 5D 4D 3D 2D 1D 0
E R W R S V S S V D D V E E
图10 控制系统硬件仿真图
4. 停止温度控制,系统进入自由降温阶段。

5. 把系统的四个阶段合并起来,得到如下的工艺曲线:
图11 温度曲线图
从曲线上可以看出:在400℃温度内,气体温度在供气阀门开到最大的情况下,以自由升温的速率在最短的时间(图中为2小时)内升到了400℃。

从400℃开始到700℃的保温点,温度按60℃/h 速率上升,此段为升温段,到达700℃点,则开始进入保温段,以700℃为恒值温度进行保温,钢卷保温t1时间后停火,进入降温段,而降温过程为自由降温,在
此段中温控系统停用了。

符合设计系统的要求,使温度在升温、保温过程中都能按照一定的工艺曲线进行了升温和保温。

通过调试,我们看到整个系统能够按照题目的要求完成相应的功能。

能够对炉内的温度进行控制,使其按照要求的曲线进行升温和保温。

从而达到了预期的效果。

6.总结
通过本次的课程设计,我受益匪浅。

不用说在其中学到的新知识是多么有价值,也不用说它拓宽了多少我的眼界,只是说它让我的能力得到的提高就已足以成为我努力付出的回报。

课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。

下面我对课程设计的过程做一下简单的总结。

第一,接到任务以后进行选题。

选题是课程设计的开端,选择恰当的、感兴趣的题目,这对于整个设计是否能够顺利进行关系极大。

好比走路,这开始的第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。

否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。

因此,选题时一定要考虑好了。

第二,题目确定后就是找资料了。

查资料是做设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。

总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。

第三,通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。

第四,有了研究方向,就应该动手实现了。

其实以前的三步都是为这一步作的铺垫。

我们小组既有明确的分工,又有很好的合作。

通常团队的合作是至关重要的,它往往决定了一个比赛的成败。

一位同学主要负责软件部分,我主要负责写报告,另一位同学主要负责硬件部分。

在我们的默契的配合下,终于圆满完成了设计。

通过这次设计,我们对数字电路设计和单片机有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛,但在设计的过程中,遇到了很多的问题,有一些知识都已经不太清楚了,但是通过一些资料又重新的温习了一下数字电路部分及单片机方面的内容。

在这次比赛中也使我们的同学关系更进一步了,队友之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢我的队友,我从他们身上学到了很多东西。

希望以后有更多这样锻炼的
机会。

7.参考文献
【1】潘新民、王燕芳.微型计算机控制技术.北京:高等教育出版社,2001.7
【2】周泽魁.控制仪表与计算机控制装置.北京:化学工业出版社,2002.9
【3】徐科军.传感器与检测技术.北京:电子工业出版社,2004.9
【4】于海生计算机控制技术北京:机械工业出版社2007.5
8.附录(软件代码)
8.1 #include <reg52.h>
void Lcd_WriteData(unsigned char 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 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
//------------------------------------------------------------------------- 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转换输出控制电热丝加热功率====================
void DAConvert(unsigned long int Voltage)
{Voltage=255*Voltage/500;
DA_Data=Voltage;}
//-------------------------------------------------------------------------
unsigned int ADC0808();
//------------------------------------------------------------------------- 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);
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 int 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_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;
Lcd_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)
{
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(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_WriteCmd(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--);
}。

相关文档
最新文档