LED数码管显示矩阵键盘按键的设计

合集下载

矩阵式键盘与LED显示示例

矩阵式键盘与LED显示示例

C3 C2 C1 C0
5.1K×4 3 2 1 0
L0
7 6 5 4 L1
B A 9 8 L2 F E D C L3
键号
E
行首号
89S51
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
判段哪行有键按下
1、行线接输入口,列线接输出口。 2、置所有列线为低电平 3、读行线状态,若行线均为高电平, 则没有键按下; 4、某行有按键按下,则该行线为低 电平 5、如果所有行都为高电平,则无键 按下
P0.4 P0.5
P1.2 P0.6
P0.7
P1.3
P1.4 P1.5 P1.6 P1.7
P2.7 P2.6
P2.5 P2.4 P2.3
P2.2 P2.1
P2.0
a
com
+5V
b c
d e
f g
dp
a
com
b
c
100Ω×2
d
e
f g
dp
共阳极
主程序
org 000H LJMP MAIN ORG 0030H MAIN: MOV SP,#5Fh ;初始化堆栈 LOOP: LCALL Scankey ;判断按键值 Lcall Display ;显示按键 sjmp LOOP
判断哪行有按键按下子程序
;判断哪行有键按下子程序,
;如果有键按下,则键号F0=1,A为行首号值。否则F0=0;
scanrow:
CLR F0
MOV P1,#0FH ;置高4位全0,低四位输入
MOV A,P1
ROW0: jb acc.0,ROW1 ;判断第0行是否有按键按下
setb F0 mov a,#0 sjmp RRET

矩阵键盘控制数码管

矩阵键盘控制数码管

专业综合设计报告项目名称:基于矩阵键盘和LED数码管显示器的简易人机界面设计学生姓名:同组同学:专业名称:班级:指导教师:项目起止日期:2012年03月12日至2012年03月30日目录摘要 (3)1、概述 (3)2、总体设计方案 (3)2.1总体设计要求 (3)2.2系统框图 (4)3、系统硬件设计 (4)3.1单片机的最小系统 (5)3.1.1电源电路 (5)3.1.2复位电路 (5)3.1.3晶振电路 (6)3.2 LED数码管显示部分 (6)3.3矩阵键盘 (7)3.3.1键盘的工作原理 (7)3.3.2键盘检测原理 (7)4、系统软件设计 (9)4.1 软件设计思想 (9)4.2 主程序设计 (10)4.3 子程序设计 (11)4.3.1 数码管显示程序设计 (11)4.3.2 键盘检测程序设计 (11)4.3.3延时函数程序设计 (14)5、系统调试 (14)6.设计体会 (15)参考文献 (15)摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。

本设计选用AT89S52芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。

通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。

用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。

在硬件电路的基础上加上软件程序的控制来实现本设计。

其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。

关键词:AT89S52芯片;4*4矩阵键盘;键盘识别;LED数码管1、概述随着单片机系统的日益更新,以及人们对产品的人机交互能力的不断提高;使得单片机系统的人机界面设计能力成为学习单片机的一项重要的基础内容。

阐述数码管显示对应矩阵键盘值

阐述数码管显示对应矩阵键盘值

阐述数码管显示对应矩阵键盘值
数码管显示和矩阵键盘值之间的关系是通过数字信号的传递和编码来实现的。

在数码管显示中,每个数码管都有七个LED灯,可以分别控
制其显示数字的不同部分。

这七个LED灯对应的位置被编码
为数字的七位二进制数。

例如,数字“0”的编码为“00111111”,其中每个1代表一个LED灯亮起来,每个0代表一个LED灯
灭掉。

在矩阵键盘中,每个按键都与一个特定的行和列相连。

当用户按下一个按键时,该按键所在的行和列的电路之间会形成一个连接,并产生一个特定的数字信号,该信号代表了该按键所对应的数值。

因此,通过将数码管和矩阵键盘连接起来,可以根据按键的行列位置,将相应的数字信号解码并显示在数码管上。

这使得用户可以直接通过矩阵键盘输入数字,并看到其相应的显示和输出。

数码管显示4×4键盘矩阵按键实验

数码管显示4×4键盘矩阵按键实验

5、4×4键盘矩阵按键实验一、实验目的及要求键盘实质上是一组按键开关的集合。

通常,键盘开关利用了机械触点的合、断作用。

键的闭合与否,反映在行线输出电压上就是呈高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,反之也可。

