分拣机器人单片机控制系统设计说明

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

学校代码: 10128
学号: 010202064

本科毕业设计说明书题目:分拣机器人单片机控制系统设计
学生姓名:
学院:
系别:
专业:
班级:
指导教师:
二〇一七年五月
摘要
一般的分拣机器人由于其操作方式较复杂,分拣的效率较差,人机交互系统的不太完善,机械性能欠佳等已经很难满足当今社会的生产实践需要。

伴随着社会的飞速发展,人们对性能优良智能分拣人的需求也与日俱增。

设计一款基于单片机的分拣机器人有很大的实践需要和社会功能。

根据控制系统的要求,决定采用美国INTEL公司MCS-51系列单片机基本产品89C52,作为分拣机器人的主控
制芯片。

它具有运行速度快,功耗低,抗干扰能力强等优点,能够完全我的设计要求。

本系统包括硬件和软件两个部分。

硬件系统主要包括电压转换电路的设计、单片机连接PC机串口电路的设计,单片机系统的设计,驱动电路的设计,显示电路的设计等。

在电路图板上完成各模块的设计与连接。

分析易得,此系统可以完全满足设计需要。

通过光耦等器件克服电机驱动部分与单片机部分的相互干扰。

关键词:单片机;硬件设计;软件编程;89C52
Abstract
The general sorting robot is more complicated due to its operation,sorting is less efficient,human-computer interaction system is not perfect,poor mechanical performance has been difficult to meet the needs of today's social production practice. Accompanied by the rapid development of society,the demand for smart sorters is also growing。

The design of a sorting robot based on a single chip has a great practical need and social function.According to the requirements of the control system,Decided to adopt the United States INTEL MCS-51 series of basic products 89C52,as the main control chip for the sorting robot。

It has the advantages of fast running speed, low power consumption and strong anti-interference ability,can be completely my design requirements。

The system includes both hardware and software。

The hardware system mainly includes the design of voltage conversion circuit,design of serial circuit of PC computer connected by single chip microcomputer,design of Single Chip Microcomputer System,design of the drive circuit,display circuit design, etc。

In the circuit board to complete the design and connection of the module。

Analysis easy to get,This system can fully meet the design needs。

Through the optocoupler and other devices to overcome the motor drive part and the microcontroller part of the mutual interference。

Keywords: Single chip,hardware design,software programming,89C52
目录
第一章前言 (1)
1.1 本论文的背景和意义 (1)
1.2 研究现状 (1)
1.3 本论文的主要方法与研究进展 (2)
1.4 本论文的工作原理框图 (2)
1.5 本论文的主要容 (3)
第二章系统方案设计 (4)
2.1 单片机型号的论证与选择 (4)
2.2 数据显示模块的论证与选择 (5)
2.3 驱动器模块的论证与选择 (6)
2.4 电磁阀的论证与选择 (7)
2.5 总体的方案比较与选择 (7)
第三章系统硬件电路设计 (8)
3.1 STC89C52RC单片机模块 (8)
3.1.1 中央处理单元CPU的介绍 (8)
3.1.2 STC89C52RC单片机的特点 (9)
3.2 复位电路模块 (10)
3.3 振荡电路模块 (10)
3.4 LCD12864液晶显示器模块 (10)
3.5 继电器驱动电路 (11)
3.6 8255电机驱动 (12)
3.7 外部定时器 (12)
3.8 下载电路 (13)
第四章软件系统设计 (14)
4.1程序流程图 (14)
4.2块初始化函数 (15)
4.2.1定时器初始化和pwm的模拟 (15)
4.1.2 12864液晶的初始化 (20)
4.2 按键检测程序 (24)
4.3电机运行状态控制程序 (27)
4.3.1电机控制方法简介 (27)
4.3.2电机速度控制策略 (27)
4.4机械爪控制程序 (31)
4.5锁存器74LS573控制程序 (32)
第五章设计总结及技术展望 (33)
致 (34)
参考文献 (34)
附录1 系统设计电路总图 (35)
第一章前言
1.1本论文的背景和意义
随着人类社会的进步,人类的聪明才智使得工具越来越先进。

