自动化工程训练设计报告温度测控系统的设计_第1页
自动化工程训练设计报告温度测控系统的设计_第2页
自动化工程训练设计报告温度测控系统的设计_第3页
自动化工程训练设计报告温度测控系统的设计_第4页
自动化工程训练设计报告温度测控系统的设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、自动化工程训练设 计 报 告2007.09目录第一章 微控制器应用系统综合设计的目的意义11.1 实验目的11.2 课程设计在教学计划中的地位和作用1第二章 温度测控系统软硬件设计任务22.1 设计内容及要求22.2 课程设计的要求2第三章 总体设计方案33.1 设计思想33.2 总体设计流程图4第四章 硬件设计54.1 硬件设计概要54.2 所用到的芯片及其各自功能说明54.2.1 芯片列表54.2.2 80c32的功能简介54.2.3 adc0809的功能简介64.2.4 8279的功能简介84.2.5 液晶显示lcd的功能简介104.3 硬件电路设计系统原理图及其说明10第五章 软件设计

2、115.1 流程图及其说明115.1.1a/d转换子程序115.1.2键盘扫描子程序125.1.3液晶显示子程序135.1.4比较报警子程序155.1.5控制子程序165.2 源程序及其说明17第六章 系统调试及使用说明18第七章 收获、体会19附录一:硬件原理图20附录二:源程序清单21参考文献49第一章 微控制器应用系统综合设计的目的意义1.1 实验目的微控制器应用系统综合设计是为测控专业微控制器技术课程而开设的课程设计教学环节,其目的在于培养学生综合运用理论知识来分析和解决实际问题的能力,是通过设计以微控制器为核心的单片机检测系统,加深学生对微控制器技术的了解,进一步掌握其程序设计与硬件

3、接口技术。本课程的主要任务是运用所学微控制器技术、微机原理等方面的知识,设计出一台以80c32mcu为核心的单片机数据采集、通讯或测控系统,完成信息的采集、处理、输出及人机接口电路等部分的软、硬件设计。1.2 课程设计在教学计划中的地位和作用本课程设计涉及微控制器技术课程的基本概念和理论,主要要求学生掌握微控制器的指令系统、中断技术、总线扩展、模拟与数字i/o接口技术与通讯技术等,重点是培养学生利用微控制器的硬、软件开发技术进行微控制器系统的设计与开发能力及掌握微控制器在自动化测控应用系统中的设计与开发法。通过课程设计,使学生能够更加了解单片机这种高科技技术,增加学习的积极性,也为今后进一步的

4、学习打下坚实的基础。第二章 温度测控系统软硬件设计任务2.1 设计内容及要求题目是温度测控系统的设计。要求设计相应的a/d、d/a、键盘、显示接口和热电偶测温及冷端补偿电路,可在线键盘参数设置、定时检测、显示、报警,其中控制输出采用二位式控制,输出部分采用开关量进行控制。具体要求是: adc0809采样,lcd 4位显示,喇叭报警,开关量输出2.2 课程设计的要求课程设计的基本要求如下:1掌握单片微控制器硬件结构和工作原理、中断与定时系统、嵌入式应用、现场总线等基本概念和原理;2熟悉8/16位单片微控制器(8x51/196系列)的主要功能单元和指令系统;3熟悉测控网络中嵌入式微控制器的应用和现

5、场总线应用技术。4利用微控制器的接口技术进行简单的测控及自动化应用系统设计;5每人提交系统设计报告一份,现场演示验收设计系统。第三章 总体设计方案3.1 设计思想这次课程设计的系统是一个温度测量与控制系统。它可以测量09999度范围内的温度。在硬件上它由三部分构成,即测量部分、数字转换与处理部分和控制部分。第一部分主要由温度传感器(本设计使用ad590),滤波电路和放大电路组成,其主要功能是把温度信号转换成05v以内的电压信号,为后面的电路所使用。第二部分的核心是单片机,另外还有a/d转换器,键盘接口电路,显示接口电路及报警电路。其主要功能是把从放大电路送来的05v的电压信号转换成0255的数

