第4章-3(数码管按键)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态显示接口: 将所有位数码管的段选线并联在一起,而每位数码 管的公共端分别由一位I/O线控制,由位选线控制哪 一位数码管有效。选亮数码管采用动态扫描显示。 所谓动态扫描显示即轮流向各位数码管送出字形码 和相应的位选,利用发光管的余辉和人眼视觉暂留 作用,使人的感觉好像各位数码管同时都在显示。
工作原理: 采用快速切换方式(如10ms),每一时刻只有一只 数码管导通工作。利用视力暂留特性,可获得连续 显示效果。 优点:占用资源较少 缺点:占用机时较多(需要CPU随时刷新显示值)
N
参考程序 #include <reg51.h sbit P37=P3^7; unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char count; void delay(unsigned int time) { unsigned char i; while(time--) for(i=120;i>0;i--); }
有按键动作时p0状态值送p2编程界面和运行界面分别如下图实例1运行效果三矩阵式键盘矩阵式也称行列式键盘用于按键数目较多的场合由行线和列线组成按键位于行列的交叉点上
4.5.1.2 LED数码管原理与编程 LED显示元件——人机交互输出设备,其作用是指 示中间运行结果与运行状态。
LED 的 类型
字段式 点式
个位LED接P2口,十位LED接 P0口(共阴型)
按钮接P3.7口线,按压 时为0电平
分析: ①读P3.7口,进行加1计数和超界处理; ②拆分计数器数值——个位、十位; ③查找/输出显示码到P0和P2口。
计数值拆分:
计数器←1
P3.7= 0? Y 计数器加1 >99 ? Y N
取模运算(%)→个位 整除10运算(/)→十位 查找/输出显示码: 按拆分值输出相应数组元素
动态显示“L2”的程序如下:
//显示字模
;
//LED “指针”
完整的主函数
#include <REG51.H> char led_mod[] = {0x38,0x5B}; void delay(unsigned int time); sbit P17=P1^7; void main() { char led_point = 0; while (1) { P3 = 2 - led_point; P2= led_mod[led_point]; led_point = 1 - led_point; delay(30); }} //LED字模“L2”
Blue,2 Digit,7-segment Cathode Display
进一步说明其工 作原理
A-G→ “0x38”, 1#→“0”,2# → “1” A-G→ “0x5b”, 1#→“1”,2# → “0” led_mode[ ]={0x38,0x5b} P2←led_mode[0], P3 ←xxxx xx10B =2 P2←led_mode[1], P3 ←xxxx xx01B =1
实例1 独立按键识别
【要求】采用独立按键方式实现下述功能:开机时LED全熄, 然后根据按键动作使相应灯亮,并将亮灯保持到按压其它键 时为止。
独立按键——每个按键都彼此独立地各占有一位I/O口线。 特点是电路简单,但占用I/O口线较多。
【分析】 ① 按键的闭合电平为0, 但LED 的驱动电平为1,故不能直接将 P0口的状态送到P1口,而应使 其先取反再送出; ② 为使按键抬起后LED能保持 先前的点亮状态,需要在按键 未压下期间禁止向P2输出P0状 态值。
程序运行效果
课后思考题
1,读懂例5,并能给其他同学讲述 程序工作过程,及编程思路.
4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程 4.5.1 IO端口的简单应用 4.5.2 IO端口的进阶实践
4.5.2.1 数码管动态显示原理与编程 两种显示接口:静态显示接口和动态显示接口 静态显示接口:一个数 码管的引脚独立占据一 根I/O口线。 优点:被显示数据只要 送入并行口后就不再需 要CPU干预,因而显 示效果稳定。 缺点:占用资源较多
类似,无论是硬件结构还是软件设计都比较简单。
+5V
+5V
89s52
P1.4 P1.5 P1.6 P1.7
S1 S2 S3 S4
89S52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
独立式键盘接口
矩阵式键盘接口
特点:每个按键占用一条I/O线,特点:电路连接复杂,但提 当按键数量较多时,I/O口利用 高了I/O口利用率,软件编程 率不高,但程序编制简单。适 较复杂。适用于需使用大量 按键的场合。 用于所需按键较少的场合。
18
XTAL2
9
RST
R1
0R1
29 30 31
PSEN ALE EA
R8 R2 R3 0R1 R4 0R1 R5 0R1 R6 0R1 R7 0R1
0R1 0R1
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
数码管直连单片机I/O的程序设计
LED
光柱式
数码管显示的原理
g f GND a b
“1” “2” 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0
a f g b e d cdp
·
e d GND c dp
(a)
共阴极
0x06 0x5b
共阳极
使数码管显示某字形,只需输入该字形所对应的数据编码,即字形码。
不同LED组合关系(显示码)形成不同的显示字符
实例6 数码管动态显示
采用共阴极动态LED显示原理,显示字符“L2” 。
C1 U1 C3
100n 100n 19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
参考程序如下:
void main( ) { char key = 0; //定义按键变量 P2=0; //初始状态为灯全灭 while(1){ key = ~P0 & 0x0f; //读取按键状态,高4位清零 if (key != 0) P2 = key; //有按键动作时,P0状态值送P2 } }
void main(void) { count=0; //计数器赋初值 P0=table[count/10]; // 取出计数值的十位数,送P0口输出 P2=table[count%10]; // 取出计数值的个位数,送P2口输出 while(1) { if(P37==0) // 如果P37为低电平,键盘按下 { delay(10); // 软件延时10ms,软件去抖动 if(P37==0) // 确实是键盘按下了 { count++; //计数器加1 if(count==100) count=0; P0=table[count/10]; P2=table[count%10]; while(P37==0); // 等待按键松开,防止重复计数 } } } }
0
g f GND a b
1 1 0 0 0 0 0
a f g b e d c dp
·
e d GND c dp
(a)
单片机I/O与数码管直接连接
10
1 1 0 0 0 0 0
AT89C51
1 1 0 1 1 0 1 0
把一个共阴极的数码管接到AT8951单片机的P2口上, 编程实现让此数码管显示数字0。
二、非编码键盘 常见的为两种结构:独立式键盘和矩阵式键盘。 (1)独立式键盘 特点是:一键一线,各键相互独立,每个键各 接一条I/O口线,通过检测I/O输入线的电平状态, 可容易地判断哪个按键被按下,如图1所示。
独立式键盘接口电路
图中的上拉电阻保证按键释放时,输入检 测线上有稳定的高电平。 当某一按键按下时,对应的检测线就变成 了低电平,与其他按键相连的检测线仍为 高电平,只需读入I/O输入线的状态,判别 哪一条I/O输入线为低电平,很容易识别哪 个键被按下。 优点:电路简单,软件编写简单。适用于 键盘按键数目较少的场合,因为这种方式 占用的I/O口线较多。
开始
初始化(数码管均处于无显示)
单片机向数码管输出字型码
空操作
#include <reg51.h> /*包含头文件reg51.h*/ void main() /*无返回值的主程序*/ { P2=0x3f; }
实例4 LED数码管显示 P0口连接一个共阴极数码管,使之循环显示0~9
分析:
将显示码循环输出到 P0口即可实现循环显 示。但由于数字0~9的 显示段码没有规律可循,
示方式。所谓静态显示,就是当显示器显示某个字
符时,相应的发光二极管恒定地导通或截止。
所有位选线(数码管公共端)连接在一起,每个数 码管的段选必须接一个8位数据线来保持显示的字形 码。当送入一次字形码后,显示字形可一直保持,
直到送入新字形码为止。
静态显示
静态显示:当数码管显示某个字符时,相应的发光二极管 恒定地导通或截止。
X1 C2
100n CRYSTAL 18
XTAL2
R1
10k
9
RST
29 30 31
PSEN ALE EA
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51
EG-MPX2-CC-BLUE
1.键盘的任务 (1) 判别是否有键按下?如果有,进入下一步。 (2) 识别是哪一个键被按下,并求出相应的键值。 (3) 根据键值,执行相应键值对应的处理程序。 2.按键的识别 键的闭合与否,体现在行线电压的高电平或 低电平。如果为高电平,表示键断开;如果是低电 平,则表示键闭合,通过对行线电平的高低状态 的检测,可确认按键按下还是断开与否。
VCC
C2 X1 C3 C1
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
//输出LED位码 //输出字模 //刷新LED位码
编程界面
运行效果图
键盘接口
一、键盘是单片机应用系统中使用最广泛的一
种数据输入设备。键盘是一组按键的组合。键通常
是一种常开型按钮开关,常态下键的两个触点处于
断开状态,按下键时它们才闭合(短路)。
通常,键盘有编码和非编码两种。编码键盘通
过硬件电路产生被按按键的键码和一个选通脉冲。 选通脉冲可作为CPU的中断请求信号。这种键盘使 用方便,所需程序简单,但硬件电路复杂,常不被 单片机采用。 非编码键盘按组成结构又可分为独立式键盘和 矩阵式键盘。独立式键盘的工作过程与矩阵式键盘
共阴极数码管常用字符字形 编码(十六进制)
字符 编码 字符 编码 0 1 2 3 4 5 6 7 8 9 3F 06 5B 4F 66 6D 7D 07 7F 6F A b C d E F P · 暗 77 7C 39 5E 79 71 73 80 00
静态显示
LED显示器工作方式有两种:静态显示方式和动态显
延时 N 循环指针i 赋值(10)
P0 ←数组[i]
需要采取查表方式进行
操作:
循环10次 ? Y
①将显示码按序存放在一个数组中, 顺序号与代表
的显示字符相对应。(如,char led_mod [ ]={x1,x2,….,xn) ②通过循环变量指定待送出的数组元素
参考程序
实例5 计数显示器 对按键动作进行计数和显示,达到99后重新由1开始计数。