单片机原理与接口技术(第七版)课件 项目7、8 LCD日历、温度控制器_第1页
单片机原理与接口技术(第七版)课件 项目7、8 LCD日历、温度控制器_第2页
单片机原理与接口技术(第七版)课件 项目7、8 LCD日历、温度控制器_第3页
单片机原理与接口技术(第七版)课件 项目7、8 LCD日历、温度控制器_第4页
单片机原理与接口技术(第七版)课件 项目7、8 LCD日历、温度控制器_第5页
已阅读5页,还剩257页未读 继续免费阅读

下载本文档

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

文档简介

人机接口DANPIANJIYUANLIYUJIEKOUJISHU单片机原理与接口技术(第七版)“十四五”职业教育国家规划教材李明课前了解12键盘接口345LED显示接口LCD显示LCD显示的日历时钟设计6日历时钟的制作7日历时钟的完善首前后利用LCD模块。显示数字、字符或汉字,平时显示年月日时分秒。必要时可以对表。利用单片机控制LCD模块,数字、字符或汉字。利用单片机定时器0产生时间,并在LCD上显示时间。单片机的并行口接按键,必要时通过按键执行对表功能。1、LCD模块显示原理,驱动程序设计。2、键盘扫描原理与编程3、其它与人机接口有关元器件

1.使用软件设计电路图、编写并调试程序

2.使用工具制作电路板并测试其正确性

3.软硬件联调,完成要求功能说明:涉及1602和12864两种型号LCD。字符或图形方式。不涉及视频和彩色显示。参考样本:光盘仿真文件:1602日历钟.DSN这个题目太简单,看这个图也很简单,先说,怎么干吧。好!咱们先准备材料,然后开工。材料主要是些能刺激人的感官的东西,比如发光的,发声的,可以操作的,等等。与人机接口相关的元件,属于是单片机的输入输出设备。人机接口是单片机应用系统不可缺少的组成部分,是指人与计算机系统进行信息交互的接口,包括信息的输入和输出。控制信息和原始数据需要通过输入设备输入到计算机中,计算机的处理结果需要通过输出设备实现显示或打印。这里的输入设备与输出设备构成了人—机界面。人-机界面中的输入设备主要是键盘,常用的键盘设备包括独立式键盘、矩阵式键盘等;常用的输出设备包括发光二极管、七段数码管、液晶显示器等。本章重点介绍键盘、显示器接口工作原理和编程方法。键盘接口任务7.1●键盘接口从简单的键盘开始。键盘就是按键的组合。按键不简单,弄不好会出大问题。此前用按键没感觉出问题,那是没有实际动手,动手用按键就会发现,按下一个按键不定出来几个数,你怎么解决?好几十个按键,每个按键占用一个I/O口线,够用吗?如果遇到过这个问题并且已经解决了,可以跳过这一任务。键盘用于实现单片机应用系统中的数据和控制命令的输入,常用的键盘大多由若干开关组成。常见的有按键开关,BCD拨码盘、按键阵列等。根据输入信息的特点,不同的键盘有不同的应用场合。键盘接口就是将这些按键开关连接到单片机上的电路。●键盘接口键盘输入是单片机应用系统中使用最广泛的一种输入方式。键盘输入的主要对象是各种按键或开关。这些按键或开关可以独立使用,也可以组合成键阵使用。在单片机应用系统中,使用较多的按键或开关有带自锁和非自锁的、常开或常闭的以及微动开关、DIP开关等。7.1.1按键与去抖按键的分类●键盘接口7.1.1按键与去抖KRVCCY(a)(b)按键及其按下和释放时的输出电压波形对于图7-2(a)所示的按键电路来说,按下和释放按键K的过程中,输出Y的电压波形如图7-2(b)所示。

