- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机按键矩阵识别(含程序、原理图)
按键矩阵识别技术实验说明
如图2所示,把P1端口的8条I/O口分成4条列线4条行线交叉但不接触构成4×4键盘阵列,16个按键放置交叉位置,这样在单片机复杂系统需要较多按键时,这种接法可以节省单片机的硬件资源。
1.结合给出的电路原理图试分析4*4键盘矩阵识别原理,及LED动态扫描原理。(6分)
2.根据分析的键盘矩阵识别原理设计程序实现一下功能:当按下某个按键时在2个七段数码管上显示该按键的编号(注意考虑同时按下多个按键时程序处理过程)、按下某个按键使其弹起时对于消抖情况程序的处理。(9分)
2.0相关原理图如下:
3.0实验说明
本试验给了1-8键判断方法。按1-8键中任意键,则数码管显示该键编号。
想想怎样实现1-16个键的判断显示?
参考程序见程序范例。
/******************************************************************************************
*描述: 按键距阵识别技术
*编写: 秦立春
*版本信息: V1.0 2008年4月20日
*说明: sp1,sp2,SP3跳线向右;
******************************************************************************************/
#include reg52.h
#define uchar unsigned char
#define uint unsigned int
#define ON 0
#define OFF 1
uchar bdata OUT;
sbit JDQ=OUT^0;
sbit HF =OUT^1;
sbit BZ =OUT^2;
sbit AA =OUT^3;
sbit BB =OUT^4;
sbit CC =OUT^5;
sbit DD =OUT^6;
sbit X0=P2^0;
sbit X1=P2^1;
sbit X2=P2^2;
sbit X3=P2^3;
sbit Y0=P2^4;
sbit Y1=P2^5;
sbit Y2=P2^6;
sbit Y3=P2^7;
sbit RS=P1^7;
sbit RW=P3^4;
sbit E =P3^5;
sbit HC574_LE=P3^3;
//-----------------------------------------------------
void delay(unsigned int t) // 延时函数
{
for(;t!=0;t--) ;
}
//------------------------------------------------------
void HC574(void) // 74HC574控制输出;
{
P0=OUT;
HC574_LE=1;
delay(2);
HC574_LE=0;
}
//==================================================
unsigned char Key_Scan(void)
{
uchar a, key;
P2=0xf0;
if(!(Y0Y1Y2Y3))
{
P2=0xf0;
delay(200);
if(!(Y0Y1Y2Y3))
{
P2=0xff;
X0=0;
if(!(Y0Y1Y2Y3)){a=P2;a=(a0xf0+0x0e);goto pp1;}
P2=0xff;
X1=0;
if(!(Y0Y1Y2Y3)){a=P2;a=(a0xf0+0x0d);goto pp1;}
P2=0xff;
X2=0;
if(!(Y0Y1Y2Y3)){a=P2;a=(a0xf0+0x0b);goto pp1;}
P2=0xff;
X3=0;
if(!(Y0Y1Y2Y3)){a=P2;a=(a0xf0+0x07);goto pp1;}
}
else a=0xff;
}
else a=0xff;
pp1: key=a;
return key;
}
//-----------------------------------------------------------
uchar key(void)
{
uchar k, KEY;
KE
文档评论(0)