工具一直是为人类服务而被生产和改进。

工具的进步使人类劳动更加方便,能够在更困难的环境中工作。

机器人的诞生是通过解放人类的双手和大脑,从社会生产力的枯竭和生产更方便的工具。

自恩格尔伯格先生的发明[1],机器人已经在过去的100年里发生了很大的变化。

目前,机器人已广泛应用于人类生产活动的各个领域。

在现代工厂中,白天不懂夜的黑,输送搬运物品,危险完成排爆排爆机器人代替人类工作,甚至坐在宇宙飞船探索宇宙去探索人类未知的世界。

与人类相比,机器人有许多优点。

机器人不怕累,怕脏,不怕苦。

在危险的情况下,机器人的功能突出。

而且,机器人工作的准确性比较高,人们不会受到同样情绪波动的影响。

机器人的运动方式主要是机械运动,电机驱动[2]是其主要控制方式。

单片机控制电机驱动[3]在当今社会很普遍。

随着单片机理论和硬件系统的更替,单片机控制技术在国民经济发展中起着重要的作用。

自20世纪70年代单片机诞生以来,先后经历了单片机、单片机和SOC三个发展阶段。

目前,供应链管理正朝着高性能、多品种方向发展。

未来的趋势将是CMOS,低功耗,小体积,高性能,低价格,外围电路。

目前,如功率表、示波器等智能仪表,在工业控制、家用电器、各种大型电器等的模块化应用中,都有单片机的使用。

单片机渗透到我们工作的各个领域。

1.2 研究现状
国外分拣系统起步较早,目前普遍采用自动化的分拣系统,在我国分拣系统起步较晚,目前主要采用人工分拣方式。

智能分拣系统发展依赖于机械设计水平的不断提高,在自动分拣系统中[4],机械手爪设计科学性影响系统的正常工作。

自动分拣系统是二战后,发达国家为了提升运送物品效率提出的一种作业方式,广泛应用于大型商场、快递行业。

分拣系统适用于大批量的分拣货物,降低了出错概率。

此系统的出现极大的减少了人员使用。

随着技术的发展,国外的分拣系统呈现出自动化程度越来越高[5],精确度越来越高。

但是系统一次性投入较大,资本回收较慢,系统结构复杂,同时对商品外观要求较高,因此国发展较慢。

而机械机械手在国外发展也较快,由于国外起步较早,其机床加工水平相对较高,机械手爪的生产主要使用自动化机械生产,产品工艺水平高,同时机械手臂自由度公式的出现,加快了工业水平的提升,通过理论计算可以得到机械手臂的尺寸以及需要多少相关的模块[6][7][8]。

在进行设计之前可以进行仿真分析每个部件受到的力度,优化各部分尺寸的设计。

在国分拣系统起步较晚,目前还是主要采用人工分拣方式。

我国的分拣系统集约化程度低。

企业投资一般集中在货架以及传送带等设备上面。

物流体系整体运转较低,技术设备相对落后。

随着技术的发展,我国自动分拣系统也在不断发展,我国可以自主生产多种自动分拣机,如托盘式翻板式与交叉带式分拣机等,主要应用于配送中心、邮政、机场等部门。

但精度还需要提高。

同时我国的机械加工水平不断提升,我国机械加工起步较晚,但随着车床等技术的引进,发展较快。

1.3 本论文的主要方法与研究进展
本毕业设计论文以生产实践中所出现的问题为出发点,为了满足市场化需要,提升我国的自动化水平,本文拟研究一款基于单片机的分拣机器人。

该系统采用传送结构实现,传送带负责将物件传送等待分拣,红外检测到物品到达时,单片机控制伺服电机抓取物品,放置在对应的物品箱。