按键电路及按键抖动处理图中的t1和t3分别为键的闭合和断开过程中的抖动期(分别称为前沿抖动和后沿抖动),抖动时间的长短与开关的机械特性有关,一般为10—20ms;t2为稳定的闭合期,其时间的长短由按键的动作决定,一般为几百毫秒至几秒;t0和t4为断开期。为了保证CPU对键闭合的正确确定,必须去除抖动,在键的稳定闭合和断开期间读取键的状态。键盘接口的主要功能是对键盘上所按下的键进行识别。使用专用的硬件进行识别的键盘称为编码键盘,使用软件进行识别的键盘称为非编码键盘。这里主要研究非编码键盘的工作原理、接口技术和接口设计,按键识别常用键盘扫描法。●键盘接口7.1.2键盘接口●键盘接口7.1.2键盘接口独立连接式键盘矩阵式键盘键盘分类●键盘接口7.1.2键盘接口独立连接式键盘是一种最简单的键盘,每个键独立地接入一根数据输入线,如图7-2所示。可以根据需要使用几个这样的电路。前面多次用到,不再赘述。提示:这种形式的键盘不适合在键数要求较多的系统中使用。独立连接式键盘●键盘接口7.1.2键盘接口矩阵式键盘是指由若干个按键组成的开关矩阵。4行4列矩阵式键盘如图7-2所示。这种键盘适合采取动态扫描的方式进行识别,其优点是使用较少的I/O口线可以实现对较多键的控制。例如,如果把16个键排列成4×4的矩阵形式,则使用1个8位I/O口(行、列各用4位)即可完成控制;如果把64个键排列成8×8的矩阵形式,则使用2个8位I/O口(行、列各用1个8位I/O口)即可完成控制。提示:矩阵式键盘节省端口,但是编程麻烦。矩阵式键盘●键盘接口以图所示的4行4列的矩阵式键盘为例,图中键盘的行线X0~X3通过电阻接+5V,当键盘上没有键闭合时,所有的扫描线和回送线都断开,无论扫描线处于何种状态,回送线都呈高电平。当键盘上某一键闭合时,则该键所对应的扫描线和回送线被短路。7.1.2键盘接口键盘接口的工作原理例如仅6号键被按下时,由于YO~Y3四条扫描线上逐一扫描,未扫描到Y2线时,回送线的4位数据均为高电平,当扫描到Y2线(仅Y2为低时),由于6号键处于闭合状态,回送线Xl也将变为低电平,因此可知扫描线Y2与回送线X1相交处的键闭合了。●键盘接口7.1.2键盘接口键盘接口的工作原理可见,如果X0~X3均为高电平,说明无键闭合;任一条回送线变为低电平,则说明该回送线上有键闭合。与此键相连的扫描线也一定处于低电平(正在扫描)。因此,可以确定扫描线与回送线的编号,这样闭合按键的位置就可确定了。●键盘接口7.1.3键盘输入程序设计举例CPU对键盘扫描的方式程序控制的随机方式定时控制方式中断方式7.1.3键盘输入程序设计举例●键盘接口1、CPU对键盘扫描的方式CPU对键盘扫描可以采取以下方式:(1)程序控制的随机方式。CPU空闲时扫描键盘;(2)定时控制方式。每隔一段时间,CPU对键盘扫描一次,CPU可以定时响应键输入请求;(3)中断方式。当键盘上有键闭合时,向CPU请求中断,CPU响应键盘输入中断,对键盘扫描以识别哪一个键处于闭合状态,并对键输入的信息进行处理。提示:自动防盗报警器仿真项目的电路,其实就是利用中断来处理按键。但是那里没有防抖动的延时。想一想为什么?CPU对键盘上闭合键键号的确定,可根据扫描线和回送线的状态计算求得,也可以根据行线和列线的状态查表求得。7.1.3键盘输入程序设计举例●键盘接口2、键盘扫描程序处理过程对于非编码键盘而言,仅有键盘的接口电路是不够的,还需要编制相应的键输入程序,实现对键盘输入内容的识别。键输入程序的功能包括以下五部分。(1)判断键盘上是否有键闭合即采取程序控制方式、定时控制方式对键盘进行扫描或采取中断方式接受键盘的中断信号,判断是否有键闭合。(2)去除键的机械抖动为保证键的正确识别,需进行去抖动处理。其方法是得知键盘上有键闭合后延迟一段时间,再判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合期,否则认为是键的抖动或者是干扰。(3)确定闭合键的物理位置对于独立式按键来说,采取逐条I/O口线查询的方式实现对按键物理位置的确定;对于键阵来说,需要采取扫描的方式来确定被按键的物理位置。7.1.3键盘输入程序设计举例●键盘接口2、键盘扫描程序处理过程(4)得到闭合键的编号在得到闭合键物理位置的基础上,根据给定的按键编号规律,计算得出闭合键的编号。(5)确保CPU对键的一次闭合仅作一次处理为实现这一功能,可以采用等待闭合键释放以后再处理的方法。提示:以上各功能部分可以在一个程序中完成,也可以通过子程序或中断子程序的方式由多个程序完成。7.1.3键盘输入程序设计举例●键盘接口目的:键盘扫描编程内容:用8155实现4行8列键盘的接口线路。说明:电路连接如图7-4所示。8155的PA设定为输出口,称其为扫描线。PC3~PC0设定为输入口,称其为回送线。在这里,8155与MCS-51单片机的接口采取项目6中图6-16的形式,即PA口的端口地址为7F01H,PC口的端口地址为7F03H。当然,如果没有其他用途,8155也可以不用,直接将键盘的行列线接到单片机的I/O口上也是可以的,这样会省去8155的硬件成本。图中的2个LED数码管是自带译码器的模块,作用是显示扫描得到的键号。7-1矩阵式键盘7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘键值编码形式如下:·回送线PC0上的8个键从左到右依次为00H~07H;·回送线PC1上的8个键从左到右依次为08H~0FH;·回送线PC2上的8个键从左到右依次为10H~17H;·回送线PC3上的8个键从左到右依次为18H~1FH。7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘键值编码形式如下:·如果PC0上有键闭合,其键值为00H+(00H~07H);如果PC1上有键闭合,其键值为08H+(00H~07H);如果PC2上有键闭合,其键值为10H+(00H~07H);如果PC3上有键闭合,其键值为18H+(00H~07H)。其中的(00H~07H)的具体内容由扫描线决定,在程序中用R4存放。7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘键值编码形式如下:·回送线PCO上的8个键从左到右依次为00H~07H;·回送线PC1上的8个键从左到右依次为08H~0FH;·回送线PC2上的8个键从左到右依次为10H~17H;·回送线PC3上的8个键从左到右依次为18H~1FH。如果PCO上有键闭合,其键值为00H+(00H~07H);如果PC1上有键闭合,其键值为08H+(00H~07H);如果PC2上有键闭合,其键值为10H+(00H~07H);如果PC3上有键闭合,其键值为18H+(00H~07H)。其中的(00H~07H)的具体内容由扫描线决定,在程序中用R4存放。其流程图如图7-5所示。参看教材,图太大,此处不好显示。7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘下面的KSl子程序用于判断键盘上是否有键闭合。程序清单如下:KSl:MOVDPTR,#7F01H;将PA口地址送DPTR,PA口作为扫描线MOVA,#00H;所有扫描线均为低电平MOVX@DPTR,A;PA口向列线输出00HINCDPTRINCDPTR;指向PC口MOVXA,@DPTR;取回送线状态CPLA;行线状态取反ANLA,#0FH;屏蔽A的高半字节,低半字节有按键信息RET;返回7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘返回之后,判断A的值,如果A的值是00H则无键按下,如果A的值不是0,说明有键按下,需要进行按键识别。下面的KEY子程序用于扫描键盘、识别按键的键码。该程序应该在按键抖动消除之后执行。如果有键按下,则返回键码在累加器A中,如果没有键按下,则累加器A中返回FFH。程序中的DIR子程序是一个延时子程序。程序清单如下:键盘扫描子程序(1)KEY:ACALLKSl;检查是否有键闭合JNZLKl;A非0,说明有键按下AJMPKND;无按键返回LKl:ACALLDIRACALLDIR;有键闭合延时2×6ms=12ms,以去抖动ACALLKSl;延时12ms以后,再检查是否有键闭合7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘JNZLK2;有键闭合,转LK2AJMPKND;无按键返回LK2:MOVR2,#0FEH;扫描初值送R2,设定PA0为当前扫描线MOVR4,#00H;回送初值送R4LK4:MOVDPTR,#7F01H;指向PA口MOVA,R2MOVX@DPTR,A;扫描初值送PA口INCDPTRINCDPTR;指向PC口键盘扫描子程序(2)MOVA,@DPTR;取回送线状态JBACC.0,LONE;ACC.0=1,第0行无键闭合,转LONE7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘MOVA,#00H;装第0行行值AJMPLKP;转计算键码LONE:JBACC.1,LTWO;ACC.1=1,第1行无键闭合,转LTWOMOVA,#08H;装第1行行值AJMPLKP;转计算键码LTWO:JBACC.2,LTHR:ACC.2=1,第2行无键闭合,转LTHRMOVA,#10H;装第2行行值AJMPLKPLTHR:JBACC.3,NEXT;ACC.3=1,第3行无键闭合,转NEXTMOVA,#18H;装第3行行值键盘扫描子程序(3)LKP:ADDA,R4;计算键码PUSHACC;保存键码7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘LK3:ACALLDIR;延时6msACALLKSl;判断键是否继续闭合,若闭合再延时JNZLK3POPACC;若键起,则键码送ARETNEXT:INCR4;列号加1MOVA,R2JNBACC.7,KND;第7位为0,已扫描到最高列,转KNDRLA;循环右移一位MOVR2,AAJMPLK4;进行下一列扫描KND:MOVA,#0FFH;无按键返回码RET;返回DIR:…………;延时子程序(略)7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘键盘扫描程序的运行结果,是把被按键的键码放在累加器A中,再根据键码进行相应的处理。这里给出一个测试程序,将得到的键号在LED数码管上显示出来。Test:

