矩阵键盘孙长发2014-05-08目录▲矩阵键盘义定▲矩阵键盘优点▲教学任务▲硬件电路▲程序设计流程▲程序代码▲按键识别方法▲作业教学目标:1.掌握矩阵式键盘的电路结构。2.理解矩阵式键盘扫描原理。3.掌握矩阵式键盘与51单片机接口的编程方法。4.巩固延时程序、数码管显示程序知识。教学课时:2课时。一、矩阵键盘义定单片机外部设备中使用的排布类似于矩阵形式的按键组。Y1Y0Y2Y3Y5Y6Y4Y71230456789ABCDEF二、使用矩阵键盘优点在按键数量较多时,减少I/O口资源的占用,通常采用矩阵键盘。三、教学任务:设计一个4×4矩阵键盘,其键值为0---F,按下按键,数码管显示相应键值,要求用行扫描法识别键盘,且键盘要有去抖动功能。分别用软件和硬件演示实际效果四、硬件电路Y1Y0Y2Y3Y5Y6gfedcbaabcdefgdpY4Y7XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427AT89C521230456789ABCDEF+5v按下按键数码管显示其值开始扫描键盘有键按下?延时去抖动扫描键盘识别闭合键计算键值输出显示根据键值找对应的段码NY有键按下?NY五、程序设计流程#includereg52.h//头文件#defineuintunsignedint//宏定义#defineucharunsignedcharvoiddelayms(uintxms)//延时子程序{uinti,j;for(i=xms;i0;i--)for(j=110;j0;j--);}ucharcodeKEY_TABLE[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//键值表ucharcodeTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管编码表voidmain(){uinttemp,key,num,i;//定义变量类型while(1)//大循环{P3=0xf0;//置行为低电平0,列为高电平1,读列值。if(P3!=0xf0)//判断有,无键盘按下{delayms(10);//去抖延迟if(P3!=0xf0)//如果if的值为真,这时可以确定有键盘按下{temp=P3;//存储列读入的值P3=0x0f;//置列为0,行为1,读行值。key=temp|P3;//位或运算,求键值,赋给keyfor(i=0;i16;i++)if(key==KEY_TABLE[i])//查找键值表,确定所按键的序号{num=i;P2=TABLE[num];//根据按键的序号,找到显示段码点亮数码管,显示按键值。delayms(2);}}}}}六、程序代码Y1Y0Y2Y3Y5Y6Y4Y71230456789ABCDEF七、按键识别方法:1.行扫描法:即逐行或逐列扫描查询法。行线列线a、判断键盘中有无键按下及按下键所在列的位置:将全部行线Y0-Y3置低电平,列线Y4-Y7置高电平,然后检测列线的状态。若所有列线均为高电平,则键盘中无键按下。只要有一列的电平为低,则表示键盘该列有一个或多个键被按下。2.行扫描法键盘扫描过程(高→低电平翻转法)b、判断闭合键所在行的位置:在确认有键按下后,即可进入确定具体闭合键的位置在哪行。其方法是:将全部列线Y4-Y7置低电平、行线Y0-Y3置高电平、然后检测行线的状态,只要有一行的电平为低,则表示键盘该行有一个或多个键被按下。c、通过a、b两次检测到Y0-Y7的电平状态进行位或运算,计算出闭合按键的键值,再查找键值表便可以确定按下按键的序号。2.行扫描法键盘扫描过程(高→低电平翻转法)续闭合按键位置判断程序分析P3口(行、列线)赋值给P3赋值闭合按键读取P3运算结果列线行线列线行线Y7Y6Y5Y4Y3Y2Y1Y0Y7Y6Y5Y4Y3Y2Y1Y0判断有无键按下P3=0xf011110000无键按下11110000无键按下循环扫描判断闭合键所在列位置P3=0xf0设0键按下11100000temp=P3=11100000判断闭合键所在行位置P3=0x0f0000111100001110P3=00001110key=temp|P311101110键值key=0xee序号“0”判断闭合键所在列位置P3=0xf011110000设5键按下11010000temp=P3=11010000判断闭合键所在行位置P3=0x0f0000111100001101P3=00001101key=temp|P311011101键值key=0xdd序号“4”判断闭合键所在列位置P3=0xf011110000设E键按下10110000temp=P3=10110000判断闭合键所在行位置P3=0x0f0000111100000111P3=00000111key=temp|P310110111键值key=0xb7序号“14”2.行扫描法键盘扫描过程(高→低电平翻转法)续八、作业:编写一个矩阵扫描子程序XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427AT89C524.7k4.7k4.7k4.7k+5v0---F号按键编写一个矩阵扫描子程序