通过对行线电平高低状态的检测,便可确认按键按下与否。

为了确保CPU对一次按键动作只确认一次按键有效,还必须消除抖动。

当按键较多时会占用更多的控制器端口,为减少对端口的占用,可以使用行列式键盘接口,本实验中采用的4×4键盘矩阵可以大大减少对单片机的端口占用,但识别按键的代码比独立按键的代码要复杂一些。

在识别按键时使用了不同的扫描程序代码,程序运行时LED灯组会显示相应按键的键值0~15的二进制数。

本实验中P2端口低4位连接是列线,高4位连接的是行线。

二、实验原理(图)三、实验设备(环境):1、电脑一台2、STC-ISP(V6.85I)烧写应用程序3、Keil应用程序四、实验内容(算法、程序、步骤和方法):#include<STC15F2K60S2.h> //此文件中定义了STC15系列的一些特殊功能寄存器#include"intrins.h"#define uint unsigned int#define uchar unsigned charuchar code dsy_code[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0 F,0xff};uchar Pre_keyno=16,keyno=16;void delayMS(char x){uchar i;while(x--)for(i=0;i<120;i++) ;}void keys_scan(){uchar tmp;P2=0x0f;delayMS(5);tmp=P2^0x0f;switch(tmp){case 1:keyno=0;break;case 2:keyno=1;break;case 4:keyno=2;break;case 8:keyno=3;break;default:keyno=16;}P2=0xf0;delayMS(5);tmp=P2>>4^0x0f;switch(tmp){case 1:keyno+=0;break;case 2:keyno+=4;break;case 4:keyno+=8;break;case 8:keyno+=12;break;}}main(){P0=0x00;while(1){P2=0xf0;if(P2!=0xf0)keys_scan();if(Pre_keyno!=keyno){P0=~dsy_code[keyno];Pre_keyno=keyno;}delayMS(50);}}五、实验结论(结果):本实验实现了XXX功能,核心算法采用了XXX的方式,达到了预期目的。

实验五 矩阵式键盘按键值的数码管显示

实验五 矩阵式键盘按键值的数码管显示

实验五矩阵式键盘按键值的数码管显示一实验目的将矩阵键盘的键值采用LED数码管显示出来(分别考虑用动态显示、静态显示)二实验内容与具体任务描述任务1:行列式键盘接口,扫描实现LED动态显示键盘被按下。

将图中的动态显示改成静态显示。

:修改代码及图,2任务三设计的电路图与描述P1口控制键盘,P0口控制LED显示器。