MOVDPTR,#7F00H;数据指针指向8155控制字寄存器

MOVA,#03H;设定A.B口输出方式,C口输入

MOVX@DPTR,A;写入命令LP1:LCALLKEY;调用键盘扫描子程序

CPLA;返回的键值在A,取反是为了判断

JZLP1;没有按键就继续扫描

CPLA;有按键就恢复键值

MOVDPTR,#07F02H;数据指针指向PB口地址

MOVX@DPTR,A;从PB输出键值数据,驱动LED数码管

SJMPLP1;循环7.1.3键盘输入程序设计举例●键盘接口7-1矩阵式键盘提示:以上程序在光盘中,PROTEUS仿真项目:8155KEY.DSN键盘与单片机的连接也可以通过串行口扩展并行口来实现。这还需用到串—并转换器件,例如使用串行输入、并行输出的74LSl64芯片等。键盘扫描还可以与数码管显示扫描结合进行。有关内容后述。提示:这种CPU主动扫描方式需要经常调用键盘扫描程序,适用于CPU其它任务不多的情况。●键盘接口7.1.3键盘输入程序设计举例判断键盘上是否有键闭合去除键的机械抖动确定闭合键的物理位置得到闭合键的编号确保CPU对键的一次闭合仅作一次处理键盘扫描程序处理过程LED显示接口任务7.2

●LED显示接口

显示接口用于实现单片机应用系统中的数据输出和状态的反馈,常用的有LED、LED数码管、LCD液晶显示接口等。发光二极管简称LED(LightEmittingDiode)。由LED组成的显示器,是单片机系统中常用的输出设备。