6、字量,然后经过标度转换,转换成实际的温度值在液晶显示器上显示出来,而且可以通过键盘设置报警值,对超过给定范围的温度,系统喇叭报警。第三部分是通过开关量输出控制加热和降温,使温度值维持在设定的范围内。而所有的这些操作都是在单片机的控制下有序进行的。所以,其总体结构图如图3.1所示:根据前面讲述的系统结构图可以确定整个系统的信号流向和设计思路。根据系统的结构和各部分的功能可知信号的流向是自左向右的,因此我们的设计应该也是从左到右一步一个地进行。被测量的温度信号首先应该转换为电信号才能被处理。因此首先要选择合适的传感器,将温度信号转换为电信号。从传感器来的电信好很微弱,且含有高频噪声,所以应在后面设

7、计一个低通滤波器和一个放大电路,来滤除噪声,并且把电信号放大到目前为止伏的范围内。因为要用单片机处理该信号,所以放大电路的后面应跟一个a/d转换器,转换后的数字信号应送单片机进行显示,所以要设计一个显示电路,本次设计所使用的是lcd显示器,根据设计任务,要设计一个键盘和一个报警电路,实现输入参数设定和超限报警功能,还要再设计控制电路,实现温度超过上限时自动降温,低于下限时自动升温。这就是该系统的整个设计过程。上面的设计不仅牵涉到硬件的设计,还牵涉到软件的设计。在设计软件的时候必须确定主程序的流程图。然后再分别设计各个功能模块,这样才能有计划有秩序地进行系统的设计。下面给出了该系统的总程序框图,

8、如图3.2所示:3.2总体设计流程图第四章 硬件设计4.1 硬件设计概要本系统要测量的是温度信号。温度信号是非电量,必须要把它转换成电量才能对它进行处理。因此选择合适的传感器是很重要的。这里选用ad590温度传感器,再经滤波放大电路,得到05v的电压输出,然后经由adc0809转换成数字量输出,转换成的电压信号通过通道0输入,数据量输出到80c32的p0口,同时8279的数据输出口d0d7接到80c32的p0口,再接到lcd液晶显示器的数据输入口。adc0809、8279、lcd的片选信号分别接到y1、y3、y0,将各芯片的wr、rd信号分别接到80c32的xwr、xrd口,并选用适当的时钟信

9、号。这样经adc0809转换成的数字量,经过程序中的标度变换在lcd上显示出来,利用8279和扩展键盘随时设定上下限值并在lcd上显示出来,为了实现报警功能,将p1.7口接到喇叭,这样当测量的温度值超过上限或低于下限时就喇叭报警,将p1.6口、p1.5口都接到继电器,继电器输出端分别接加热部分和电扇。当喇叭报警时,p1.6口或p1.5口输出一个低电平,对应的使温度升高或降低,从而实现对温度的控制功能。4.2 所用到的芯片及其各自功能说明4.2.1 芯片列表80c32单片机8279可编程键盘/显示器接口芯片adc0809数模转换器液晶显示lcd4.2.2 80c32的功能简介80c32是inte

10、l公司mcs-51系列单片机中基本的产品,它采用intel公司可靠的chmos工艺技术制造的高性能8位单片机,属于标准的mcs-51的hcmos产品。它结合了hmos的高速和高密度技术及chmos的低功耗特征,标准的mcs-51单片机体系结构和指令系统。80c32内置8位中央处理单元、256字节内部数据存储器ram、32个双向输入/输出(i/o)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。但80c32片内并无程序存储器,需外接rom。此外,80c32还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结cpu而ram定时器、串行口和中

11、断系统维持其功能。掉电模式下,保存ram数据,时钟振荡停止,同时停止芯片内其它功能。80c32有pdip(40pin)和plcc(44pin)两种封装形式。4.2.3 adc0809的功能简介adc0809是一个逐次逼近式8位a/d转换器,它可以把0-5伏的电压信号转换成0-255的数字量。adc0809是采用cmos工艺制成的八位八通道单片a/d逐次逼近型转换器,逐次逼近型转换器包括1个比较器,1个数模转换控制器,1个逐次逼近寄存器(sar)和1个逻辑控制单元,转换中的逐次逼近是按对分原理由控制逻辑单元完成的,它原理简单,便于实现,不存在延迟问题。其转换精度达0.4%。adc0809有28个

