资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
实验四键盘显示程序设计实验目的1、理解串行接口键盘单片机c语言程序的基本结构2、了解单片机c语言程序的设计和调试方法3、掌握几个的基本的传送类、控制类指令的使用方法实验仪器单片机开发板、稳压电源、计算机实验原理1按键下图为一个典型的接触式按键(又称轻触开关)。下图是该按键的工作特性图其中蓝色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿色的线是却永久导通的。所以我们取(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到我们预期的开关作用。2按键电平的判定。先看下图KEYVCC|oo卜GNDSW-PBRnNEF显何PusfrenctiaDI|当按键按下以后,请问如果这时用万用表测量导线上任何一处的电压,得到的结果是VCC还是GND的电压?答案是:GND,即表示测出的电压为0V。因为导线上,对于两端的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:有零即为零,只有全为一是才为一。3独立按键键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。单片机的10口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I0口赋一高电平,然后让单片机不断地检测该I/O口是杏变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。(2)按键抖动11理论上讲,按键按下去后的点评应该为上图,实际上是下图。在高低电平直接有一段锯齿一样的波形,这就是所谓的按键抖动。一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们再首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。(3)独立按键开发板独立按键电路图如下:klibTOP3JCUHI独立按键一共5个,分别连接在单片机的P3.0到P3.4口。去抖动的方式,我们采用软件延时的方法。过程如下:1先设置IO口为高电平(一般上电默认就为高)2读取10口电平确认是否有按键按下3如有I0电平为低电平后,延时几个ms4再读取该I0电平,如果任然为低电平,说明对应按键按下5执行相应按键的程序4矩阵按键独立键盘与单片机连接时,每一个按键都需要单片机的一个I/O口若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O口资源。单片机系统中I/O口资源往往比较宝贵,当用到多个按键时为了节省I/O口口线,我们引入矩阵键盘。我们以4X4矩阵键盘为例讲解其工作原理和检测方法。将16个按键排成4行4列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,这样便一共有4行4列共8根线,我们将这8根线连接到单片机的8个I/O口上,通过程序扫描键盘就可检测16个键。首先看一下电路图矩阵键盘11pi上图是一个4X4的矩阵键盘,一共是16个按键。我们照习惯称横为“行”,“竖”为列。那么5、6、7、8我们称之为“行线”,则1、2、3、4称为“列线”。要正确记住各个行列线各自对应的10。现在详细讲述一下矩阵键盘扫描的原理和步骤:扫描矩阵键盘,即是把某一条(只有一条)行线置为低电平,而列线全部置为输入方向,然后检测列线,如果检测到某一条列线是低电平,那么就表示位于这条列线与输出低电平的行线的交点处的按键被按下了。要扫描16个按键,就依次以这样的方法扫描16次,之后就可以确定哪一个按键被按下了。当然这里也少不了延时消除按键抖动的环节。实验内容:po口连接数码管,P1口连接矩阵键盘。实验连接图如下请大家根据以上内容和提示,编写程序,完成实验。实验功能是数码管静态显示矩阵按键数值0F.显示顺序如下:FEDCBA9876543210#include#defineGPIO_DIGPO/定义PO口为GPIO_DIG#defineGPIO_KEYP1/定义P1口为GPIO_KEYunsignedcharcodeDIG_CODE17=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_CODEKeyValue;voidKeyDown(void)chara=0;GPIO_KEY=OxOf;if(GPIO_KEY!=OxOf)读取按键是否按下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(OXdO):KeyValue二KeyValue+8;break;case(OXeO):KeyValue=KeyValue+12;break;while(a0;c-)for(b=38;b0;b-)for(a=130;a0;a-);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号