LED显示器件的种类很多,但都是由单个的LED发光二极管组成。从颜色上来划分,可以有红、橙红、黄、绿、蓝等颜色的LED显示器;从LED的发光强度来划分,可分为普通亮度、高亮度、超高亮度等;从LED器件的外观来划分,可分为“8”字形的七段数码管、米字形数码管、点阵块、矩形平面显示器、数字笔画显示器等。其中数码管又可从结构上分为单、双、三、四位字;从尺寸上又可分为0.3英寸(1英寸=2.54cm)、0.36英寸、0.4英寸、……5.0英寸等类型。常用的LED数码管尺寸为0.5英寸。将若干LED按不同的规则进行排列,可以构成不同的LED显示器,常见的有LED数码管显示器和LED点阵模块显示器等。

LED点阵模块显示器是指由发光二极管排成一个,n×m的点阵,每个发光二极管构成点阵中的一个点。这种显示器显示的字形逼真,能显示的字符比较多,但控制比较复杂。7.2.1LED显示与驱动●LED显示接口

LED数码管显示器如果要显示十进制或十六进制数字及某些简单字符,可选用数码管显示器。这种显示器能显示的字符较少,形状有些失真,但控制简单,使用方便。LED点阵模块显示器单个LED实际上是一个压降为1.2—1.5V的发光二极管(某些型号的LED电压可达3V),相同型号的LED显示管的压降基本相同,通过LED的电流决定了它的发光强度。图为单个LED的驱动接口电路。提示:适当减小限流电阻可以增加LED的工作电流,使LED的显示效果更好。但工作电流不宜过大,一方面,工作电流继续增大不会增加显示亮度;另一方面,过大的工作电流会对驱动器件造成损害。7.2.1LED显示与驱动●LED显示接口

LED的驱动接口

LED数码管显示器常用的工作方式有静态显示方式和动态显示方式两种。静态显示是指,当显示器显示某一字符时,LED的位选恒定地选中。例如显示字符“0”时,显示器的a、b、c、d、e、f导通,g、dp截止。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。由于单片机本身提供的I/O口有限,在实际使用中通常通过扩展I/O口的形式解决输出口数量不足的问题。电子钟就是利用串行口扩展6个并行口实现静态显示。静态显示:参看仿真文件:595.DSN,串行口扩展并行口静态显示6位计数器,也可以参看0809ADC+.DSN,其中用到了串行口扩展并行口的静态数码管显示静态显示的优点:显示稳定;在发光二极管导通电流一定的情况下显示器的亮度大;系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样节约了CPU的时间,提高了CPU的工作效率。7.2.2LED数码管静态显示●LED显示接口