1.4 本论文的工作原理框图
本设计采用以单片机为控制核心,实现抓物的基本动作功能,基于红外技术的收发系统实时检测机器抓物的设计与实现的工作原理框图如图
1.4所示。

图1.4 工作原理框图
1.5 本论文的主要容
研究伺服电机与步进电机区别,伺服电机的工作原理,单片机控制器使用驱动器高精度控制伺服电机的运动[9],可以实现水平、垂直两个轴的定位控制和机械手爪的开合控制;
(1)手爪运行速度可达3m/s,定位精度不小于0.5mm;
(2)要具有较好的人机接口和安全性措施;
(3)控制系统具有与其它计算机通讯功能。

第二章系统方案设计
2.1 单片机型号的论证与选择
方案一:51单片机
优点:STC89C52RC是51单片机,它的成本低性能高而且支持ISP和IAP技术。

用户可以在系统板上烧录自己的程序,修改调试非常简单方便。

IAP技术能将部部分EEPROM可以用专用Flash代替使用,保证停电后能保证数据不丢失,擦写次数可以达到100000多次,不用外接EEPROM。

而且与传统8051单片机程序兼容,硬件无需改动。

缺点:作为8位的单片机,运行速度相对来说比较慢。

而且普通的非加强版51单片机并不带部时钟电路,如果不外接振荡电路就无法工作,5v的工作环境相对来说比较耗电。

方案二:MSP430单片机
优点:使用MSP430系列单片机。

MSP430系列单片机是美国仪器公司生产的一种16位微处理器,使用的是精简指令集。

MSP430单片机最显著特点就是超低功耗。

微小的电量就能使单片机正常工作,中央处理器可的工作电压在1.8V~3.3V之间[10]。

缺点:超低功耗使得单片机只需要3.3v就能工作,但是这也使得很多需要5v才能工作的硬件电路需要外加驱动才能工作,使得硬件设计复杂化。

而且430单片机不带片EEPROM,这就使得430单片机不能执行一些特殊指令。

430单片机作为16位单片机虽然运行速度快了一些但是价格却高了很多,在产品设计中无疑会增加产品的成本。

方案三:STM32单片机
优点:STM32F1系列属于32位ARM微控制器中的中低端产品,由意法半导体公司生产, Cortex-M3核。

可由Flash的大小可分为小容量、中容量、大容量。

芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能[11]。


以STM32单片机基本具备51和430单片机的所有优点,而且随着STM32的普及,部分STM32的低端产品甚至比430还要便宜。

缺点:基于ARM核的STM32单片机的价格也是单片机中价格最高的,而且程序编写复杂,初学者不容易看懂。

综上所述,STM32单片机虽然最强,但是由于其出色的性能与高昂的价格,使得它并不适用于小型的电子产品的应用,430单片机可以说除了低功耗基本没有任何优点。

至于51单片机,作为年代最早的单片机,它使用的方式简单,基本能满足多种小型电子产品设计的需求,而且它使用和学习都十分简单,比较能被更多人接收。

通过对比使用STC89C52RC单片机。

2.2数据显示模块的论证与选择
方案一:数码管
优点:数码管是由半导体发光器件组成,主要是由八个发光二极管工作。

而且数码管拥有两种驱动方式,静态显示驱动和动态驱动,但是无论是动态驱动还是静态驱动,数码管都有高亮度和低功耗的优点。

而且数码管的使用相当的简单且价格低廉。

缺点:不同位数的数码管的管脚数不同,位数越多管脚越多。

所有的数码管都需要外接驱动电路,焊接比较复杂而且能显示的容相当有限。

方案二:LCD1602
优点: LCD1602为平面薄型显示设备,LCD1602能够显示字母、符号和数字,能够显示16*2个字符,能够显示较多信息。

而且LCD1602价格低,体积小,功耗低等优点,被广泛的用作各种仪器的显示器。