12、引脚,其中:d0-d7:输出数据线; in0-in7:8路模拟电压输入端; adda,addb,addc:路地地址输入,adda是最低位,addc是最高位; start:启动信号输入端,下降沿有效; ale:路地址锁存信号,用来锁存adda-addc的地址输入,上升沿有效; eoc:变换结束状态信号,高点平表示一次变换已结束; oe:读允许信号,高电平有效; clk:时钟输入端; vref(+),vrer(-):参考电压输入端; vcc:5v电源输入; gnd:地。 其管脚图如图4.2.31所示:图4.2.31 adc0809管脚图 adc0809 需要外接参考电源和参考时钟。外接时钟频率为1

13、0khz到1.2khz。在时钟为640khz时,依次变换时间为100us,且随时钟降低而增加。在ad变换时,路地址应先送到adda-addc输入端然后在ale输入端加一个正跳变脉冲,将路地址锁存到adc0809内部的路地址寄存器中。为了启动ad变换,必须在start端加一个负跳变信号,此后变换工作就开始进行。标志adc0809正在工作的状态信号是eoc,他由高电平变换成低电平。一旦变换结束,eoc信号就又由低电平变为高电平。此时只要在oe端加一个高电平,即可打开数据线的三态缓冲器而从d0-d7数据线读得一次变换后的数据。ac0809可以直接和单片机相连。其硬件接线图如图4.2.32所示:图4.

14、2.32 ad0809的硬件连线图4.2.4 8279的功能简介8279可同时提供键盘和数码显示的可编程接口,键盘部分也可作传感器开关阵列的接口,适合中小规模的键盘及最大16位的数码显示的场合,可与8位微处理器总线相连。使用8279可以代替单片机完成键盘和显示器的许多接口操作,大大减轻了单片机的负担.而且键扫描的内容已在8279芯片中有硬件电路自动完成,减少了编制程序的麻烦。8279芯片的接口管脚图如图4.2.41所示:图4.2.41 8279管脚图40个引脚除5v电源接线和地线外,依功能分为3组:与cpu的接口连线、与键盘的接口线以及与显示器的接口线。与cpu的接口线(a)d0d7:双向数据

15、总线。cpu通过这组接线向芯片写入工作方式控制命令字和显示输出的数据,读回芯片的工作状态和键盘编码。(b)cs:片选输入线。低电平允许对芯片的读、写操作。(c)a0:地址码最低位输入线。低电平选中片内数据寄存器,高电平选中片内命令和状态寄存器。(d)rd、wd:读、写控制线。分别控制数据命令和状态的读、写。(e)reset(复位输入线)、irq(中断请求线)及clk(时钟线,系统送入时钟作芯片内部定时)。与键盘的接口线(a)sl0sl3:扫描信号线,用作键盘的行扫描信号,以及数码的位选信号。可编程使芯片工作在编码方式或译码方式,前者按sl0sl34位编码输出16种编码正脉冲,后者按sl0sl3

16、顺序输出负脉冲,按编程的时钟频率周而复始地输出。(b)rl0rl7:回馈信号输入线,与键盘的列线相连。当芯片输出行扫描信号时,芯片自动接收这些列线回馈信号。当有按键按下时,经约10ms消抖处理,被按下的键所在的列输出低电平信号,其他列输出高电平。(c)shift、cntlstb:位移、控制选通输入方式信号线。在键盘方式时,此两线的状态和闭合键的参数一起决定键的定义。8279支持64个键的键盘,加上此两线的4种编码,键定义码可达256个。在选通输入方式时,cntlstb线用作数据送入fifo的选通线。与显示器的接口线(a)sl0sl3扫描信号线也是数码显示器的位选信号线。(b)oa0oa3、ob

17、0ob3:数据输出线。数据显示器的段码从这两组线输出,它们与位选线sl0sl3同步,实现分时数据显示。芯片内部有一个16字节长的显示存储器,存储欲显示的段码,最大可支持16位数码显示。(c)bd:消隐信号线。此输出信号用来在显示数据切换时进行消隐,以免显示跳动,此信号也可由消隐命令产生。8279的主要工作方式有扫描键盘输入方式、扫描传感器开关阵列输入方式、选通输入方式,以及显示器输出方式。键盘接口输入方式电路原理图如图4.2.42所示:图4.2.42 键盘显示原理图4.2.5 液晶显示lcd的功能简介液晶显示器件(lcd)由于具有显示信息多、体积小、重量轻、功耗低、寿命长、价格低、接口控制方便