四程序清单任务1:#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字的段码0~9.unsigned char keyval; //定义变量储存按键值/**************************************************************函数功能:数码管动态扫描延时**************************************************************/ void led_delay(void){unsigned char j;for(j=0;j<200;j++);}/************************************************************** 函数功能:按键值的数码管显示子程序**************************************************************/ void display(unsigned char k){P2=0xbf; //点亮数码管DS6P0=Tab[k/10]; //显示十位led_delay(); //动态扫描延时P2=0x7f; //点亮数码管DS7P0=Tab[k_x0010_]; //显示个位led_delay(); //动态扫描延时}/************************************************************** 函数功能:软件延时子程序**************************************************************/ void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%6; //定时器T0的高8位赋初值TR0=1; //启动定时器T0按键值初始化为// keyval=0x00;while(1) //无限循环{display(keyval); //调用按键值的数码管显示子程序}}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1{TR0=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.1出低电平“0”)if(P14==0) keyval=1; //可判断是S1键被按下if(P15==0) keyval=2; //可判断是S2键被按下if(P16==0) keyval=3; //可判断是S3键被按下if(P17==0) keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1出低电平“0”)if(P14==0) keyval=5; //可判断是S5键被按下if(P15==0) keyval=6; //可判断是S6键被按下if(P16==0) keyval=7; //可判断是S7键被按下if(P17==0) keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) keyval=9; //可判断是S9键被按下if(P15==0) keyval=10; //可判断是S10键被按下if(P16==0) keyval=11; //可判断是S11键被按下if(P17==0) keyval=12; //可判断是S12键被按下P1=0xf7;if(P14==0) keyval=13; //可判断是S13键被按下if(P15==0) keyval=14; //可判断是S14键被按下if(P16==0) keyval=15; //可判断是S15键被按下if(P17==0) keyval=16; //可判断是S16键被按下}TR0=1; //开启定时器T0TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%6; //定时器T0的高8位赋初值}任务2:#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 数字// 0~9的段码//定义变量储存按键值unsigned char keyval;/**************************************************************函数功能:数码管动态扫描延时**************************************************************//*void led_delay(void){unsigned char j;for(j=0;j<20;j++);}/**************************************************************函数功能:按键值的数码管显示子程序**************************************************************/void display(unsigned char k){DS6 点亮数码管// P2=0x3f;P0=Tab[k/10]; //显示十位//动态扫描延时//led_delay();DS7 //点亮数码管//P2=0x7f;显示个位// P3=Tab[k_x0010_];//led_delay(); //动态扫描延时}/**************************************************************函数功能:软件延时子程序**************************************************************/void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/**************************************************************函数功能:主函数**************************************************************/void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%6; //定时器T0 的高8位赋初值TR0=1; //启动定时器T0keyval=0x00; //按键值初始化为0while(1) //无限循环{display(keyval); //调用按键值的数码管显示子程序}}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1{TR0=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平ぜ,所有列线置为高电平if((P1&0xf0)!=0xf0) //列线中有一位为低电平ぜ,说明有键按下delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平ぜ(P1.1 出低电平ぜ)if(P14==0) keyval=1; //可判断是S1键被按下if(P15==0) keyval=2; //可判断是S2键被按下if(P16==0) keyval=3; //可判断是S3键被按下if(P17==0) keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平ぜ(P1.1出低电平ぜ)if(P14==0)keyval=5; //可判断是S5键被按下if(P15==0) keyval=6; //可判断是S6键被按下if(P16==0) keyval=7; //可判断是S7键被按下if(P17==0) keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平ぜ(P1.2输出低电平ぜ)if(P14==0) keyval=9; //可判断是S9键被按下if(P15==0) keyval=10; //可判断是S10键被按下if(P16==0) keyval=11; //可判断是S11键被按下if(P17==0) keyval=12; //可判断是S12键被按下P1=0xf7;键被按下S13可判断是// keyval=13; if(P14==0)if(P15==0) keyval=14; //可判断是S14键被按下if(P16==0) keyval=15; //可判断是S15键被按下if(P17==0) keyval=16; //可判断是S16键被按下}TR0=1; //开启定时器T0TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%6; //定时器T0的高8位赋初值}五运行结果任务1:两个LED显示器动态显示被按下键盘号。

LED数码管显示矩阵键盘按键的设计

LED数码管显示矩阵键盘按键的设计

任务九设计说明2 一、电路原理及仿真图:二、程序设计:#include <reg51.h>#define uchar unsigned charuchardisplay[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};uchar key;void get(){uchar a;P1=0x0f;//按下按钮//a=P1^0x0f;switch(a) //确定行// {case 1:key=0;break;case 2:key=4;break;case 4:key=8;break;case 8:key=12;break;case 0:key=16;}P1=0xf0;a=P1^0xf0;switch(a) //确定列//{case 16:key=key+3;break;case 32:key=key+2;break;case 64:key=key+1;break;case 128:key=key+0;}} void main(){P0=display[16];get();P0=display[key];}程序完成两个功能,首先扫描键盘,检测是否有按键按下并计算键值。

然后如果有按键按下则驱动数码管显示相应键值,否则显示”-“符号。

三、设计说明如电路原理图所示,图中矩阵键盘和P3端口连接,共阳极数码管的段选端和单片机的P0口连接,位选直接接到高电平,使得数码管始终处于选通状态。

系统启动后,单片机逐行扫描键盘,当没有按键按下时,驱动数码管显示“-”符号,当检测到有按键按下时,单片机将相应键值对应的数码编码送至P0端口,驱动数码管以十六进制方式显示被按下的按键的键值。

四、遇到的问题首先遇到的问题是系统启动后数码管没有任何显示,仔细查看仿真现象后发现P0口始终为高阻状态,于是怀疑是数码管极性错误。

实验四:矩阵按键与数码管显示

实验四:矩阵按键与数码管显示