缺点:1602除了程序上要求复杂一点基本没有缺点。

方案三:LCD12864
优点:12864液晶显示模块分为有字库和无字库两种,都是由128*64个点阵构成,该模块可以较多的各种文字数字字符图案等信息。

而且使用较为方便。

缺点:该模块的价格较高,有字库的12864在编程是容易出现字符乱码的现象,处理起来较为麻烦。

综上所述,LCD1602具有很大的优势,但是考虑到实际的需求,虽然数码管的使用硬件设计比较复杂,但是很多情况下可以直接使用驱动芯片来代替驱动电路,而且在大部分电子产品中液晶LCD1602的使用并不是很普及,比如它显示的字符特别小,且不可改变,大部分电子产品中使用的都是笔段式液晶,其原理和用法和数码管一样,但是成本却比数码管要高得多,但是这两种模块都只能十分局限的显示数字字母等信息,无法符合本次设计的要求,以本次设计选择了无字库的LCD12864。

2.3 驱动器模块的论证与选择
方案一:继电器
优点:继电器是在电气输出电路中使用的电气控制装置,使用较为广泛,用法简单。

而且根据不同的要求还分为不同的继电器,普通的继电器价格也十分的低。

缺点:继电器的使用需要外接驱动电路,而且不同的功率的继电器所需要的驱动的电压也不同,所以使用继电器时要考虑到电源的要求。

方案二:可控硅
优点:使用简单,无论多大功率的可控硅都只需要高低电平就能驱动,不需要考虑控制端电源的要求。

缺点:只适用于交流电。

综上所述:本次设计不需要使用大功率电机,所以普通的继电器就能工作,所以选择继电器。

2.4 电磁阀的论证与选择
方案一:直动式电磁阀
在通电时电磁力会将关闭阀门的开关提起,阀门就打开了,断电的时候电磁力消失开关又开始工作阀门就会关闭[12]。

优点:能在各种环境下工作。

缺点:孔径太小,用处很局限。

方案二:先导式电磁阀
在通电的时候电磁力会先把导孔打开,这样会使上腔的压力下降,在关闭开关周围形成压差,流体产生的压力毁推动开关向上移动,阀门开启。

同样断电,阀门关闭[13]。

优点:可以通过定制随意安装。

缺点:工作时有流体压差的限制。

综上所述,作为机械手,需要满足任意性,有力度限制,所以选择先导式电磁阀。

2.5 总体的方案比较与选择
该设计运动主要利用直流电机实现在平面上运动,数字金属舵机构成机械手抓取物体。

利用按键控制装置到达指定位置,再由机械手抓取物体,再将物体送往指定位置,从而实现物体的分拣。

[13]
主控芯片选择较多,有常见的AVR、STC、ARDUINO 等。

根据之前学过的课程,我们决定采用stc系列的STC89c5A60S2增强型单片机作为主控芯片。

之所以不选89C52等芯片,不是因为他们的运算速度不够,主要原因是它们的片上flash太小,难以满足需求,其次是因为自己有闲置的STC89C5A60S2,片上存大,运算速度1T,即充分利用资源节省成本,又可以实现所需要的功能需求。

最后就是附属配件 usb转ttl串口的stc下载线。

选择采用cp2102作为usb转串口芯片方案,下载STC单片机完胜PL2303
方案,最高下载速度可达115200波特率。

第三章系统硬件电路设计
3.1 STC89C52RC单片机模块
3.1.1 中央处理单元CPU的介绍
STC89C52RC单片机是宏晶科技推出一款超低功耗、抗干扰、高速的单片机。

STC89C52RC单片机选用8051核的ISP在系统可编程芯片。

它具有结构简单,易于开发和价格便宜等特点。

STC89C52RC单片机有两种工作电压,一种是2.0V-3.8V,即3V电压单片机,另一种是3.4V-5.5V,即5V电压单片机,本设计选用5V电压单片机。

