内容正文:
单元三 单片机人机接口
封面,格式已固定。轻易勿改
2024/7/10
1
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
知识目标
电子测量仪器有哪几类?
了解并行通信的基本概念;
掌握七段LED显示器的基本组成及工作原理
掌握键盘的基本组成及工作原理
掌握LCD1602显示模块工作原理
电子测量仪器有哪几类?
能够正确在STC90C52外连接键盘和显示设备
能灵活应用典型键盘、显示电路构成各种实际电路
能利用STC90C52设计制作键盘控制字符显示实用电路
实训项目一 字符显示
实训项目二 键盘电路
技能目标
0
预备知识—数码管检测方法
0.1 已知引脚排列的LED数码管检测
首先,判断数码管极性。
共阴极还是共阳极。
方法:用数字万用表的二极管档位,测量LED数码管各引脚之间是否导通。
两表笔间开路电压为2.8V
2024/7/10
3
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
0
预备知识—数码管检测方法
0.1 已知引脚排列的LED数码管检测
二极管挡
COM V/Ω
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
p
红
黑
dp
检测接线如图所示。将数字万用表置于二极管档,黑表笔与数码管的h点(LED的共阴极)相接,然后用红表笔依次去触碰数码管的其他引脚,触到哪个引脚,哪个笔段就应发光。若触到某个引脚时,所对应的笔段不发光,则说明该笔段已经损坏。
2024/7/10
4
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
0
预备知识—数码管检测方法
0.2 如何检测未知引脚的LED数码管?
有些市售LED数码管不注明型号,也不提供引脚排列图。遇到这种情况,可使用数字万用表方便地检测出数码管的结构类型、引脚排列以及全笔段发光性能。
假设被测器件是一只彩色电视机用来显示频道的LED数码管,体积为20mm×10mm×5mm,字形尺寸为8mm×4.5mm,发光颜色为红色,采用双列直插式,共10个引脚。
2024/7/10
5
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
0
预备知识—数码管检测方法
0.2 如何检测未知引脚的LED数码管?
将数字万用表置于二极管档,红表笔接在①脚,然后用黑表笔去接触其他各引脚,只有当接触到⑨脚时,数码管的a段发光,而接触其余引脚时则不发光。由此可知,被测管时共阴极结构类型,⑨脚是公共阴极,①脚则是数码管a段。
二极管挡
COM V/Ω
红
黑
1
2
3
4
5
10
9
8
7
6
a
b
c
d
e
f
g
dp
a段
公共阴极
共阴极数码管
2024/7/10
6
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
0
预备知识—数码管检测方法
0.2 如何检测未知引脚的LED数码管?
将黑表笔固定接在⑨脚,用红表笔依次接触②、③、④、⑤、⑥、⑦、⑧、⑩脚时,数码管的其它段先后分别发光,据此绘出该数码管的内部结构和引脚排列。
二极管挡
COM V/Ω
红
黑
1
2
3
4
5
10
9
8
7
6
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
com
2024/7/10
7
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
0
预备知识—数码管检测方法
0.2 如何检测未知引脚的LED数码管?
把黑表笔固定接在数码管公共阴极上,也就是⑨脚,并把数码管的a到h段全部短接在一起,然后将红表笔接触a到dp段的短接端,此时,所有笔端均应发光,显示“8”字。
二极管挡
COM V/Ω
1
2
3
4
5
10
9
8
7
6
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
com
2024/7/10
8
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
0
预备知识—数码管检测方法
注意
则需将红、黑表笔对调才能测出上述结果
操作时要灵活掌握,反复试验,直到找出公共端为止。
若被测数码管为共阳极类型
在判别结构类型时
2024/7/10
9
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
3.1.1 数码管显示
1. LED数码管结构
2024/7/10
10
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
2024/7/10
11
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
2.LED数码管的连接
LED数码管如何点亮?LED数码管如何显示数字?
数码管由8个发光二极管组成。
2024/7/10
12
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LED数码管如何点亮?
V+
V-
>
2024/7/10
13
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LED数码管如何点亮?
A
1
0
2024/7/10
14
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LED数码管如何点亮?
A
1
0
2024/7/10
15
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1
0
A
B
C
D
E
F
G
DP
1
1
1
1
1
0
0
00111111B
3FH
2024/7/10
16
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
6FH
77H
7CH
39H
5EH
79H
71H
2024/7/10
17
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
共阳极数码管
A
1
0
2024/7/10
18
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
小思考
共阳极数码管的七段码?
2024/7/10
19
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LED显示器用于显示工业控制参数、过程状态。
当LED字段引线与数据线连接,每个显示字形对应一个字形码。
COM
P1.0~1.7
89C52
a
f b
g
e c
d h
a
b
h
a b h
COM
D7 D6 D5 D4 D3 D2 D1 D0
h g f e d c b a
3. LED 显示器与单片机接口
2024/7/10
20
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
显示程序任务:
★ 设置显示缓冲区,存放待显示数据。
★ 显示译码:程序存储器中建立字形码常数表,查表得出对应数据的字形码。
★ 输出显示:输出字形码到显示端口。
2024/7/10
21
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
4. 七段LED显示器工作原理
共阳极显示器,用低电平驱动;
共阴极显示器,用高电平驱动。
点亮显示器的方式:
静态和动态
2024/7/10
22
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
(1)静态显示
当显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。各位的共阴极(或共阳极)位选段连接在一起接地或者接电源;每位的段选线(a-dp)分别接单片机的I/O端口。多位LED分别用一组8位字段口,分别输出显示不同字形。
2024/7/10
23
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
段选
位选
或+5V
2024/7/10
24
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
输出接口
特点:
静态显示的字型稳定;
CPU的工作效率高;
使用硬件电路较多。
占用I/O端口线为8×N,N为显示位数。
静态显示适合于显示位数较少的情况。
1
2024/7/10
25
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
实现两位共阳极数码管的静态显示。显示 “4、3”。
4的七段码:99H
3的七段码:b0H
1
0
0
1
1
0
0
1
0
0
0
0
1
0
1
1
两位数码管占用了两位I/O端口
2024/7/10
26
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
//头文件及字符说明
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] =
{ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e };
2024/7/10
27
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
void main()
{
P2 = table[4];
P3 = table[3];
while(1)
}
2024/7/10
28
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
静态显示2:在STC90C52的串行口上扩展多片串行输入并行输出的移位寄存器74LS164作为静态显示器接口,图中给出了8位共阳极静态显示器的逻辑接口。
90C52
2024/7/10
29
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
如果需要八位显示,静态显示还适合吗?
如果不适合,应该采用哪一种显示方法呢?
2024/7/10
30
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
我们知道,静态显示稳定,CPU工作效率高。但在显示位数较多时,静态显示占用了单片机的较多I/O口资源,这时我们就要寻求一种解决办法,使得单片机的资源适应多位显示,这就是我们将给大家介绍的LED显示器的动态显示。
(2)动态显示
2024/7/10
31
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
所谓动态显示就是一位一位地轮流点亮各位显示器。对于显示器的每一位而言,每隔一段时间点亮一次。在同一时刻只有一位显示器在工作。
利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,我们看到的却是多个字符“同时”显示。
2024/7/10
32
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
显示器的亮度
点亮时的导通电流
点亮时间和间隔时间的比例
2024/7/10
33
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
段选
位选
2024/7/10
34
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
2024/7/10
35
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
2024/7/10
36
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1
0
0
0
1
0
0
1
1
1
1
1
1
0
0
1
1
1
1
1
1
0
0
1
1
1
1
1
1
0
0
1
1
1
1
1
实现肆位共阳极数码管的动态显示。显示 “1、2、3、4”。
1的七段码:f9
2024/7/10
37
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
0
1
0
0
0
0
1
0
0
1
0
1
0
0
1
0
0
1
0
1
0
0
1
0
0
1
0
1
0
0
1
0
0
1
0
1
实现肆位共阳极数码管的动态显示。显示 “1、2、3、4”。
2的七段码:a6
2024/7/10
38
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
实现肆位共阳极数码管的动态显示。显示 “1、2、3、4”。
3的七段码:b0
0
0
1
0
0
0
0
0
1
1
0
1
0
0
0
0
1
1
0
1
0
0
0
0
1
1
0
1
0
0
0
0
1
1
0
1
2024/7/10
39
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
实现肆位共阳极数码管的动态显示。显示 “1、2、3、4”。
4的七段码:99
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
2024/7/10
40
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
实现肆位共阳极数码管的动态显示。显示 “1、2、3、4”。
1
1
1
1
2024/7/10
41
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
动态显示程序
1S
delay(1000)
调整延时观察效果区别
0.5S
delay(500)
0.1S
delay(100)
0.01S
delay(10)
人眼的视觉暂留时间大约20ms
2024/7/10
42
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
特点:
硬件电路简单;
成本低;
占用I/O端口线为8+N,N为显示位数。
动态显示可适合于显示位数较多的情况。
2024/7/10
43
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
举例
设计一个动态扫描方式驱动的4只数码管显示电路,要求4只数码管第一屏从左到右顺序显示1、2、3、4,第二屏从左到右顺序显示5、6、7、8,第三屏稳定显示1、2、3、4。
(一)硬件电路分析
端口 P2.0 P2.1 P2.2 P2.3
位码 FEH FDH FBH F7H
数码管 DS1 DS2 DS3 DS4
P2口输出与对应显示位的关系
2024/7/10
44
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
P1口接数码管的段,P2口接数码管的位
2024/7/10
45
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
(二)程序清单:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code duantable[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e};
uchar code weitable[]={0xfe,0xfd,0xfb,0xf7};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=122;y>0;y--);
}
2024/7/10
46
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
void main()
{ uchar i;
while(1)
{ uchar j=255;
for(i=0;i<4;i++)
{ P2=weitable[i]; P1=duantable[i+1]; delay(1000);
P3=0xff;
}
for(i=0;i<4;i++)
{
P2=weitable[i];
P1=duantable[i+5];
delay(1000);
P3=0xff;
}
while(j--)
{ for(i=0;i<4;i++)
{
P2=weitable[i];
P1=duantable[i+1];
delay(5);
P3=0xff;
}
}
}
}
2024/7/10
47
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
总结:
动态显示与静态显示的区别在于,动态显示就是一个扫描问题,静态不是扫描,是加一个恒定的电平,使得LED数码管高电平亮,低电平灭。
2024/7/10
48
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
液晶显示模块已作为很多电子产品的显示器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
万用表
网银U盾
3.1.2 液晶显示
1. 液晶概述
2024/7/10
49
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
(1)显示质量高
(2)数字式接口
(3)体积小、重量轻
(4)功耗低
2024/7/10
50
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
根据液晶显示模块显示功能的不同,液晶显示模块可以分为如下3种:
段码数字型
点阵字符型
点阵图形型
2024/7/10
51
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
2. 1602 液晶显示模块特点及引脚图
1602液晶也叫1602字符型液晶 ,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)
1602液晶
2024/7/10
52
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602液晶管脚图
2024/7/10
53
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
3. 1602液晶显示模块操作
LCD1602的基本操作有四种:
读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。
读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。
写命令:输入RS=0,RW=0,E=高脉冲。输出:无。
写数据:输入RS=1,RW=0,E=高脉冲。输出:无。
基本操作
2024/7/10
54
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602内部存储器
1602内置了三个存储器,字符生成ROM(CGROM)、字符生成RAM(CGRAM)、显示数据RAM(DDRAM)。
CGROM中存储了一些标准字符的字模编码,在出厂时已经固化在芯片中,用户只能读取调用。
CGRAM是留给用户的,用以存储用户自己设计的字模编码。
DDRAM,用来寄存带显示的字符代码。
在这里,重点介绍显示数据RAM。
1602液晶内部带有80个字节的显示RAM缓冲区,用来存储发送的数据,它的结构如图所示。
2024/7/10
55
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602内部存储器
当向00~0F、40~4F地址中的任一处写入显示数据时,液晶可立即显示相关数据;当数据写入到10~27或50~67地址处时,必须通过移屏指令将它们移入可显示区域方可正常显示。
2024/7/10
56
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
状态字说明
液晶有一个状态字字节,通过读取这个状态字的内容,就可以知道1602液晶的一些内部情况,如表所示。
D0~D6 当前数据指针的值
D7 读/写操作使能 1:禁止 0:允许
这个状态字节有8位,最高位表示了当前液晶是不是“忙”,如果是1表示液晶正“忙”,禁止读写数据或者命令,如果是0,则可以进行读写。低7位表示了当前数据地址指针的位置。
2024/7/10
57
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LCD1602模块控制命令
指令 功能
1 清屏 清DDRAM和AC值
2 光标返回 AC=0,光标、画面回HOME位
3 输入方式设置 设置光标、画面移动方式
4 显示开关控制 设置显示、光标及闪烁开、关
5 光标/画面移位 光标移动,不影响DDRAM
6 功能设置 工作方式设置(初始化指令)
7 置字符发生器地址 设置CGRAM地址。A5~A0=0~3FH
8 置数据存贮器地址 DDRAM地址设置
9 读忙标志和地址 读忙标志BF值和地址计数器AC值
10 写数据 数据写入DDRAM或CGRAM内
11 读数据 从DDRAM或CGRAM中读出数据
2024/7/10
58
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LCD1602模块控制命令
清屏指令
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 0 1
功能:清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII 码20H;
光标归位,即将光标撤回液晶显示屏的左上方;将地址计数器(AC)的值设为0。
2024/7/10
59
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LCD1602模块控制命令
显示开关控制指令
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 D C B
功能:设置显示、光标及闪烁开、关。
其中,D表示显示开关,D=1为开,D=0为关;C表示光标开关,C=1为开,C=0为关;B表示闪烁开关,B=1为开,B=0为关。
2024/7/10
60
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LCD1602模块控制命令
光标、画面移位指令
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 S/C R/L * *
功能:光标、画面移动,不影响DDRAM。
其中,S/C=1,画面平移一个字符位; S/C=0,光标平移一个字符位;R/L=1,右移;R/L=0,左移。
2024/7/10
61
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LCD1602模块控制命令
功能设置指令
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 DL N F * *
功能:工作方式设置(初始化指令)。
其中,DL=1,8位数据接口,DL=0,四位数据接口;
N=1,两行显示,N=0,一行显示;
F=1,5×10点阵字符;F=0,5×7点阵字符。
2024/7/10
62
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
LCD1602模块控制命令
LCD1602初始化
清屏。指令码:0x01
显示模块设置。指令码:0x38 设置16*2显示、5*7点阵、8位数据
显示屏显示开/关及光标设置。指令码:0x0e LCD显示开启、显示光标且光标不闪烁
指令码:0x0f LCD显示开启、显示光标且光标闪烁
指令码:0x0c LCD显示开启、不显示光标且光标不闪烁
LCD内部指针移动方向、光标移动方向。
指令码:0x06 地址指针和光标右移(即后移)
指令码:0x04 地址指针和光标左移(即前移)
2024/7/10
63
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
【例3.2】 设计一个1602液晶显示电路,要求在液晶屏上第一行连续显示1234。
硬件电路
2024/7/10
64
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
STC90C52RC的P0口为数据驱动口, P2.0、P2.1、P2.2为液晶控制端口,具体对应关系见表
端口 P2.0 P2.1 P2.2 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
位码 RS RW E D0 D1 D2 D3 D4 D5 D6 D7
2024/7/10
65
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit l_1602en=P2^2; //定义l602的E
sbit l_1602rw=P2^1; //定义1602RW
sbit l_1602rs=P2^0;//定义1602的RS
uchar code ASCII[]="0123456789";
void delay_ms(uint n_ms)//延时函数
{
程序清单
uchar a,b;
uint x;
for(x=n_ms;x>0;x--)
{
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
}
2024/7/10
66
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
void lcd1602_write_com(uchar com)//1602写命令函数
{
l_1602rs=0; //写命令RS口拉低
l_1602rw=0; //写命令RW口拉低
P0=com;//把命令送P0口,给1602的D0~D7
delay_ms(1);//稍做延时以便数据保持
l_1602en=1; //E口拉高开始把命令给1602
delay_ms(1); //稍做延时确保命令写入
l_1602en=0; //E端口拉低命令写入完成
}
程序清单
2024/7/10
67
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
void lcd1602_write_data(uchar date)//1602写数据函数
{
l_1602rs=1; //写数据RS口拉高
l_1602rw=0; //写数据RW口拉低
P0=date;//把数据送P0口,给1602的D0~D7
delay_ms(1);//稍做延时以便数据保持
l_1602en=1; //E口拉高开始把数据给1602
delay_ms(1); //稍做延时确保数据写入
l_1602en=0; //E端口拉低数据写入完成
}
程序清单
2024/7/10
68
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
void lcd1602_init()//1602初始化函数
{
l_1602en=0;//E 端口拉低为写数据和写命令做准备
lcd1602_write_com(0x38);//写命令设置显示模式,双行显示开
lcd1602_write_com(0x0c);//写命令设置显示开关及光标设置,显示开 光标关 光标闪烁关
lcd1602_write_com(0x06);//写命令设置读写一个字节后地址指针自动加1,光标指针自加1
lcd1602_write_com(0x80);//初始化地址指针
}
程序清单
2024/7/10
69
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
void l_1602_display_num(uchar x,uchar y,uint num)//显示四位数字函数
{
uchar Thousand,Hundred,Ten,Bits;
Thousand=num/1000; //取num的千位
Hundred=num%1000/100;//取num的百位
Ten=num%1000%100/10; //取num的十位
Bits=num%1000%100%10;//取num的个位
switch(x)//写数据语句
{
程序清单
2024/7/10
70
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
case 1:lcd1602_write_com(0x80+y-1);
lcd1602_write_data(ASCII[Thousand]);
lcd1602_write_data(ASCII[Hundred]);
lcd1602_write_data(ASCII[Ten]);
lcd1602_write_data(ASCII[Bits]);break;
case 2:lcd1602_write_com(0x80+40+y-1);
lcd1602_write_data(ASCII[Thousand]);
lcd1602_write_data(ASCII[Hundred]);
lcd1602_write_data(ASCII[Ten]);
lcd1602_write_data(ASCII[Bits]);break;
}
}
程序清单
2024/7/10
71
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602应用实例
void main()主函数
{
lcd1602_init();//1602初始化
lcd1602_write_com(0x80+8);
lcd1602_write_data(0X00);
while(1)
{
l_1602_display_num(1,11,1234);//在第一行写1234
}
}
程序清单
2024/7/10
72
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
1
输出接口
1602显示过程
1602LCD的显示过程应可理解为:
1、选择字模编码所在的存储器(CGROM 或 CGRAM)
2、将所要显示的字符编码在上述存储器中的存储 地址传送给DDRAM,以找到此存储单元
3、将存储器内存储的字模编码读取到 DDRAM 中
4、将 DDRAM中的字模编码显示到屏幕上对应位置
2024/7/10
73
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
键盘检测原理及应用实现
一个好的单片机应用系统,通常要有优秀的人机交互接口。键盘是一组按键的集合,它是最常用的单片机输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机通信。
按键的输入状态本质上是一个开关量。
2024/7/10
74
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
(1)按键分类
键盘是一组按键的集合,它是最常用的单片机输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机通信。
根据按键的识别方法分类,键盘有编码和非编码的两种。编码键盘是通过一个编码电路来识别闭合键的键码,如BCD码键盘、ASCII码键盘等;通过软件来识别键码为非编码键盘。
3.2.1键盘概述
1. 键盘分类及功能
2024/7/10
75
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
编码键盘
非编码键盘
硬件实现
软件实现
独立键盘
矩阵式键盘
2024/7/10
76
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
(2) 键盘接口功能
键扫描
产生键值
键识别
消除抖动
接口功能
2024/7/10
77
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
2. 按键工作原理
键盘中的按键:都是一个常开开关电路。
当按键K未被按下时, P1.0输入为高电平;
当按键K闭合时,P1.0输入为低电平。
典型按键电路示意图
2024/7/10
78
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
抖动时间长短与按键的结构和机械特性有关,一般为5~10 ms。键抖动会引起一次按键被误读多次,必须去除键抖动。可用硬件或软件两种方法消除。
按键电压抖动产生原因
2024/7/10
79
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
按键去抖动的方法
硬件方法就是在键盘中附加R-S触发器去抖动电路,从根本上消除抖动产生的可能性;软件方法就是采用时间延迟以躲过抖动(大约延时5-10ms即可)
2024/7/10
80
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
串键保护
2024/7/10
81
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
思考拓展
如何实现对独立按键的接口控制?
如何实现对矩阵式键盘的接口控制?
2024/7/10
82
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
3.2.2 非编码独立键盘
1. 结构
每个按键单独占有一个I/O口。
当按下和释放按键时,输入到I/O端口的电平是不一样的,单片机程序根据不同端口电平的变化判断是否有按键按下以及是哪一个按键被按下,并执行相应的程序段。
2024/7/10
83
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
STC90C52
如图是一个具有4个按键的独立式键盘,每一个按键的一端都接地,另一端接STC90C52的I/O口。从图中可以看出,独立式键盘每一按键都需要一根I/O线,占用STC90C52的硬件资源较多。
2024/7/10
84
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
优点——硬件与软件相对简单;
缺点——按键较多时,要占用大量的I/O口线;
独立按键适合于按键较少的场合。
2. 特点
2024/7/10
85
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
1
1
1
1
1
1
1
1
3. 与CPU的连接
在没有键按下的情况下,由于上拉电阻的作用,P2.0~P2.7线上输入均为高电平。
2024/7/10
86
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
0
当K3按下,与其相连的I/O线P2.2将得到低电平,其他未按下键的输入线上,仍维持其原来的高电平输入。
2024/7/10
87
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
在软件编程中,首先判断有无键按下,延时10ms去抖动,查询是哪一个键被按下并执行相关操作。
然后再用软件查询等待按键释放,当判明按键释放后,用软件延时10ms后再返回。
第二个延时10ms有两个作用,即按键释放去抖及防止按键连击。
2024/7/10
88
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
开始 键分析
读 口
有键按下?
延时10ms
=0?
=0?
=0?
键处理
键处理
键处理
读 口
键已释放?
延时10ms
分析结束
N
N
N
N
N
Y
Y
Y
Y
Y
2024/7/10
89
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
总结:
独立式键盘接口简单,适合按键较少的场合。
2024/7/10
90
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
4. 独立式按键应用
执行键盘扫描和处理的两种方式:
程序扫描方式
中断扫描方式。
程序扫描:是指CPU空闲时执行键盘扫描,或每隔一定时间执行一次键盘扫描,定时可由单片机的定时器完成。
中断扫描:是指当有键闭合时才向CPU发出中断请求,中断响应后执行键盘扫描程序。
2024/7/10
91
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
高电平
高电平
当无键按下时,8条测试线均为高电平,经8与非门及反相器后仍为高电平,不会产生中断。
2024/7/10
92
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
低电平 申请中断
当其中任一键按下时,INT0/变为低电平,向CPU申请中断。CPU响应后便进入中断服务程序,然后用扫描方式寻找到申请中断的功能键并执行相应功能处理程序。
2024/7/10
93
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
2024/7/10
94
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//位声明//
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit K1 = P2^4;
sbit K2 = P2^5;
sbit K3 = P2^6;
sbit K4 = P2^7;
//延时函数//
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=122;y>0;y--);
}
2024/7/10
95
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
//主函数//
void main()
{ P2=0xff;
while(1)
{
LED1 = K1;
LED2 = K2;
LED3 = K3;
LED4 = K4;
delay(100);
}
}
2024/7/10
96
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
3.2.3 矩阵键盘
为了减少键盘与单片机接口时所占用I/O线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。
2024/7/10
97
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
1. 矩阵按键原理
行线
列线
如图是一个4*4行列构成的16按键的键盘,它由4行线和4列线组成,按键位于行、列的交叉点上。
将I/O线的一部分作为行线,另一部分作为列线,就可实现单片机对键盘的控制。
2024/7/10
98
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
矩阵按键处理内容:
判断键盘中有无键按下;
按键去抖;
求键值,也就是识别键盘按键;
判断闭合键是否释放。
2024/7/10
99
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
输出低电平
读行线状态
判别键盘上有无键闭合方法:先向所有连接列线的I/O线输出低电平;然后,读行线状态。有键按下时对应的行线,输入为低电平;没有键按下时对应的行线,输入为高电平。
2024/7/10
100
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
if(K1==0)
{
delay(5);
if(K1==0)
{
处理程序
}
}
按键去抖:
一般采用软件延时的去抖方法,即检测到键闭合后延时5-10ms,让前沿抖动消失后再一次检测按键的状态,如果仍保持闭合状态电平,则确认真正有键按下。
2024/7/10
101
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
键盘按键识别方法:
1、扫描法
2、线反转法
2024/7/10
102
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
K1
K2
K3
K4
K5
K6
K7
K8
K9
K10
K11
K12
K13
K14
K15
K16
0
0
0
0
如图,首先将P2.4-P2.7依次变低,P2.4-P2.7在某一时刻只有一个为低。当某一位为低时读行线,根据行线的状态即可判断出是哪一个按键被按下。如3号键被按下,当列线P2.6为低时,读回的行线状态中P2.0被拉低,由此可知K3键被按下。
2024/7/10
103
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
扫描法是逐行逐列扫描查询,当被按下的键处于最后一列时,要经过多次扫描才能最终获得按键所处的行列值。
而线反转法则显得简练,无论被按下的键处于哪一列,均可经过两步即能获得此按键所在的行列值。
2024/7/10
104
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
输出线 低电平
输入线
输入线
输出线 低电平
首先将行线P2.0-P2.3作为输入线,列线P2.4-P2.7作为输出线,此时将输出线输出全为低电平,读行线状态,则行线中电平为低的是按键所在的行。然后将行线P2.0-P2.3作为输出线,列线P2.4-P2.7作为输入线,此时将输出线输出全为低电平,读列线状态,则列线中电平为低的是按键所在的列。综合上述两步结果,确定按键所在的行和列,从而识别出所按下的键。
2024/7/10
105
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
K1
K2
K3
K4
K5
K6
K7
K8
K9
K10
K11
K12
K13
K14
K15
K16
低电平
读状态
0
假设10号键被按下,第一步P2.3-P2.0全为低电平时,读P2.4-P2.7的值,则P2.5为低电平;
2024/7/10
106
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
K1
K2
K3
K4
K5
K6
K7
K8
K9
K11
K12
K13
K14
K15
K16
读状态
低电平
0
K10
第二步P2.4-P2.7全为低电平时,读P2.3-P2.0的值,则P2.2为低电平。由此可判断出第3行第2列有键被按下,此键就是K10键。
2024/7/10
107
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
判断闭合键是否释放:
按键按下再抬起是一个按键释放的过程,按键断开的瞬间,也会有抖动,同样需要去除抖动。当检测到按键释放后,也要给5-10ms的延时,待后延抖动消失后才转入该键的处理程序。
2024/7/10
108
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
2. 矩阵按键的应用
项目要求:
设计一个4×4矩阵键盘与90C52单片机接口电路。
要求用查询法读取行列键盘键码,并将键码显示在LED数码管上。
2024/7/10
109
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
矩阵按键与CPU的连接
段驱动
位驱动
矩阵键盘
2024/7/10
110
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
P1.0-P1.3用于控制列线
P1.4-P1.7用于控制行线
1、由列线输出0,然后读入P1口的值,确定行线是否有键按下
2、由行线输出0,然后读入P1口的值,确定列线是否有键按下
3、键值译码
2024/7/10
111
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
矩阵键盘扫描流程图
2024/7/10
112
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
矩阵键盘参考程序
#include <reg52.h>
#define row 0x0f //行扫描码
#define column 0xf0 //列扫描码
#define seg_drive P0 //数码管段驱动
#define key_scan P1 //低四位接行,高四位接列,无按键按
下时,值为0xff
unsigned char key_value_r; //行扫后的键值
unsigned char key_value_c; //列扫后的键值
unsigned char seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//段码表
2024/7/10
113
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
void delay 10ms(void) //延时10ms,去抖动
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
2024/7/10
114
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
//行扫描函数
unsigned char row_scan(void)
{
key_scan = key_scan & row; //行扫描
if(key_scan!=0x0f) //判断是否行上有按键按下
{
delay10ms(); //延时去抖动
key_value_r = key_scan;//读行扫后的键值
key_scan = 0xff; //扫描变量回复无按键按下状态
}
return key_value_r; //返回行扫后的键值
}
2024/7/10
115
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
//列扫描函数
unsigned char column_scan(void)
{
key_scan = key_scan & column; //列扫描
if(key_scan!=0xf0) //判断是否列上有按键按下
{
delay10ms(); //延时去抖动
key_value_c = key_scan; //读列扫后的键值
key_scan = 0xff; //扫描变量回复无按键按下状态
}
return key_value_c; //返回列扫后的键值
}
2024/7/10
116
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
void main(void)
{ unsigned char key_value; //键值变量
P0=0;
while(1)
{ key_value = column_scan()+row_scan(); //键值生成
switch(key_value)//键值译码
{
case 0xe7:seg_drive = ~seg_code[0];break; //0键
case 0xd7:seg_drive = ~seg_code[1];break; //1键
case 0xb7:seg_drive = ~seg_code[2];break; //2键
case 0x77:seg_drive = ~seg_code[3];break; //3键
case 0xeb:seg_drive = ~seg_code[4];break; //4键
case 0xdb:seg_drive = ~seg_code[5];break; //5键
2024/7/10
117
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
2
输入接口
case 0xbb:seg_drive = ~seg_code[6];break; //6键
case 0x7b:seg_drive = ~seg_code[7];break; //7键
case 0xed:seg_drive = ~seg_code[8];break; //8键
case 0xdd:seg_drive = ~seg_code[9];break; //9键
case 0xbd:seg_drive = ~seg_code[10];break; //A键
case 0x7d:seg_drive = ~seg_code[11];break; //B键
case 0xee:seg_drive = ~seg_code[12];break; //C键
case 0xde:seg_drive = ~seg_code[13];break; //D键
case 0xbe:seg_drive = ~seg_code[14];break; //E键
case 0x7e:seg_drive = ~seg_code[15];break; //F键
}
}
}
2024/7/10
118
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
实训一 字符显示
3
了解一位LED数码管与多位LED数码管电路结构,掌握LED数码管与单片机连接方法及其应用原理。掌握单片机控制LED数码管动态显示原理及编程方法。
任务目标
利用单片机最小系统开发平台及装有Keil C51 μVision2集成开发环境、编程器软件、在线下载软件的计算机,实现键盘控制功能。
(1)设计一个4个独立式按键与STC90C52单片机接口电路。要求按键按下后对应小灯亮。
(2)设计一个4×4矩阵键盘与89C52单片机接口电路。要求用查询法读取行列键盘键码,并将键码显示在LED数码管上。
(3)拓展任务。要求在显示键码的同时,根据键码大小,LED闪烁相应的次数。
实训内容
2024/7/10
119
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
实训二 键盘电路
3
掌握独立按键与矩阵按键的电路结构,及按键与单片机连接方法及其应用原理;掌握单片机控制按键的方法及编程技巧。
任务目标
利用单片机最小系统开发平台及装有Keil C51 μVision2集成开发环境、编程器软件、在线下载软件的计算机,实现以下方式的字符显示。
(1)设计一个1位显示电路,要求在任意指定数码管上顺序显示0,1、2、3、4、5、6、7、8、9;(2)设计一个4位显示电路,要求在4位数码管上从左至右顺序显示0、1、2、3。
实训内容
2024/7/10
120
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
谢谢!
含标题的空白页,可做图表
2024/7/10
121
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
LED的字形码(字段码)
显示字符
共阴极
共阳极
0
3FH
C0H
1
06H
F9H
8.
FFH
00H
‘灭’
00
FFH
F
71H
84H
U
3EH
C1H
P.
F3H
02H
�
�
�
开始
键扫描
键按下?
去抖动
键码计算
键释放
JMP@A+DPTR
00#键
处理程序
nn#键
处理程序
…#键
处理程序
01#键
处理程序
N
Y
A=00H
A=01H
……
A=…H
A=nnH
$$