switch(P2) { case(0X70): KeyValue=3;break; case(0XB0): KeyValue=2;break; case(0XD0): KeyValue=1;break; case(0XE0): KeyValue=0;break; } //测试行 P2=0X0F; switch(P2) { case(0X07): KeyValue=KeyValue+12;break; case(0X0B): KeyValue=KeyValue+8;break; case(0X0D): KeyValue=KeyValue+4;break; case(0X0E): KeyValue=KeyValue;break; } //此处是流程图中所缺少的部分请尝试理解与运用 while((a<50)&&(P2!=0x0F)) { Delay(1000); a++; } } } return KeyValue; }
图 4 数码管动态显示
实例:
B C D E F G H
RP1
RESPACK-8 P0.0 P0.1 P0.2 P0.3 P0.7 P0.6 P0.5 P0.4 P1.3 P1.2 P1.1 P1.0
C2
100pF
1 1
U1 X1
19 XTAL1 CRYSTAL 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灯课件

THANKS
电路。
当按键被按下时,按键的两个触 点之间会短路,从而接通电路; 当按键释放时,触点断开,电路
断开。
独立按键通常用于简单的输入控 制,如开关一个LED灯。
独立按键控制LED灯的电路连接
01
将LED的正极连接到按键的常闭 触点上,LED的负极连接到地线 。
02
当按键没有被按下时,LED灯不 亮;当按键被按下时,LED灯亮 起。
控制家电设备
独立按键和矩阵键盘可以用于控制各种家电设备,如灯光、空调、电视等,实现一键控制和智能 化管理。
实现人机交互
通过独立按键和矩阵键盘,用户可以方便地与智能家居系统进行交互,实现语音控制、手势控制 等多种交互方式。
实现家庭安全
独立按键和矩阵键盘可以用于设置安全报警系统,如门窗报警、烟雾报警等,提高家庭安全防范 能力。
应用场景的比较
独立按键
适用于按键数量较少,布局较为分散 的场合,如遥控器、计算器等。
矩阵键盘
适用于按键数量较多,布局较为紧凑 的场合,如电脑键盘、游戏机手柄等 。
优缺点的比较
独立按键
01
缺点:占用引脚多,不适合大量按键的应 用场景。
03
02
优点:每个按键独立控制,电路简单,易于 实现。
04
矩阵键盘
优点:可节省引脚数量,适用于大量按键 的应用场景。
05
06
缺点:电路较为复杂,需要行列扫描或解 码电路才能实现。
04
独立按键及矩阵键盘在智能 家居中的应用
智能家居概述
1 2
3
智能家居定义
智能家居是指通过互联网、物联网等技术,将家庭中的各种 设备连接到一起,实现智能化控制和管理,提高生活便利性 和舒适度。

矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示

矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示

一、矩阵键盘按‎键的数码管‎显示1.实验目的(1)掌握VHD‎L语言的语‎法规范,掌握时序电‎路描述方法‎(2)掌握多个数‎码管动态扫‎描显示的原‎理及设计方‎法2.实验所用仪‎器及元器件‎计算机一台‎实验板一块‎电源线一根‎扁平线一根‎下载线一根‎3.实验任务要求设计出‎4*4矩阵键盘‎对某一按键‎按下就在数‎码管显示一‎个数字。

按键从左上‎角到右下角‎依次为1,2, (16)4.实验原理按键模块原‎理键盘扫描的‎实现过程如‎下:对于4×4键盘,通常连接为‎4行、4列,因此要识别‎按键,只需要知道‎是哪一行和‎哪一列即可‎,为了完成这‎一识别过程‎,我们的思想‎是,首先固定输‎出4行为高‎电平,然后输出4‎列为低电平‎,在读入输出‎的4行的值‎,通常高电平‎会被低电平‎拉低,如果读入的‎4行均为高‎电平,那么肯定没‎有按键按下‎,否则,如果读入的‎4行有一位‎为低电平,那么对应的‎该行肯定有‎一个按键按‎下,这样便可以‎获取到按键‎的行值。

同理,获取列值也‎是如此,先输出4列‎为高电平,然后在输出‎4行为低电‎平,再读入列值‎,如果其中有‎哪一位为低‎电平,那么肯定对‎应的那一列‎有按键按下‎。

键盘键值的‎获取:键盘上的每‎一个按键其‎实就是一个‎开关电路,当某键被按‎下时,该按键的接‎点会呈现0‎的状态,反之,未被按下时‎则呈现逻辑‎1的状态。

扫描信号由‎r o w进入‎键盘,变化的顺序‎依次为11‎10-1101-1011-0111-1110。

每一次扫描‎一排,依次地周而‎复始。