STC89C52RC单片机具有很宽广的工作温度围,工业级的单片机能够工作在-40℃至85℃的环境里,商业级的单片机能够工作在0℃至75℃的环境里。

STC89C52RC单片机的工作频率最大能够达到48MHz,这样它就能够以飞快的速度去处理相关数据。

STC89C52RC单片机部拥有专用复位电路,当外部晶体频率在20MHz以下时,可以省去外部的复位电路。

STC89C52RC单片机是一种低功耗、抗干扰性强、速度快的单片机。

STC89C52RC单片机在系统可编程芯片上使用8051核isp。

其特点是结构简单,开发简单,价格低廉。

STC89C52RC微控制器有两种工作电压,一种是2.0 V到3.8 V,即三V 电压单片微机,另一种是3.4 V到3.4 V,5 V电压单芯片微机,这种设计选择5伏电压单片机。

STC89C52RC单片机具有广泛的工作温度围,工业级MCU可在40到85的环境中工作,在0到75的环境中,单片微型计算机的商业水平可以工作。

STC89C52RC单片机的工作效率最高为48MHz,因此它可以以快速的速度处理相关数据。

STC89C52RC单片机有一个专用的复位电路,当外部的晶体频率低于20MHz时,它可以保存外部复位电路
3.1.2 STC89C52RC单片机的特点
1.512字节的RAM;
2.eepm功能;
3.两个16位的定时器/计数器;
4.看门狗;
5.有一个程序系列的UART通道;
6.六个中断;
7.低功耗模式;
8.有三个级别的加密存
图3.1.2 STC89C52RC的管脚图
3.2 复位电路模块
当系统接入5V电源时时,STC89C52RC单片机开始复位,如图3.3所示复位电路模块电路原理图。

图3.2 复位电路模块电路原理图
3.3 振荡电路模块
此次设计选用的是11.0592MHz的晶振和30pF的电容,那么STC89C52RC 单片机的工作周期是11.0592MHz×(1/11.0592MHz)=1us。

如图3.3所示的最小时钟振荡电路原理图。

图3.3 振荡电路模块
3.4 LCD12864液晶显示器模块
本设计使用LCD2864液晶显示作为观察正在执行的功能。

如图3.4所示为LCD12864液晶显示器电路原理图。

图3.4 LCD12864液晶显示器模块电路原理图
3.5 继电器驱动电路
当认为按下启动按键时,单片机开始工作,给继电器发送指令。

因为STC89C52RC单片机端口输出的电流比较低,所以加一个三极管以增大功率,驱动继电器正常工作。

如图3.5所示的继电器电路原理图。

图3.5 继电器驱动模块电路原理图
3.6 8255电机驱动
DRV8255可以驱动一个二项四线步进电机,也可以驱动两个直流电机,与8-45v输入电压,最大电流为1.7a,经得起2.5a的瞬时电压通过PWM输入驱动。

可以avref / bvref调整电机绕组电流的电阻,电流应大小的电机额定电流;通过模型/模型/模式,三角配置细分驱动模式,您可以配置2 / 4 / 8 / 16 / 32细分。

nhome脚,从电源,电机转了45度的位置,nhome引脚会输出一个低电平。

如图3.6.
图3.6 8255连接电路
3.7 外部定时器
此次8253作为定时器执行复杂的电机控制器。

1.数据母线缓冲器这个三态、双向和八位的缓冲器用于将8253与系统数据总线连接起来。

CPU执行输入/输出指令时缓冲器就发送或接收数据。

数据总线缓冲器有三个基本功能:
·通过编程确定8253的工作方式;
·向计数寄存器装入数据;
·读出计数值。

2.读/写逻辑读/写逻辑接受来自系统总线的输入,然后产生控制整个器件工作的控制信号。

