单片机实现x矩阵键盘控制项目.pptxVIP

  • 1
  • 0
  • 约1.94千字
  • 约 16页
  • 2022-09-07 发布于上海
  • 举报
学习内容;13.1 项目需求 ;13.2 项目工作原理分析;一旦确定有按键已经稳定闭合后,接着判断为哪一个按键闭合,采用对按键进行扫描的方式,依次给每一条列线送低电平,其余各列都为高电平,并检测每次扫描的行状态。每当扫描输出某一列为低电平时,相继读入行线状态。若全为高电平,表示为低电平的这列没有按键闭合。否则行线不全部为高电平,表示为低电平的这列上有按键闭合。确定闭合按键的位置后,计算出按键值,产生按键码。;在矩阵按键处理过程中,一旦检测到有按键闭合与确认按键已经稳定闭合期间,通过调用10-20ms延时子程序避开按键抖动问题。由于按键是机械器件,按下或者松开时有固定的机械抖动,抖动图如图所示。;按键去抖分为硬件去抖和软件去抖,硬件去抖最简单的是按键两端并联电容,容量根据实验而定。软件去抖使用方便不增加硬件成本,容易调试,所以现在处理按键抖动问题大部分选择软件去抖。软件去抖操作步骤如下: ① 检测到按键按下后进行10-15ms延时,用于跳过这个抖动区域。 ② 延时后再检测按键状态,如果没有按下表明是抖动或者干扰造成,如果仍旧按下,可以认为是真正的按下。并进行对应的操作。 ③ 同样按键释放后也要进行去抖动延时,延时后检测按键是否真正松开。;采用单片机控制矩阵按键实现按键键码值显示的电路结构由51单片机最小系统、数码显示电路、数码驱动电路、矩阵键盘电路和电源供电电路组成。 ;13.3 项目硬件电路设计;单片机控制矩阵键盘硬件电路原理图 ;13.4 项目软件程序设计;;程序代码;void main() //定义主函数 { uchar key; P1=0xff; //设置数码管位码端电平,显示按键上的按键码 while(1) { key=keyscan(); //调用键盘扫描, switch(key) { case 0xee:P0=table[0];break; //显示按键码“0” case 0xde:P0=table[1];break; //显示按键码“1” case 0xbe:P0=table[2];break; //显示按键码“2” case 0x7e:P0=table[3];break; //显示按键码“3” case 0xed:P0=table[4];break; //显示按键码“4” case 0xdd:P0=table[5];break; //显示按键码“5” case 0xbd:P0=table[6];break; //显示按键码“6” case 0x7d:P0=table[7];break; //显示按键码“7” case 0xeb:P0=table[8];break; //显示按键码“8” case 0xdb:P0=table[9];break; //显示按键码“9” case 0xbb:P0=table[10];break; //显示按键码“a” case 0x7b:P0=table[11];break; //显示按键码“b” case 0xe7:P0=table[12];break; //显示按键码“c” case 0xd7:P0=table[13];break; //显示按键码“d” case 0xb7:P0=table[14];break; //显示按键码“e” case 0x77:P0=table[15];break; //显示按键码“f” } } } ;void send_char(unsigned char txd) // 传送一个字符 { SBUF = txd; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 } void send_str() // 传送字串 { unsigned char i = 0; uint j; while(str[i] !=0x00) { SBUF = str[i]; while(TI==0); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } for(j=0;j50000;j++); //延迟 };系统调试结果总结;感谢您的观看!

文档评论(0)

1亿VIP精品文档

相关文档