为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

矩阵键盘

2009-03-16 3页 doc 47KB 61阅读

用户头像

is_631702

暂无简介

举报
矩阵键盘10.1.3.1 硬件原理图     本实验可以直接在配套开发板上完成,其硬件原理图如图4所示: 图4 硬件原理图 根据4电路原理图,键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值...
矩阵键盘
10.1.3.1 硬件原理图     本实验可以直接在配套开发板上完成,其硬件原理图如图4所示: 图4 硬件原理图 根据4电路原理图,键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代S5的值了。转到S5键功能处理子程序就可以达到目的。 程序流程图 10-5 软件流程图     51单片机综合学习系统资源丰富,可做实验有:8位LED数码管、32路LED、4x4矩阵键盘、4个直控键盘、蜂鸣器喇叭、继电器试验、I2C总线接口、SPI总线接口、160X液晶、128X64液晶、红外接收头接口、支持PS/2接口的104键键盘、步进电机驱动接口、ADC0832模/数转换接口、PC817光电耦合器、串行时钟芯片DS1302、温度传感器DS18B20接口、RS232串口通讯、外扩展接口以便外接更多的实验资源。 软件代码 /*********包含头文件*************/ #include /*********数码管************/ unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; /************************************函数功能:延时子程序 入口参数: 出口参数: **********************************/ void delay(void) { unsigned char i,j; for(i=0;i<20;i++) for(j=0;j<250;j++); } /************************************ 函数功能:LED显示子程序 入口参数:I 出口参数: ************************************/ void display(unsigned char i) { P2=0xfe; P0=table[i]; } /************************************ 函数功能:键盘扫描子程序 入口参数: 出口参数: ************************************/ void keyscan(void) { unsigned char n; //扫描第一行 P1=0xfe; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfe; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(3);break; case(0xd0):display(2);break; case(0xb0):display(1);break; case(0x70):display(0);break; } } } //扫描第二行 P1=0xfd; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfd; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(7);break; case(0xd0):display(6);break; case(0xb0):display(5);break; case(0x70):display(4);break; } } } //扫描第三行 P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(11);break; case(0xd0):display(10);break; case(0xb0):display(9);break; case(0x70):display(8);break; } } } //扫描第四行 P1=0xf7; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xf7; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(15);break; case(0xd0):display(14);break; case(0xb0):display(13);break; case(0x70):display(12);break; } } } } /************************************ 函数功能:主程序 入口参数: 出口参数: ************************************/ void main(void) { while(1) { keyscan(); } }
/
本文档为【矩阵键盘】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索