例如现在的‎扫描信号为‎1011,代表目前正‎在扫描9,10,11,12这一排‎的按键,如果这排当‎中没有按键‎被按下的话‎,则由col‎umn读出‎的值为11‎11;反之当9这‎个按键被按‎下的话,则由col‎u mn读出‎的值为11‎10。

根据上面所‎述原理,我们可得到‎各按键的位‎置与数码关‎系如表所示‎:1110 1110 1110 1110 1101 1101 1101 1101row1110 1101 1011 0111 1110 1101 1011 0111 colum‎n1 2 3 4 5 6 7 8键值row 1011 1011 1011 1011 0111 0111 0111 0111colum‎n1110 1101 1011 0111 1110 1101 1011 0111键值9 10 11 12 13 14 15 16动态显示原‎理为使得输入‎控制电路简‎单且易于实‎现,采用动态扫‎描的方式实‎现设计要求‎。

矩阵键盘扫描与数码管显示实验结果分析

矩阵键盘扫描与数码管显示实验结果分析

矩阵键盘扫描与数码管显示实验结果分析
矩阵键盘扫描与数码管显示实验是一种常见的数字电路实验。

在这个实验中,我们可以通过按下矩阵键盘上的按键,控制数码管上的数字显示。

实验结果分析主要包括以下几个方面:
1. 矩阵键盘扫描:在实验中按下键盘上的某个按键,可以通过扫描算法检测到按键的位置,并将对应按键的行列信息送入微处理器或控制电路。

分析实验结果时,可以观察是否可以正常检测到按键的位置,并且是否能够正确传递给其他部分的电路或处理器。

2. 数码管显示:通过实验中的控制电路,可以将微处理器或其他控制器输出的数字信号转换成数码管上的对应数字显示。

在分析实验结果时,可以观察数码管是否能够正常显示所期望的数字,并且是否能够响应输入信号的变化。

3. 信号传递与处理:在整个实验电路中,信号的传递和处理是关键部分。

可以分析信号在各个部分的传递过程中是否出现错误或干扰,是否能够实现正确的数据传输和处理。

4. 稳定性和可靠性:实验结果的分析还需要考虑电路的稳定性和可靠性。

即在长时间使用或复杂环境条件下,电路能否保持正常工作,并且不出现意外错误或故障。

总结来说,矩阵键盘扫描与数码管显示实验结果的分析需要关注按键的检测和传递、数码管的正确显示、信号传递与处理等方面,同时也需要考虑电路的稳定性和可靠性。

矩阵式键盘控制数码管显

矩阵式键盘控制数码管显
去抖动处理
为了避免按键抖动造成的误判,微 控制器会对检测到的按键状态进行 去抖动处理,确保按键状态的准确 性。
键盘编码方式
行码与列码组合
01
每个按键都有一个唯一的行码和列码组合,用于标识按键的位
置。
编码表
02
建立一个包含所有按键行码和列码组合的编码表,用于将按键
位置映射到对应的编码值。
编码输出
03
键盘扫描程序
根据矩阵式键盘的原理,编写键盘扫描程序,实 现按键的检测与识别。
数码管显示程序
根据数码管的显示原理,编写数码管显示程序, 实现数码管的显示和控制。
主程序
主程序负责调用键盘扫描程序和数码管显示程序, 实现整个系统的控制逻辑。
系统调试与测试
硬件调试
检查硬件电路连接是否正确,确保各模块工作正常。
矩阵式键盘控制数码管显示系 统
目录
CONTENTS
• 矩阵式键盘控制原理 • 数码管显示技术 • 矩阵式键盘控制数码管显示系统设计 • 系统性能优化与改进 • 应用前景与发展趋势

01 矩阵式键盘控制原理
CHAPTER
矩阵式键盘结构
4x4矩阵式键盘结构
由16个按键组成的矩阵,行线和列线 交叉连接,每个按键位于行线和列线 的交叉点上。
根据按键位置在编码表中找到对应的编码值,通过微控制器输
出相应的编码信号,控制数码管显示相应的字符或数字。
02 数码管显示技术
CHAPTER
数码管工作原理
数码管由多个LED段组成,通过控制各段的亮灭来显示数字或字符。
数码管内部有8个LED段,通过电流的通断控制每个段的亮灭,从而显示不同的数字 或字符。
数码管驱动方式
点驱动方式

矩阵键盘的键值用数码管显示

矩阵键盘的键值用数码管显示