18、等优点,正在测量及控制领域被广泛地推广和应用。液晶显示器按其功能可分为笔段式和点矩阵式两种。后者又可以分成字符点阵式和图形点阵式,图形点阵式液晶显示器不仅可显示数字、字符等内容,还能显示汉字和任意图形。目前用于图形液晶模块的控制器很多。本次设计采用的是6963c图形点阵式液晶显示控制器,它能直接与80 系列的8 位微处理器接口。在t6963c中内嵌有128种字符点阵的cgrom(字符发生器rom),同时t6963c还可管理一定大小的显示缓冲区。显示缓冲区ram的具体大小由不同显示尺寸的模块决定,点阵越大ram越多,本设计采用的64128模块带有8kb的ram。4.3 硬件电路设计系统原理图及其

19、说明见附录第五章 软件设计5.1 流程图及其说明本系统真正说来在软件上可分为以下几个部分:a/d转换,键盘接口,显示电路、报警和控制。以下分别从软件的角度来说明:5.1.1a/d转换子程序根据第四章的接线图可以得出a/d的口地址是9000h。a/d转换的程序流程图如图5.11所示:根据上面的流程图,编制a/d转换程序如下:change: mov a,#00h mov dptr,#9000h movx dptr,a mov a,#00h mov sbuf,a mov sbuf,amovx a,dptr转换完以后,转换的结果存在累加器a中,然后通过标度变换送到显示程序。5.1.2键盘扫描子程序键盘

20、扫描子程序框图如图5.12所示:键盘扫描程序为:keyset:setbit1;开中断movie,#84hclr0d4hmov 2eh,#00h mov 2fh,#00hmovdptr,#0b001h;命令口mova,#00h;8*8字符显示,左边输入 外部译码键扫描movx dptr,amov a,#32h;内部时钟,18分频movx dptr,amov a,#0dfh;消除显示movxdptr,aclr22h;设置参数标志位清零clr21hmov40h,#00hmov50h,#09hmov51h,#09hmov52h,#09hmov53h,#00h mov 54h,#00h mov 55h,

21、#00hret5.1.3液晶显示子程序由于本系统是液晶显示,所以这里的程序是液晶显示初始化程序,其子程序流程图如图5.13所示:液晶屏初始化程序如下图所示:cdset:mov r2,#00h mov r3,#00h mov r4,#42h acall cdcm1;图形区首址0000h mov r2,#10h mov r3,#00h mov r4,#43h acall cdcm1;图形区宽度16字节/行 mov r2,#00h mov r3,#10h mov r4,#40h acall cdcm1;文本区首址1000h mov r2,#10h mov r3,#00h mov r4,#41h ac

22、all cdcm1;文本区宽度16字节/行 mov r4,#0a7h acall cdcm3;光标形状8列*7行 mov r2,#00h mov r3,#00h mov r4,#24h acallcdcm1;置地址指针位置显示缓冲区ram 0000h mov r4,#80h acall dcm3;字符发生器为cgram,显示方式为逻辑或 mov r4,#9bh acall cdcm3;启用图形显示,光标闪烁 mov r2,#00h mov r3,#00h mov r4,#21h acall cdcm1;光标指针00,00 ret5.1.4比较报警子程序本系统使用的是喇叭报警,将p1.7口接到喇

23、叭的输入端,这样当采样的温度值大于上限值或小于下限值时就喇叭报警,其程序流程图如下:报警子程序为:warning: mov 20h,#0a0hwarning1: setb p1.7 acall ha2s6 clr p1.7 acall ha2s6 djnz 20h,warning1 clr p1.7 acall ha2s6 retha2s6: mov r2,#06h acall delay retdelay: push 02h ;延时delay1: push 02hdelay2: push 02hdelay3: djnz r2,delay3 pop 02h djnz r2,delay2 pop