注意:每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。动态显示方式,是指逐位轮流点亮每位数码管(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关;也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以实现既保证亮度又保证显示连续。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。为了节约I/O口线,常采用动态显示方式。

7.2.3LED数码管动态显示●LED显示接口

提示:动态扫描式显示可以节省I/O口线,但是驱动电路和编程相对麻烦。注意:显示位数太多时,亮度明显不足。

7.2.3LED数码管动态显示●LED显示接口

目的:动态显示编程内容:设计8位共阴极数码管动态显示电路,并写出与之对应的动态扫描显示子程序。要求在这8只显示器上显示片内RAM70H~77H单元的内容(均为分离的BCD码)。说明:8位动态显示器接口逻辑如图7-7所示。7-28位数码管动态显示7.2.3LED数码管动态显示●LED显示接口

在此系统中,使用了单片机的P1口和P2口,其中P2口作为位扫描口,P1口作为段码输出口。在进行扫描时,P2口的8位依次置1,经过ULN2803反相后,依次选中了从左至右的显示器。图中使用了ULN2803,在项目1中也用过,低电平驱动能力很强,每一个引脚灌电流可达500毫安,只需一片即可驱动8位数码管。由于它是反相驱动,单片机输出的位选信号是高电平。段码输出驱动采用了74HCT245,它是8位同相驱动器。7-28位数码管动态显示7.2.3LED数码管动态显示●LED显示接口

动态显示动态扫描子程序清单如下:(1);此程序之前应该将要显示的内容装入显示缓冲区70H-77H,内容为分离BCD码。DISP1:MOVR0,#70H;指向缓冲区末地址

MOVR2,#01H;开始选择最低位所接数码管DISP2:MOVA,@R0;取要显示的数据

LCALLSEG7;查表取得字型码,即段码

MOVP1,A;输出段码

MOVP2,R2;输出位选信号

LCALLD1MS;延时1msMOVP2,#0;关闭显示

INCR0;调整指针

MOVA,R2;读回扫描字即位选信号

CLRC;清进位标志

RLCA;扫描字右移选择下一位

MOVR2,A;保存扫描字

JCPASS;一次显示结束

AJMPDISP2;没结束继续显示PASS:AJMPDISP1;从头开始7-28位数码管动态显示7.2.3LED数码管动态显示●LED显示接口

动态扫描子程序清单如下:(2)D1MS:MOVR7,#02H;;延时lms子程序DMS:MOVR6,#0FFHDJNZR6,$DJNZR7,DMSRET;---------查表获取字形段码-----------------------SEG7:INCAMOVCA,@A+PCRET;---------------显示子程序用的字形表---------------------------------;-----高电平有效,字形笔画a连接最低位--------------------------------TABLE:DB3fH,06H,5bH,4fH;"0","1","2","3"DB66H,6dH,7dH,07H;"4","5","6","7"DB7fH,6fH,77H,7cH;"8","9","A","B"DB39H,5eH,79H,71H;"C","D","E","F"END7-28位数码管动态显示7.2.3LED数码管动态显示●LED显示接口

上面的程序中,虽然每个数码管每次点亮时间仅为1ms,只要主程序在指定时间间隔内往复循环调用显示程序,从视觉角度来看8只显示器就处于同时点亮状态。仿真的时候,利用单步执行,即可看到数码管逐个轮流亮。应该用不到求助3+1了吧!参看仿真文件:动态8位b.DSN提示:这个子程序可以用在很多地方。比如电子钟。敢试试吗?7-28位数码管动态显示LCD显示任务7.3●LCD显示液晶显示器简称LCD(LiquidCrystalDiode3)。这类显示器具有体积小,重量轻,功耗极低,显示内容丰富等特点,在单片机应用系统中有着日益广泛的应用。●LCD显示

LCD是通过在上、下玻璃电极之间封入液晶材料,利用晶体分子排列和光学上的偏振原理产生显示效果的。同时,上、下电极的电平状态将决定LCD的显示内容,根据需要,将电极做成各种文字、数字、图形后,就可以获得各种状态显示。通常情况下,图中的上电极又称为段电极,下电极又称为背电极。7.3.1LCD液晶显示器简介LCD的结构和工作原理●LCD显示7.3.1LCD液晶显示器简介

LCD显示器有段式和点阵式两种,点阵式又可分为字符型和图像型。段式LCD显示器类似于LED数码管显示器。每个显示器的段电极包括a、b、c、d、e、f和g七个笔画(笔段)和一个小数点dp。可以显示数字和简单的字符,每个数字和字符与其字形码(段码)对应。段式LCD这一特性与LED数码管相同。点阵式LCD显示器的段电极与背电极呈正交带状分布(如图7-9所示),液晶位于正交的带状电极间。点阵式LCD的控制一般采用行扫描方式,如图7-10所示为显示字符“A”的情况。通过两个移位寄存器控制所扫描的点。图中的移位寄存器1控制扫描的行位置,同一时刻只有一个数据位为“1’’,相对应的行处于被扫描状态,这时,移位寄存器2可以将相应的列数据送入点阵中,这样逐行循环扫描,可以得到显示的结果为字符“A”。

LCD的分类及特点●LCD显示7.3.1LCD液晶显示器简介点阵式LCD显示器的段电极与背电极呈正交带状分布(如图7-9所示),液晶位于正交的带状电极间。LCD的分类及特点●LCD显示7.3.1LCD液晶显示器简介由于液晶显示器比较复杂,需要的接口比较多,除了特别简单的段码数字式之外,一般不用单片机直接驱动,而使用专用的驱动芯片电路。LCD的分类及特点点阵式LCD的控制一般采用行扫描方式,如图所示为显示字符“A”的情况。通过两个移位寄存器控制所扫描的点。图中的移位寄存器1控制扫描的行位置,同一时刻只有一个数据位为“1’’,相对应的行处于被扫描状态,这时,移位寄存器2可以将相应的列数据送入点阵中,这样逐行循环扫描,可以得到显示的结果为字符“A”。

●LCD显示7.3.1LCD液晶显示器简介LCD显示模块

LCD显示模块(LiquidCrystalDispayModule,简称LCM)是把LCD显示屏、背景光源、线路板和驱动集成电路等部件构造成一个整体作为一个独立部件使用,其内部结构如图7-11所示。LCD显示模块只留一个接口与外部通信。显示模块通过这个接口接收显示的命令和数据,并按指令和数据的要求进行显示;外部电路通过这个接口读出显示模块的工作状态和显示数据。LCD显示模块一般带有内部显示RAM和字符发生器,只要输入ASCII码就可以进行显示。LCD显示模块可分为:LCD段式显示模块,LCD字符型显示模块,LCD图形显示模块三类。每类显示模块都有多种不同的产品可供选用。●LCD显示7.3.2常见LCD显示模块FM1602介绍各个引脚功能如下:1602采用标准的16脚接口,其中:第1脚:Vss为电源地第2脚:VDD接5V正电源第3脚:VEE为液晶显示器对比度调整端第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

1602是常见的字符型点阵液晶显示器模块,它可以显示2行,每行16个字符,每个字符8×5点。一般是黄绿色背景,黑色字符。字符尺寸为3×5毫米。

1602一般是14到16引脚,如图所示。基本特性●LCD显示7.3.2常见LCD显示模块FM1602介绍各个引脚功能如下:

1602采用标准的16脚接口,其中:第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15~16脚:空脚,也有的产品15脚为BLA,背光电源正极,一般需要一个限流电阻再接正5V;16脚为BLK,背光电源地。液晶模块1602与单片机的连接很简单,如图所示。基本特性●LCD显示

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,称为字符库,如表9-1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块根据代码41H把存储的点阵字符图形显示出来,我们就能看到字母“A”。7.3.2常见LCD显示模块FM1602介绍

高4位低4位2345678ABCDEF0(1)

0@Pˋp

ータミαp1(2)!1AQaq

。アチムäq2(3)“2BRbr

┌イッメβθ3(4)#3CScs

┘ウテモε∞4(5)$4DTdt

、エトャμΩ5(6)%5EUeu

•オナュσü6(7)&6FVfv

ゝカニヨρΣ7(8)’7GWgw

ァキヌラgπ8(1)(8HXhx

ィクネリ√х9(2))9IYiy

ゥケノル¨yA(3)*:JZjz

ェコハレj千B(4)+;K[k{

ォサヒロ`万C(5),<

L¥l|

ャシフヮφ円D(6)-=M]m}

ュスヘンキ÷E(7).>

N^n→

ョセホ゛_n

F(8)/?O_o←

ッソマ゜Ö▊●LCD显示7.3.2常见LCD显示模块FM1602介绍指令指令码说明指令周期fosc=250kHzRSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001清除屏幕,置AC为0,光标回位。1.64ms光标返回000000001*DDRAM地址为0,显示回原位,DDRAM内容不变.1.64ms设置输入方式00000001I/DS设置光标移动方向I/D指定显示是否移动S。40µs显示开关0

000001DCB设置显示开或关D、光标开关C、光标所在字符闪烁B.40µs移位000001S/CR/L**移动光标及整体显示S/C,不改变DDRAM内容。40µs功能设置00001DLNF**设置接口数据位数DL、显示行数L字符字体F40µsCGRAM地址设置0001ACG设置CGRAM地址。设置后发送接收数据。40µsDDRAM地址设置001ADD设置DDRAM地址。设置后发送接收数据。40µs忙标志/读地址计数器01BFAC读忙标志BF标志正在执行内部操作并读地址计数器内容。0µsCGRAM/DDRAM数据写10写数据向CGRAM或DDRAM写数据。40µsCGRAM/DDRAM数据读11读数据从CGRAM或DDRAM读数据。40µs●LCD显示7.3.2常见LCD显示模块FM1602介绍(1)符号。DDRAM:显示数据RAMCGRAM:字符发生器RAMACG:CGRAM地址ADD:DDRAM地址及光标地址AC:地址计数器,用于DDRAM和CGRAM(2)控制位I/D=1:增量方式;I/D=0:减量方式S=1:移位S/C=1:显示移位;S/C=0:光标移位R/L=1:右移;R/L=0:左移DL=1:8位;DL=0:4位N=1:2行;N=0:1行F=1:5x10字体F=0:5x7字体BF=1:执行内部操作;BF=0可接收指令它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平,*为任意)液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表9-3是DM-1602的内部显示地址.比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)表格说明注意:1602每行只能显示16个字符,故其显示位置每一行只能用0~15而不能用到40。显示位序号12345…………40DDRAM地址(HEX)第一行0001020304………27第二行404142434467●LED显示

目的:LCD1602显示编程内容:单片机连接1602,编程驱动LCD显示。首先在指定位置显示字符,然后在整个屏幕显示同一个字符一秒,下一秒换下一个字符。测试所有可显示字符操作步骤:用proteus软件绘制电路图,编辑测试程序,编译通过仿真运行,看显示结果单步运行,查看显示过程,理解LCD工作特点和编程方法。其他实训收尾工作测试电路如图7-14所示:7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

测试电路7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

汇编语言测试LCD1602显示程序:;1602显示.ASM(1);在1602日历钟的程序中摘抄出来关于1602显示的部分,;晶振采用6MHZ,机器周期=2us(微秒);-------------------内存分配:-----------------------------------XPOSEQU28H;列方向地址指针(其值为0~15)(用于LCDPOS子程序)YPOSEQU29H;行方向地址指针(其值为0~1)(用于LCDPOS子程序)DATEQU22H;数据COMEQU23H;指令;-------------LCD1602接口RSPINEQUP1.5;FM1602的RS端,0=指令寄存器;1=数据存储器RWPINEQUP1.6;FM1602的RW端,0=写;1=读EPINEQUP1.7;FM1602的E端,下降沿执行指令DATABUSEQUP2;数据线8位,LCDFM1602的数据线7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(2)

ORG0000H;固定入口

JMPSTARTORG0030H;主程序入口START:MOVSP,#5FH;堆栈底-----初始化----主程序开始

CALLLCDRESET;1602初始化

CLREPIN;-----------主循环开始------------------------------MAIN:NOP;将来应用程序就在这里开始调用

LCALLSL1;示例1----调用一个示例程序

LCALLTEST;满屏测试----调用一个测试程序

NOP;还可以调用其他应用程序

JMPMAIN;主循环;------------主循环结束------------------------------7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

程序;1602显示.ASM(3);在第一行第5个字符位置开始,写入"MCS-51"字样SL1:LCALLLCDRESET;初始化

MOVXPOS,#5;指定写字符的开始地址

MOVYPOS,#0;包括行和列,以后连续写入,地址就自动加1LCALLLCDPOS;初始定位,连续写入,以后不需要再定位

MOVDPTR,#TAB1;准备数据,字符在表格中

MOVR7,#6;6个字符,循环6次

MOVR6,#0;字符在表中偏移量SL1A:MOVA,R6;准备查表

MOVCA,@A+DPTR;查表得到字符

;MOVDAT,A;字符数据送到数据线

LCALLLCDWD;向1602写入数据

INCR6;下一个字符偏移量

DJNZR7,SL1A;循环控制

LCALLDELAY400MS;其实延时只有300多毫秒

LCALLDELAY400MS;其实延时只有300多毫秒

RETTAB1:DB‘MCS-51’;要显示的字符表,在程序存储器中建立表格7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(4);ASCII码从21H开始,到7FH结束的所有字符,均满屏显示一遍TEST:MOVA,#20h;要写屏的数据送给DAT,----测试主程序MN_PA:CALLLCDFILL;写整屏子程序

CALLDELAY400MS;其实延时只有300多毫秒

INCA;MOVA,DATCJNEA,#07FH,MN_PA;80H,90H是空白,以后是假名等,改过'9'+1,MN_PAMOVA,#''CALLLCDFILL;写整屏子程序

CALLDELAY400MS;其实延时只有300多毫秒

RET;-------------------------------------------测试程序结束7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(5);===============屏幕填满同一个字符子程序;使用的字符在A中LCDFILL:MOVB,AMOVYPOS,#0;从头开始:第一行LFL_PB:MOVXPOS,#0;第一列整屏显示A中所代表字符LFL_PA:MOVA,BCALLLCDWRITE;定位写字符

INCXPOS;下一列

MOVA,XPOSCJNEA,#16,LFL_PA;判断到头

INCYPOS;下一行

MOVA,YPOSCJNEA,#2,LFL_PB;判断到底

MOVA,BRET7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(6);==============确定显示位置的地址LCDPOS:;设置第(XPOS,YPOS)个字符的DDRAM地址

PUSHACCANLXPOS,#0FH;X位置范围(0到15)ANLYPOS,#01H;Y位置范围(0到1)MOVA,YPOS;(XPOS,YPOS)对应DDRAM地址

CJNEA,#00,LPS_LAY;MOVA,XPOS;(第一行)X:第0--15个字符DDRAM:0--0FHJMPLPS_LAXLPS_LAY:MOVA,XPOS;(第二行)X:第0----15个字符

ADDA,#40H;DDRAM:40----4FHLPS_LAX:ORLA,#80H;设置DDRAM地址

CALLLCDWC;写指令

POPACCRET7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(7);=================定位写字符子程序LCDWRITE:;定位写字符子程序

CALLLCDPOS;定位显示地址

CALLLCDWD;写字符

RET;=======================================LCD初始化程序LCDRESET:;LCD初始化程序

MOVA,#38H;显示模式设置(以后均检测忙信号)CALLLCDWC;LCD写指令子程序,等不忙时将A中指令值写入

MOVA,#01H;显示清屏光标归(0,0)

CALLLCDWCMOVA,#06H;显示光标右移文字不动

CALLLCDWCMOVA,#0CH;显示开及光标无,不闪烁设置

CALLLCDWCRET7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(8);========================写指令子程序;-------送控制字子程序(检测忙信号)命令字在ACCLCDWC:CALLWAITIDLE;等待空闲

JCLCDWCZ;一直忙就不写LCDWCN:SETBEPIN;E=1;送控制字子程序(不检测忙信号)CLRRSPIN;RS=0指令

CLRRWPIN;RW=0写

SETBEPIN;E=1MOVDATABUS,A;指令值送上数据线

NOPCLREPIN;E=0下降沿,LCD执行指令LCDWCZ:RET7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(9);========================写数据子程序;写字符子程序,欲写字符在ACCLCDWD:CALLWAITIDLE;等待不忙

JCLCDWDZ;一直忙就不写

SETBRSPIN;RS=1数据

CLRRWPIN;RW=0写

SETBEPIN;E=0下降沿

MOVDATABUS,A;数据值送到数据线

NOPCLREPIN;E=1LCDWDZ:RET7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(10)WAITIDLE:;等待空闲子程序

PUSHACC;正常读写操作之前必须检测LCD控制器状态MOVA,#100;超过100次循环就是不再等待WTD_PA:MOVDATABUS,#0FFH;单片机口准备输入CLRRSPIN;RS=0访问指令寄存器

SETBRWPIN;RW=1为读出状态寄存器

CLREPIN;E=低电平,产生一个下降沿

NOPSETBEPIN;E=高电平

JNBDATABUS.7,WTD_PB;DB7=0LCD控制器不忙

DJNZACC,WTD_PASETBC;超过100次循环就是不再等待,置CY=1SJMPWTD_PCWTD_PB:CLRC;CY=0不忙标志WTD_PC:POPACC;DB7=0LCD控制器空闲

RET延时子程序:略7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

;1602显示.ASM(10)WAITIDLE:;等待空闲子程序

PUSHACC;正常读写操作之前必须检测LCD控制器状态MOVA,#100;超过100次循环就是不再等待WTD_PA:MOVDATABUS,#0FFH;单片机口准备输入CLRRSPIN;RS=0访问指令寄存器

SETBRWPIN;RW=1为读出状态寄存器

CLREPIN;E=低电平,产生一个下降沿

NOPSETBEPIN;E=高电平

JNBDATABUS.7,WTD_PB;DB7=0LCD控制器不忙

DJNZACC,WTD_PASETBC;超过100次循环就是不再等待,置CY=1SJMPWTD_PCWTD_PB:CLRC;CY=0不忙标志WTD_PC:POPACC;DB7=0LCD控制器空闲

RET延时子程序:略7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LED显示

程序说明都在注释里了,还有疑问可以使用三种求助方式。这是一个简单的LCD1602测试程序,参看仿真文件:1602显示.DSN。光盘中还有几个和LCD1602有关的项目和程序,有兴趣可以参考。提示:这个电路和程序是在后面的自动打铃器项目中摘抄出来的,将来还要使用。7-3LCD1602测试程序7.3.2常见LCD显示模块FM1602介绍●LCD显示同1602一样,12864液晶显示模块(LCM)也是比较常用的一种型号。12864是说显示点数为128×64,如果显示16×16点阵的汉字,可以4行8列共32个汉字。还可以按点控制用来显示图形。

12864LCM的生产厂家比较多,各个厂家的性能也不完全相同。从颜色看有灰白、蓝白、黄绿等几种。外形尺寸大多在长50~60毫米,宽30~40毫米左右。从接口上看有串行接口和并行接口的区别,并行口还有的使用4位数据线和8位数据线的区别。从供电看,有3V和5V的不同,还有的3~5V通用。还有内部自带汉字库和不带汉字库2个类型。由于使用的控制器件型号不一,其控制方法各有千秋。7.3.312864简介LCD显示的日历时钟设计任务7.4

●LCD显示的日历时钟设计电路设计很简单,按照前面的介绍,单片机与LCD1602连接很容易,再加4个按键,用来对表,就可以了。加了一个蜂鸣器(BUZ1),按键的时候响一下。这个电路图是在图的基础上增加了按键,是自动打铃器的一部分,将来增加一点元件,就是自动打铃器。7.4.1LCD日历钟的电路设计●LCD显示的日历时钟设计7.4.2LCD日历钟的程序设计1602的显示格式:第一行:年月日星期,如2013-06-107第二行:时分秒如18:18:18由于1602只能显示英文字符和数字,如果要显示汉字,还是用12864好一些。年月日时分秒的产生有定时器T0实现,这个问题已经不是问题。利用数码管来显示时间也都练习过了,剩下的问题就在于利用LCD1602来显示时间。有上一个技能训练的基础,要在什么位置显示什么内容,那就不是个事。比较麻烦的是对表,要检测按键,要根据按键的动作来修改时间。4个按键不多,都是独立按键,不用扫描,好像很简单,其实按键少程序多。●LCD显示的日历时钟设计7.4.2LCD日历钟的程序设计程序清单如下:;1602日历钟.ASM(1);在自动打铃器的程序中摘抄出日历钟部分,可能还有打铃器程序的残留;使用fm1602CLCD液晶显示,其显示格式为:;第一行:年月日星期;第二行:时分秒温度;====================================;单片机采用AT89C51,;晶振采用6MHZ,机器周期=2us(微秒);;-------------------内存分配:-----------------------------------;主程序使用工作寄存器第0区,00H~07H;定时器T0中断使用第1区R0~R7=08H~0FHMS100EQU08H;0.1秒数存储地址SECONDEQU09H;秒minutesEQU0AH;分HOUREQU0BH;时DAYEQU0CH;日MONTHEQU0DH;月WEEKEQU0EH;星期YEAREQU0FH;年(十进制数的末2位在此)●LCD显示的日历时钟设计7.4.2LCD日历钟的程序设计程序清单如下:;1602日历钟.ASM(2);标志位预留:20H~23H,计4个字节FLAG1BIT00H;18B20存在时置一,不存在时置零DSPBIT01H;0=执行显示,1=不执行显示--每秒1次主程序用comparebit02h;0=不比较,1=比较--每分钟一次,用于打铃OVERBIT03H;0=还没有打铃,1=已经打铃BELLBIT04H;打铃标志;------;干扰标志字节,初始值为全0,如有干扰造成跑飞被捕获,则设为55AAHERROR1EQU24HERROR2EQU25H;------;定时器T0时间常数TH0HEQU26H;高字节TL0LEQU27H;低字节;LCD液晶FM1602显示子程序使用28h-29h,指示写字符的坐标位置XPOSEQU28H;列方向地址指针(其值为0~15)(用于LCDPOS子程序)YPOSEQU29H;行方向地址指针(其值为0~1)(用于LCDPOS子程序)●LCD显示的日历时钟设计7.4.2LCD日历钟的程序设计程序清单如下:;1602日历钟.ASM(3);临时计时器SEC1EQU2AH;1秒数,每秒自动减1SEC01EQU2BH;0.1秒数,每0.1秒自动减1;延时子程序用于循环NXHEQU2CH;内循环WXHEQU2DH;外循环;----;LCD液晶FM1602显示子程序使用40h-5Fh,作为显示缓冲区X1EQU40H;第一行第一个字符位置40H~5FH为显示内容映像共32字节X2EQU50H;第二行第一个字符位置,其内容均为ASCII码;1字节直接地址变量XXEQU6DH;临时存储一字节数据YYEQU6EH;●LCD显示的日历时钟设计7.4.2LCD日历钟的程序设计程序清单如下:;1602日历钟.ASM(4);--------------------I/O口分配:--------------KEY按键接口K0EQUP0.0;向上对表K1EQUP0.1;向下定时K2EQUP0.2;向右临时打铃K3EQUP0.3;向左K4EQUP0.4K5EQUP0.5;-------------------------BUZZEREQUP1.4;蜂鸣器,低电平响RELAYEQUP1.3

温馨提示

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

评论

0/150

提交评论