矩阵键盘的键值用数码管显示�矩阵按键项目:分别按下4*4 矩阵键盘,一共16 个按键,数码管会相应的显示1-16 不同的数字。

最终效果图:现象说明:效果图中我们看到:按 4 键,数码管上即显示04,同理按5 键数码管上即显示05。

上面显示的 2 个LED 灯是硬件上特意设计的,只要按键按下,相应的灯就亮了。

目前不用太在意。

此项目练习的目的:(1)认识矩阵键盘。

(2)了解矩阵键盘的原理。

(3)熟悉软件编程。

(4)熟悉软件的使用。

完整代码:(注意,代码中省略的部分是我们目前可以不关心的内容,在下一阶段将着重介绍,此代码已编译测试通过)#include <reg52.h> //头文件#include "digitron_drv.h" //调用数码管显示程序,现在可以把它当做一个主体#define uint unsigned int //宏定义#define uchar unsigned charuchar key_num; //矩阵键盘键值/*延时函数*/void delay(uchar x){uchar i,j;for(i = x;i > 0;i--)for(j = 100;j > 0;j--);}/*键盘键值显示*/void display(void){DigShowNumber(1,key_num%10,0); //个位除以10 取余DigShowNumber(2,key_num/10,0); //十位除以10 取整}/*键盘扫描*/void keyboard(void){uchar temp;P1=0xef; //将第1 列置位低电平,其余的为高电平temp=P1; //读取P1 口当前的状态,赋值给临时变量temp,用于后面的计算temp=temp&0x0f; //判断temp 的,低四位是否为0,if(temp!=0x0f) //如果temp 不等于0x0f,说明有按键按下{delay(10); //延时消抖temp=P1; //重新读一次P1 口数据temp=temp&0x0f;// 如果temp 仍然不等于0x0f,这次说明第1 列真的有按键按下if(temp!=0x0f){temp=P1;switch(temp) //判断按下的是该列的第几行{case 0xee: //如果读到P1 是0xee,说明是第1 列和第1 行的交叉键,即数字键7key_num=7;break;case 0xed: //如果读到P1 是0xed,说明是第1 列和第2 行的交叉键,即数字键4key_num=4;break;case 0xeb: //如果读到P1 是0xeb,说明是第1 列和第3 行的交叉键,即数字键1key_num=1;break;case 0xe7: //如果读到P1 是0xe7,说明是第1 列和第4 行的交叉键,即数字键0key_num=0;break;}}//在判断完按键序号后,还要等待按键被释放,检测释放语句如下:while(temp!=0x0f) //等待按键被释放{temp=P1;temp=temp&0x0f; //不断的读取P1 口数据,然后和0x0f“与”运算,只要结果不等于0x0f,说明按键没有被释放,直到按键被释放才退出whiledisplay();}}//以下程序意义同上,继续进行第2、3、4 列的检测P1=0xdf;temp=P1;temp=temp&0x0f;if(temp!=0x0f){delay(10);temp=P1;temp=temp&0x0f;if(temp!=0x0f){temp=P1;switch(temp){case 0xde:key_num=8;break;case 0xdd:key_num=5;break;case 0xdb:key_num=2;break;case 0xd7:key_num=10;break;}}while(temp!=0x0f){temp=P1;temp=temp&0x0f;display();}}P1=0xbf;temp=P1;temp=temp&0x0f; if(temp!=0x0f) {delay(10);temp=P1;temp=temp&0x0f; if(temp!=0x0f) {temp=P1;switch(temp){case 0xbe:key_num=9; break;case 0xbd:key_num=6; break;case 0xbb:key_num=3; break;case 0xb7:key_num=11; break;}}while(temp!=0x0f){ temp=P1;temp=temp&0x0f; display();}}P1=0x7f;temp=P1;temp=temp&0x0f; if(temp!=0x0f) {delay(10);temp=P1;temp=temp&0x0f; if(temp!=0x0f) {temp=P1;switch(temp){case 0x7e:key_num=12;break;case 0x7d:key_num=13;break;case 0x7b:key_num=14;break;case 0x77:key_num=15;break;}}while(temp!=0x0f){temp=P1;temp=temp&0x0f;display();}}}void main(void){while(1){keyboard();display();}}长见识:(1)按键实物:也称轻触开关按键之前也已经见过了,再回忆一下。

单片机课程设计——数码管显示4×4矩阵键盘

单片机课程设计——数码管显示4×4矩阵键盘