24、 02h djnz r2,delay1 pop 02h djnz r2,delay ret5.1.5控制子程序控制部分,要将温度控制在一定的范围内,把p1.6、p1.5口通过继电器分别接到加热和降温部分,低电平有效。当温度高于上限或低于下限值时,就从对应的p1.6或p1.5口输出低电平,使系统加热或降温,使温度稳定在要控制的范围内。程序为:clrp1.6clrp1.55.2 源程序及其说明见附录第六章 系统调试及使用说明在系统调试的过程中,我首先选择进行的是lcd的显示调试。要在lcd上显示相关的信息及数据,就要把对应的字模正确地放入显示缓冲区,同时显示定位也很重要,这就需要设置地址指针,之后

25、要实现实时设定上下限值的功能,需要进行循环的键盘扫描,设定exec、next键为功能键,从键盘输入数字并在lcd上显示出来,再加入a/d采样,采样进来的温度值为0ffh,需经标度变换后转换为四位的十进制数才能在lcd上显示,思考后我是将采样进来的16进制数乘以40,再分别除以1000、100、10得到千位、百位、十位、个位数分别放入四个存储单元中再一一显示出来,所遇到的问题是一开始采样的温度值经标度变换后一直显示不出来,后来经反复调试,我将a/d采样子程序放在主程序的最前面,紧接者就放入显示缓冲区进行显示温度值,然后再扫描键盘是否有键按下,再跳到最前面如此循环运行。报警电路和控制电路相对来说比

26、较简单实现,要解决的问题是子程序段在主程序中放置的位置,多次调试后我选择将二者放在显示采样的温度值的子程序中,即通过把采样的温度值与设定的上下限值相比较,如果在上下限范围内则显示温度值,如果高于上限值或低于下限值,则给p1.7口输出方波信号,使喇叭报警,同时给p1.5口或p1.6口输出低电平控制相应的降温或加热。本装置上电启动后,运行程序,液晶屏上会首先显示系统名称和设计者姓名,然后进入操作/显示界面,在操作/显示界面下,上限值默认为9999,下限值为0000,同时显示采样进来的温度值,第一次按下exec键后进入上限值的设置,输入四位数字,设定上限值,再次按下next键进入下限值的设置,输入四

27、位数字,设定下限值,第二次按下exec键,则上下限值设置完成。在程序运行过程中可以随时设定上限值。在设置时如果上限值小于下限值时,则在lcd上显示error,表示出错,电路自动报警并返回操作/显示界面。系统在正常使用时将现场采集的温度,送到adc0809转换成数字信号后送到80c32,然后进行标度转换,送显示。若采样进来的温度值高于上限值或者低于下限值,喇叭报警,lcd上显示overflow或overrange,同时对应控制风扇或加热,使温度值稳定在设定的上下限范围内。第七章 收获、体会为期三周的微控制器课程设计已经结束了。通过本次课程设计,让我掌握了不少东西,巩固了在上微型控制器课程时所学的

28、理论知识。通过这次亲手设计,能够很好地把理论知识和实践相结合,既锻炼了我的思维,又提高了我的动手操作能力,为今后的学习和工作打好基础。当然,这次设计也让我认识到了我的不足,让我能在以后的学习中去弥补。开始设计之前,老师安排做了几个与此次设计有关的几个实验,使我们知道自己要干什么。然后就按照自己的设计思路去找资料,写程序,越到后面,我的思路越清晰,做事情也更有目的。因此,才能顺利地完成设计任务。在本设计过程中曾经遇到过一些问题,例如在液晶显示的时候,子程序单独运行很正常,但加入到系统中就发现输入无反应,后来经过一步一步的断点运行时发现是延时的问题,还有其他的问题都是平时的实验无法发现的,在老师和

29、同学们的指导和帮助下,这些问题得以解决。由于自己理解错误,并没有在系统中设计单独的要控制的温度范围,而是把报警的温度上下限作为了要控制的温度范围,不过总的说来,这次课程设计还是基本上成功的,我从中学到了很多东西,这些经验和教训将会对我以后的工作产生很大的帮助。附录一:硬件原理图附录二:源程序清单org6000h qianwei equ 79h ;温度转化后的;千位 baiwei equ 78h ;温度转化后的;百位 shiwei equ 77h ;温度转化后的:十位 gewei equ 76h ;温度转化后的:个位 temp equ 75h ;暂存数据 sx_qianwei equ 53h ;

