键盘显示程序设计.docx
- 文档编号:11448984
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:8
- 大小:837.66KB
键盘显示程序设计.docx
《键盘显示程序设计.docx》由会员分享,可在线阅读,更多相关《键盘显示程序设计.docx(8页珍藏版)》请在冰豆网上搜索。
键盘显示程序设计
实验四键盘显示程序设计
实验目的
1、理解串行接口键盘单片机c语言程序的基本结构
2、了解单片机c语言程序的设计和调试方法
3、掌握几个的基本的传送类、控制类指令的使用方法
实验仪器
单片机开发板、稳压电源、计算机
实验原理
1按键
下图为一个典型的接触式按键(又称轻触开关)。
下图是该按键的工作特性图。
其中蓝色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿色的线是却永久导通的。
所以我们取(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到我们预期的开关作用。
2按键电平的判定。
先看下图
当按键按下以后,请问如果这时用万用表测量导线上任何一处的电压,得到的结果是VCC还是GND的电压?
答案是:
GND,即表示测出的电压为0V。
因为导线上,对于两端的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:
有零即为零,只有全为一是才为一。
3独立按键
键盘分为编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。
而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。
非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。
单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该IO口赋一高电平,然后让单片机不断地检测该I/O口是杏变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。
(2)按键抖动
理论上讲,按键按下去后的点评应该为上图,实际上是下图。
在高低电平直接有一段锯齿一样的波形,这就是所谓的按键抖动。
一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们再首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
(3)独立按键
开发板独立按键电路图如下:
独立按键一共5个,分别连接在单片机的P3.0到P3.4口。
去抖动的方式,我们采用软件延时的方法。
过程如下:
1先设置IO口为高电平(一般上电默认就为高)
2读取IO口电平确认是否有按键按下
3如有IO电平为低电平后,延时几个ms
4再读取该IO电平,如果任然为低电平,说明对应按键按下
5执行相应按键的程序
4矩阵按键
独立键盘与单片机连接时,每一个按键都需要单片机的一个I/O口若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O口资源。
单片机系统中I/O口资源往往比较宝贵,当用到多个按键时为了节省I/O口口线,我们引入矩阵键盘。
我们以4X4矩阵键盘为例讲解其工作原理和检测方法。
将16个按键排成4行4列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,这样便一共有4行4列共8根线,我们将这8根线连接到单片机的8个I/O口上,通过程序扫描键盘就可检测16个键。
首先看一下电路图
上图是一个4X4的矩阵键盘,一共是16个按键。
我们照习惯称横为“行”,“竖”为列。
那么5、6、7、8我们称之为“行线”,则1、2、3、4称为“列线”。
要正确记住各个行列线各自对应的IO。
现在详细讲述一下矩阵键盘扫描的原理和步骤:
扫描矩阵键盘,即是把某一条(只有一条)行线置为低电平,而列线全部置为输入方向,然后检测列线,如果检测到某一条列线是低电平,那么就表示位于这条列线与输出低电平的行线的交点处的按键被按下了。
要扫描16个按键,就依次以这样的方法扫描16次,之后就可以确定哪一个按键被按下了。
当然这里也少不了延时消除按键抖动的环节。
实验内容:
P0口连接数码管,P1口连接矩阵键盘。
实验连接图如下
请大家根据以上内容和提示,编写程序,完成实验。
实验功能是数码管静态显示矩阵按键数值0—F.
显示顺序如下:
F
E
D
C
B
A
9
8
7
6
5
4
3
2
1
0
#include
#defineGPIO_DIGP0//定义P0口为GPIO_DIG
#defineGPIO_KEYP1//定义P1口为GPIO_KEY
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};数码管静态共阴极编码
unsignedcharKeyValue;//(KeyValue什么作用?
)
voidDelay10ms(unsignedintc);//延时10ms(完成下面的延时程序)
voidKeyDown();//检测按键函数
voidmain(void)
{
while
(1)
{
KeyDown();
GPIO_DIG=~DIG_CODE[KeyValue];
}
}
voidKeyDown(void)
{
chara=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!
=0x0f)//读取按键是否按下
{
Delay10ms
(1);//延时10ms进行消抖
if(GPIO_KEY!
=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0;break;
case(0X0b):
KeyValue=1;break;
case(0X0d):
KeyValue=2;break;
case(0X0e):
KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValue;break;
case(0Xb0):
KeyValue=KeyValue+4;break;
case(0Xd0):
KeyValue=KeyValue+8;break;
case(0Xe0):
KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!
=0xf0))//检测按键松手检测
{
Delay10ms
(1);
a++;
}
}
}
}
voidDelay10ms(unsignedintc)
{
unsignedchara,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 键盘 显示 程序设计