《单片机原理及应用课程设计》报告——数码管显示4*4矩阵键盘的键盘号设计专业:班级:姓名:学号:2013年1月1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。

2.课程设计要求单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。

例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。

3.硬件设计3.1 设计思想分析本任务的要求,使设计能够完成当4*4矩阵键盘中的某一按键按下时,数码管上显示对应的键盘号。

则本系统主要由以下几大模块构成:显示模块,共阴极LED数码管;输入模块,4*4矩阵键盘;3.2主要元器件介绍矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。

在行线和列线的每一个交叉点上,设置一个按键。

这样键盘中按键的个数是4×4个。

这种行列式键盘结构能够有效地提高单片机系统中I/O 口的利用率。

数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。

数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。

若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。

所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。

4.1 设计思想按键采用线反转法先把列线置成低电平,行线置成输入状态,读行线;再把行线置成低电平,列线输入状态,读列线。

矩阵按键控制数码管显示

矩阵按键控制数码管显示

定时消抖 Case 0xee; P0口送0 段码 Case 0xed; P0口送1 段码 Case 0x77; …… P0口送F 段码
有键按下?


存储当前P2的状态1 Break P2=0X0F 结束 存储当前P2的状态2
返回(状态1|状态2)
返回0XFF
程序编写
//========================================== //函数名称: keyscan() //函数功能: 检测按键 //入口参数:无 //出口参数:cord_h|cord_1 //备注: //========================================== UINT8 keyscan(void) { INT8 cord_h=0; INT8 cord_1=0; P2=0xf0; if(P2!=0xf0) { delay_ms(10); if(P2!=0xf0) { cord_h=P2; P2=0x0f; cord_1=P2; return(cord_h|cord_1); } } return(0xff); }
在没有按键按下时,即DS2450 的输入量时0,当有丌 同的按键按下时,DS2450 的输入量丌同,微处理器就会 得到丌同的数字量,微处理器根据采集到的数字量可判断 按键情况。
单片机控制的“机电一体化产品”中按键的接口设计 科技咨询,李迚波
键盘扫描子程序一般包括以下内容:
1.判别有无键按下;
2.消除键盘机械抖动;
出线输出为全低电平,则列线中电平由高变低所在列为按
键所在列。
两步即可确定按键所在的行和列,从而识别出所按的键。
采用线反转法的矩阵式键盘
假设键3被按下。
第一步,P1.0~P1.3输出全为“0”,然后,读入 P1.4~P1.7线的状态,结果P1.4=0,而P1.5~P1.7均为 1,因此,第1行出现电平的变化,说明第1行有键按下; 第二步,让P1.4~P1.7输出全为“0”,然后,读入 P1.0~P1.3位,结果P1.0=0,而P1.1~P1.3均为1,因 此第4列出现电平的变化,说明第4列有键按下。

矩阵式键盘控制数码管显示

矩阵式键盘控制数码管显示
矩阵式键盘控制数码 管显示
目录
CONTENTS
• 矩阵式键盘工作原理 • 数码管显示原理 • 矩阵式键盘控制数码管显示方案 • 矩阵式键盘控制数码管显示应用 • 矩阵式键盘控制数码管显示常见问题及
解决方案
01 矩阵式键盘工作原理
按键检测方式
直接检测法
通过直接检测按键是否按下,判断按键状态。
间接检测法
按键与数码管显示不匹配
01
总结词
按键与数码管显示不匹配是矩阵式键盘控制数码管显示中 常见的问题之一,表现为按下某个按键后数码管显示的内 容与预期不符。
02
详细描述
这可能是由于键盘编码与数码管显示编码不匹配导致的问题。 例如,按下数字键“1”,数码管却显示字母“A”。
03
解决方案
可以通过调整键盘编码与数码管显示编码的对应关系来解 决这个问题。具体来说,需要检查键盘编码与数码管显示 编码的映射关系,确保它们一一对应。同时,也需要检查 键盘扫描程序和数码管显示驱动程序的实现是否正确。
静态驱动
每个数码管的每个段都由一个独立的 I/O口控制,适用于数码管数量较少 的情况。
动态驱动
通过扫描方式逐个点亮数码管的各个 段,可以节省I/O口资源,适用于数码 管数量较多的情况。
03 矩阵式键盘控制数码管显 示方案
硬件连接方案
矩阵式键盘与微控制器连接
将矩阵式键盘的行和列连接到微控制器的输入/输出端口,以便读取按键状态。
优化显示逻辑
优化数码管显示的逻辑,例如使用动态扫描技术,减少数码管的亮灭时间,提高显示效果。
04 矩阵式键盘控制数码管显 示应用
电子密码锁
总结词
矩阵式键盘控制数码管显示在电子密码锁中应用广泛,能够实现密码输入、显示和安全 验证等功能。