30、温度设定上限值千位 sx_baiwei equ 52h ;温度设定上限值百位 sx_shiwei equ 51h ;温度设定上限值十位 sx_gewei equ 50h ;温度设定上限值个位 xx_qianwei equ 57h ;温度设定下限值千位 xx_baiwei equ 56h ;温度设定下限值百位 xx_shiwei equ 55h ;温度设定下限值十位 xx_gewei equ 54h ;温度设定下限值个位 ljmpmainorg6100hmain: mov sp,#60h lcall scr;lcd初始化lcallcdclrlcallscrset;屏幕湿度显示lcallkeyse

31、t;8279初始化ha7s1:movdptr,#0b001h;命令口movx a,dptr;读状态字jb acc.7,ha7s1 ;显示无效则等待mov dptr,#0b000h;数据口ha7s3: lcall changemov dptr,#0b001hmovx a,dptranl a,#07hcjne a,#00h,ha7s4;等到fiforam中有数据时继续ajmp endscanha7s4:movie,#00h;关中断mov dptr,#0b000hmovx a,dptr;读入数据mov b,acjnea,#0c3h,goonajmpmaingoon:cjnea,#0e1h,goons

32、can;如果按下的键不是exec键jb22h,clearsta ;判断是否第一次按exec,如不是,则清标志位errgoon:lcallcdclrlcallsetpara;设置参数显示setb22hajmpgoonscanclearsta:;第二次按下exec键,清标志柆clr21hmov30h,#00hmov40h,#00hclrcmova,53hsubba,57h;比较输入的参数大小53h-57hjcerr;如果上限千位小于下限千位,则错误mova,53hcjnea,57h,cleclrcmova,52hsubba,56h;比较输入的参数大小52h-56hjcerr ;如果上限百位小于下限

33、百位,则错误mova,52hcjnea,56h,cle clr c mov a,51h ;比较输入的参数大小51h-55h subb a,55h ;如果上限十位小于下限十位,则错误 jc err mov a,51h cjne a,55h,cleclr c mov a,50h ;比较输入的参数大小50h-54h subb a,54h ;如果上限个位小于下限个位,则错误jc err mov a,50h cjne a,54h,cleerr:lcallshowerr;上限小于下限,错误ajmperrgoon;重新输入cle:lcallcdclrclr22hlcallscrset;屏幕湿度显示ajmps

34、etendgoonscan:jnb22h,setend ;没按下exec,不响应cjnea,#0e2h,go1;是否next键setb21h;next标志位mov40h,#00hgo1:mov r1,#00hmov dptr,#keytabha7s5:mov a,#00hmovc a,a+dptrcjne a,b,ha7s6ajmp ha7saha7s6:inc dptrinc r1mov a,r1jb acc.4,endscanajmp ha7s5ha7sa:mova,r1clr csubb a,#0ah;如果r1为a-f则不显示jnc endscanmov30h,r1inc40h;30h为

35、需显示数据暂存,40h为数据个数 clrcmov a,40hsubba,#05h;键入超过四个数则无响应 jnc endscanlcallshowkey;显示按键ajmpendscansetend:movie,#84hendscan:lcallchange ajmpha7s3ret;-lcd初始化cdset:mov r2,#00hmov r3,#00hmov r4,#42hacall cdcm1;图形区首址0000hmov r2,#10hmov r3,#00hmov r4,#43hacall cdcm1;图形区宽度16字节/行mov r2,#00hmov r3,#10hmov r4,#40ha

36、call cdcm1;文本区首址1000hmov r2,#10hmov r3,#00hmov r4,#41hacall cdcm1;文本区宽度16字节/行mov r4,#0a7hacall cdcm3;光标形状8列*7行mov r2,#00hmov r3,#00hmov r4,#24hacallcdcm1;置地址指针位置显示缓冲区ram 0000hmov r4,#80hacall cdcm3;字符发生器为cgram,显示方式为逻辑“或”(指令代码80h)mov r4,#9bhacall cdcm3;启用图形显示,光标闪烁mov r2,#00hmov r3,#00hmov r4,#21hacal