由CS信号来允许或禁止读写逻辑的工作,因此除非该器件被系统逻辑选中,否则不会发生改变其功能的操作。

3.RD(读)这个输入端上的低电平信号告知8253,CPU正在输入计数值。

4.WR(写)这个输入端上的低电平信号告诉8253,CPU正在输出工作方式信息或向计数器装入数据。

5.A0A1这两个输入端通常连接到地址总线上。

其作用是选择三个计数器中的一个以及选择控制字寄存器以便选择工作方式。

6.CS(选片)这个输入端上的低电平信号将启用8253。

除非器件被选中,否则不会发生读或写操作。

CS输入信号对计数器的实际操作没有影响8253部拥有三个独立但是结构和功能全部相同的定时器。

本次设计使用到了两个8253,连接方式如图3.7。

图3.7 8253连接图
3.8 下载电路
本次设计使用到了CH340芯片下载,因为现在的笔记本电脑都没有了并口通信接口,而用了CH340就可以实现USB转串口,电脑上装上驱动后就可以下载数据,接线方式如图3.8图所示.
图3.8 CH340下载电路
第四章软件系统设计
4.1程序流程图
程序采用了顺序结构,流程图如下:
4.2块初始化函数
4.2.1定时器初始化和pwm的模拟
本方案中定时器采用的是8253定时器,该定时器有六种工作方式,我们需要定时功能。

8253的片选端是用来控制定时器工作方式的端口。

该端口连接至单片机io口。

只需要设置对应端口的电平就可以设置定时器的工作方式。

定时器的作用是用来控制电机的转动时间。

由于存在着电机这种设备,所以需要使用pwm进行调速。

但是51单片机并不能直接输出pwm,所以本设计过软件模拟的方法产生pwm。

软件模拟主要利用定时器的定时中断功能。

本设计采用的是51单片机,51单片机部有两个定时器,分别是T0和T1,T0和T1是两个完全一样的16位定时器。

定时器的作用主要就是定时,在51单片机中定时器的工作方式是以中断的方式进行的。

设定一个定
时时间当定时器定时达到定时时间后,就会进入定时器中断。

在中断中可以处理相关的事件。

在本设计中定时器中断的作用是用来模拟产生pwm的。

由于51单片机部不带硬件pwm,所以需要模拟。

模拟的思路是通过定时器设定时间来控制脉冲的宽度,其控制思路如下图所示:
上述流程图是定时器模拟产生pwm的步骤,定时器设定的定时时间为1ms,也就是说,定时时间到了1ms定时器就会进入中断,在初始化时,要首先设置好
单片机的工作方式,设置单片机的工作方式为方式1,定时时间设为1ms,通过往寄存器TH和TL中装入初始值实现计时时间的调节。

定时时间到1ms时,程序会自动进入中断。

在中断服务程序中可以执行相关的任务代码。

也就是说程序会每隔1ms就会进入一次中断,就会有一个较为准确的周期性。

在中断中主要进行的是按键的处理和pwm的模拟,按键的处理将在后续章节中介绍。

PWM如下图所示:
图4.2.1 PWM图
在上图中,可以看到pwm是一个方波。

占空比是t/T,要让单片机的管脚输出这个占空比,只有通过定时器来实现。

首先假设要输出的pwm频率为100hz,也就是周期T为10ms。

在上面已经提到设置单片机的定时时间为1ms,也就是每个1ms会执行一次中断服务程序。

在中断服务程序里设一个变量flag,每进一次中断这个变量就会自增一次,那么变量自增的次数就可以用来表示时间,每加一次就是过来1ms。

利用这个时间变量就可以设置单片机输出的PWM了。

假设现在要设置的占空比是百分之30.那么就是说整个周期中,高电平时间占整个周期的百分之30.也就是3ms。

在程序中是通过判断定时变量实现的,在第一次进入中断时,设置单片机的一个io口输出低电平。

当第七次进入中断时,此时正好是7ms。