基于矩阵键盘数码管LED灯的综合应用

基于矩阵键盘数码管LED灯的综合应用

实验设计报告基于DVCC实验箱的矩阵键盘等的综合应用设计题目: 基于DVCC实验箱的矩阵键盘综合应用班级:__ _ _组员:_ __学号:_指导老师:日期: 2011年12月10日矩阵键盘数码管和LED的简单应用任务书1.设计目的以DVCC实验箱上的AT89C51单片机最小系统为核心,设计矩阵键盘,数码管和LED的简单应用。

掌握矩阵键盘的工作原理、数码管的工作原理;熟练掌握C51软件编程控制方法和proteus仿真软件使用。

通过从键盘上输入数字或字母,用数码管显示所输入的数字或字母,LED表示对应的二进制编码。

2.设计任务首先以DVCC实验箱为试验环境,用导线连接各个模块;其次用数码管显示键盘上按下的数字或字母,四个LED灯显示对应的二进制代码;最后用DVCC 试验系统软件完成AT89C51单片机对外围系统的整体控制。

3.设计需求利用51单片机作为系统核心控制部分,用外围3×8的矩阵键盘、数码管和流水灯。

编写程序实现矩阵键盘数码管LED灯的简单应用。

4.设计材料序号器件数量功能1 AT-89C51单片机最小系统板 1 核心2 矩阵键盘 1 输入3 数码管 1 显示4 LED灯 4 显示8 导线若干辅助材料内容要求1.题目分析,功能要求模拟电路由AT89C51单片机最小系统、矩阵键盘、数码管和LED灯组成。

信号的采集和输出都由单片机控制,输入由矩阵键盘实现,数码管显示输入的数字或字母,LED灯显示对应的二进制代码。

2.总体方案设计没有键按下时,数码管显示为0,四个LED灯全灭。

当有键按下时,数码管显示按键相应的数字或字母,LED灯(亮表示1,灭表示0)显示对应的二进制代码。

3.硬件设计本设计是基于DVCC实验箱的,需要用到AT89C51最小控制系统,矩阵键盘,数码管与LED灯。

☆ AT89C51芯片本设计主要采用AT89C51芯片。

AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。

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

任务九设计说明2 一、电路原理及仿真图:
二、程序设计:
#include <reg51.h>
#define uchar unsigned char
uchar
display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
uchar key;
void get(){
uchar a;
P1=0x0f;
//按下按钮//
a=P1^0x0f;
switch(a) //确定行// {
case 1:key=0;break;
case 2:key=4;break;
case 4:key=8;break;
case 8:key=12;break;
case 0:key=16;}
P1=0xf0;
a=P1^0xf0;
switch(a) //确定列//{
case 16:key=key+3;break;
case 32:key=key+2;break;
case 64:key=key+1;break;
case 128:key=key+0;}} void main(){
P0=display[16];
get();
P0=display[key];
}
程序完成两个功能,首先扫描键盘,检测是否有按键按下并计算键值。

然后如果有按键按下则驱动数码管显示相应键值,否则显示”-“符号。

三、设计说明
如电路原理图所示,图中矩阵键盘和P3端口连接,共阳极数码管的段选
端和单片机的P0口连接,位选直接接到高电平,使得数码管始终处于选通状态。

系统启动后,单片机逐行扫描键盘,当没有按键按下时,驱动数码管显示“-”符号,当检测到有按键按下时,单片机将相应键值对应的数码编码送至P0端口,驱动数码管以十六进制方式显示被按下的按键的键值。

四、遇到的问题
首先遇到的问题是系统启动后数码管没有任何显示,仔细查看仿真现象后发现P0口始终为高阻状态,于是怀疑是数码管极性错误。

再检查数码管型号后发现果然使用了共阴极数码管,于是换成共阳极数码管后终于有了显示。

其次是希望键值从键盘的左下角起始,即左下角键值为0。

但由于对键盘的扫描方向理解的不是很透彻,导致调试了很多次,键值排列顺序都不尽人意。

不过最终还是达到了设计要求。

相关文档
最新文档