37、l cdcm1;光标指针00,00ret;-cdclr:push acc;清屏子程序mov r2,#00hmov r3,#00hmov r4,#24hacall cdcm1;置地址指针位置显示缓冲区ram 0000hmov r4,#0b0hacall cdcm3;设置lcd为自动写入状态mov r2,#04hcdcr1:mov r3,#00hcdcr2:acall lcds3;连续写过程每次写都要确认sta3=1clr aacall cdwdt;将a写入lcd状态字=清屏djnz r3,cdcr2djnz r2,cdcr1mov r4,#0b2hacall cdcm3;结束自动写状态pop a

38、ccret;-cdcm1:mov a,r2;将r2/r3/r4依此写入lcd状态字acall cdwdt;将a写入lcd状态字mov a,r3acall cdwdt;将a写入lcd状态字acall cdcm3;将r4写入lcd状态字ret;-cdcm3:push dph;将r4写入lcd状态字push dplacall cdtts;判sta0/sta1mov a,r4mov dptr,#8001hmovx dptr,apop dplpop dphret;-cdwdt:push dph;将a写入lcd数据口push dplpush accacall cdtts;判sta0/sta1mov dpt

39、r,#8000hpop accmovx dptr,apop dplpop dphret;-cdtts:mov b,#40h;判别sta0sta1状态位子程序cddep:mov dptr,#8001h;读标志字movx a,dptrjnb acc.0,cdddp;判别sta0jb acc.1,wcdtu;判别sta1cdddp:djnz b,cddep;在写指令的读写数据前,这两个标志位必须同时为1wcdtu:ret;-lcds3:push dph;连续写过程每次写都要确认sta3=1push dplpush accpush bmov b,#20hcdfwp:mov dptr,#8001hmov

40、x a,dptr;读出状态字jb acc.3,lcdtt;判断自动写标志位sta3djnz b,cdfwplcdtt:pop bpop accpop dplpop dphret;-hzxsr:clr a;依此取字码输出lcd,0ffh结束movc a,a+dptrcpl ajnz hzxsg;将有效字码送显ret;0ffh则结束;-hzxsg:cpl a;分析字码表取出的数据是命令/asc/汉字?转相应处理mov r0,aclr csubb a,#20h;命令?字符?jc ddcom;转命令码处理mov a,r0clr csubb a,#80h;asc?汉字?jnc hzdxs;转汉字处理mo

41、v a,r0push dphpush dpllcall xsasc;转asc处理pop dplpop dphinc dptrajmp hzxsr;处理下一个字码显示;-ddcom:mov a,r0;命令码分析&发送xrl a,#1bhjz xsadd;1bh命令处理nxxsd:inc dptrajmp hzxsr;处理下一个字码显示;-hzdxs:mov a,r0;汉字码显示push dphpush dpllcall xshzf;取相应字模送显pop dplpop dphinc dptrajmp hzxsr;-xsasc:clr c;asc字符显示subb a,#20hmov b,#10hmo

42、v dptr,#ascddlcall hadnx;计算当前字码的字模表首址dptrmov a,r2push accmov a,r3push accmov r6,#10hxsdlp:lcall xsdcn;送出一个数据显示mov b,#10hlcall hadrx;计算显示坐标r2,r3djnz r6,xsdlp;发送完一组16行*8列一个字符pop accmov r3,apop accmov r2,amov b,#01hlcall hadrx;计算显示首址坐标r2,r3ret;-xsadd:inc dptr;1bh命令处理/地址指针设置clr amovc a,a+dptrmov b,#10hmul abmov r2,amov r3,binc dptrclr amovc a,a+dptrmov b,#08hdiv abmov b,alcall hadrx;计算显示首址坐标r2,r3mov r4,#24hlcall cdcm1;将计算好的显示位置写lcdinc dptrajmp hzxsr;下一数据处理;-hadrx:mov a,r2;计算显示首址坐标r2列,r3行add a,bmov r2,amov a,r3addc a,#00hm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论