控制这个单片机的io口输出电平翻转,输出高电平。

当第十次进入中断的时候,此时是第10ms,控制这个io口再次输出低电平,如此反复,就可以模拟出占空比为百分之30的pwm了。

程序代码如下:
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=0xff; //重装计数初值
TL0=0x38; //重装计数初值
b++;
get_key(); //按键查询
if(p10==0)
{
delay(10); //延时消抖,按键消抖 if(p10==0)
{
p00=0;p02=p01=p03=1; //前进
list_write_HZ_Str(6,20,"qianjin");
}
}
if(p11==0)
{
delay(10);
if(p11==0)
{
p01=0;p02=p00=p03=1;
list_write_HZ_Str(6,20,"houtui ");//后退
}
}
if(p12==0)
{
delay(10);
if(p12==0)
{
p02=0;p00=p01=p03=1;
list_write_HZ_Str(6,20,"zuo "); //左边
}
}
if(p13==0)
{
delay(10);
if(p13==0)
{
p03=0;p00=p01=p02=1; //右边运动
list_write_HZ_Str(6,20,"you ");
}
}
if(p14==0)
{
delay(10);
if(p14==0)
{
p00=p02=p01=p03=1;
list_write_HZ_Str(6,20,"停止 ");
}
}
if (key_up==1)
{
if(X!=15) //判断是否计数到9999 {
X=X+1; //加一
key_up=0;
}
}
if (key_down==1)
{
if(X!=2) //判断是否计数到0
{
X=X-1; //减一
key_down=0;
}
}
}
4.1.2 12864液晶的初始化
12864是一个带字符库的液晶,可以显示128*64个点。

12864液晶需要通过软件写入命令和数据才可以显示出字符。

在初始化时首先需要写入命令,让12864液晶进入显示状态。

设定显示地址。

指令是根据12864液晶的数据手册编写的。

12864液晶的初始化流程如下:
程序代码如下:
//*****************写指令代码*****************//
void wcode(uchar cd) //写指令代码
{
chkbusy(); //写等待
P2=0xff; //使能LCD
RW=0; //读禁止
RS=0; //输出设置
P2=cd; //写数据代码
E=1; //以下两句产生下降沿
E=0;
}
//*******************把显示数据写到存单元中 *****************//
void wdata(uchar dat) //写显示数据
{
chkbusy(); //写等待
P2=0xff; //使能LCD
RW=0; //读禁止
RS=1; //输出设置
P2=dat ^0xFF; //写数据代码
E=1; //以下两句产生下降沿 E=0;
}
//****************显示LCD程序********************//
void disrow(uchar page,uchar col,uchar *temp)
{
uchar i;
if(col<64) // 左半平面
{
L=1;R=0;
wcode(LCDPAGE+page); // 写指令页
wcode(LCDLINE+col); //写指令行
if((col+16)<64) //如果字在左半平面显示不了,转到右半平面去{
for(i=0;i<16;i++) //写字
wdata(*(temp+i));
}
else //右半平面
{
for(i=0;i<64-col;i++) //减去左边数,从右半平面第一位开始显示 wdata(*(temp+i)); //写字显示
L=0;R=1; //右半平面
wcode(LCDPAGE+page); // 写指令页
wcode(LCDLINE); //写指令行 for(i=64-col;i<16;i++) //写字右半平面
wdata(*(temp+i));
}
}
else
{
L=0;R=1;
wcode(LCDPAGE+page); // 写指令页
wcode(LCDLINE+col-64); //写指令行 for(i=0;i<16;i++) //写字
wdata(*(temp+i));
}
}
//*********************供调用 ****子程序 *************//
void display( int page, int col,uchar *temp)
{
disrow( page, col, temp); //显示上半字
disrow( page+1, col, temp+16); //显示下半字
}
void disrow_ascii(uchar page,uchar col,uchar *temp)
{
uchar i;。

相关文档
最新文档