b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

矩阵键盘C语言编程.pdf 5页

电脑杂谈  发布时间:2020-11-25 13:04:54  来源:网络整理

矩阵键盘c语言编程_单片机矩阵键盘c语言编程_矩阵键盘c语言编程

矩阵键盘[示例12]根据12,编写一个程序以实现以下功能:用7段数字管显示矩阵非编码键盘的键名。例如,按1键将显示“ 1”,按2键将显示“ 2”。 RP1 + 5V8 7 6 5 4 3 2 1LED1 P1013973P10P00aA P1123868P11P01bA P123374P12P02c P134362P13P03d P145351GNDP14P04e P156349P15P05f P1673310P16P06g P178U1325P17P07DPAT89C511021 + 5VP30 / RXDP201122P31 / TXDP2112 P32 / INT0P22 23C313 P33 / INT1P23 241uF1425RESP34 / T0P241526P35 / T1P2527R1P26 X11928C11KX1P27 + 5VX131EA / VPP21733pFRD / P37 X21816Y1X2WR / P3630C2ALE / PRDG1 RES929X2RESETPSEN33pFGND45671111PPPP0123P104567P1189ABP12CDEFP13原理图12根据矩阵非编码键盘逐行扫描方法的处理流程,键盘扫描过程应包括以下内容。

矩阵键盘c语言编程_矩阵键盘c语言编程_单片机矩阵键盘c语言编程

(1)查询是否按下了键。首先,MCU将扫描代码F0H输出到行扫描端口,然后从列检测端口读取列检测信号。只要没有列信号“ 1”,即P1端口如果该值不等于F0H,则表示按下了一个键;否则,则表示没有按下了键;键值的解码公式如下:(2)查询关闭键的行和列的位置,如果按下该键,MCU将等待该列。检测信号反转,并且列检测端口中的1位是关闭键所在的列。确定列号后,需要逐行扫描确定行号,微控制器首先将第一行的扫描码FEH输出到行扫描端口,按列读取检测端口,如果有列检测信号全为“ 1”,表示关闭键不在第一行,然后输出扫描码FDH第二行到行扫描端口,然后读取列检测乘积,...依此类推,直到找到闭合键所在的行,然后将该行的扫描代码保存为反向。如果在扫描所有行之后未找到闭合键,则行扫描结束,并判断该键有故障。 (3)对获得的行号和列号进行解码,以确定键值。根据12,1、2和3、4行的扫描码为0xfe,0xfd,0xeb,0xf7; 1、2和3、4列的列检测数据分别为0xe0、0xd0、0xb0、0x70。设置行扫描码子HSM,列检测数据为LJC,则键值为KEY,然后为_ ____ KEY = HSM + LJC | 0x0f例如,“ 0”键位于第一行和第一列,其HSM = 0xfe,LJ​​C = 0xe0,替换上面的公式,“ 0”键的键值为____________________________________ LJC | 0x0f = 0xfe + 0xe0 | 0x0f = 10可以计算所有密钥的值,请参见下表。密钥名称密钥值密钥名称密钥值00x1180x1410x2190x2420x41A0x4430x81B0x8440x12F0x4870x22D0x1850x22D0x1850x22D0x1850x22D0x1850x42

矩阵键盘c语言编程_矩阵键盘c语言编程_单片机矩阵键盘c语言编程

用手按下一个键时,通常会抖动,即被按下的键盘将在关闭位置和打开位置之间跳跃几次,以达到稳定状态。抖动的持续时间长短不一,通常为10ms。如果不解决抖动问题,将导致多次读取闭合键。解决方案是:发现按下键盘后,延迟10毫秒,然后执行逐行扫描。因为按下键时的关闭时间比10ms长得多,所以在延迟之后进行扫描还不算太晚。 [示例12]程序如下:/ ******************************************* ** *****************************************程序名称:L12.c程序功能: 4×4矩阵非编码键盘的应用******************************************** **** *************************************** / #include #define uchar unsigned char #define uint unsigned int uchar HSM,LJC; //定义行扫描代码和列检测数据uchar tmp,keyvalue; //定义接收键值和键值uchar keyscan();无效延迟(uint x); / ********** ******************************************* *********** ******************函数名称:main()函数功能:main函数,键值处理****** *********** **************************************** *********** *********** / void main(){while(1){tmp = keyscan(); switch(tmp){case 0x11:P0 = 0x3f; // 0中断;情况0x21:P0 = 0x06; // 1中断;情况0x41:P0 = 0x5b; // 2中断;情况0x81:P0 = 0x4f; // 3中断;情况0x12:P0 = 0x66; // 4中断; case 0x22:P0 = 0x6d; // 5break; case 0x42:P0 = 0x7d; // 6break; case 0x82:P0 = 0x07; // 7break; case 0x14:P0 = 0x7f; // 8break; case 0x24:P0 = 0x6f ; // 9break; case 0x44:P0 = 0x77; // Abreak; case 0x84:P0 = 0x7c; // Bbreak; case 0x18:P0 = 0x39; // Cbreak; case 0x28:P0 = 0x5e; // Dbreak; case 0x48:P0 = 0x79; //爆发;大小写0x88:P0 = 0x71; // Fbreak;默认值:P0 = 0x00;} delay(100);}} / ************ ******** ********************************************** ******** ********函数名称:void delay(uint x)函数功能:delay xms,振荡器频率为f = 12MHz ************* ****** ********************************************** ********** ********* / void delay(uint x){uchar j,k; for(; x> 0; x-)for(j = 4; j > 0; j-)for(k = 250; k> 0; k--);} / ************************** ********** ******************************************** **函数名称:void keyscan()函数功能:键盘扫描和键处理********************************* ************ *********************************** / uchar按键扫描(){P1 = 0xf0; //行扫描全部低电平,所有列线均为高电平LJC = P1&0xf0; //第一读取列检测状态if(LJC!= 0xf0) {delay(10); ///如果按下键盘,则延迟为10ms LJC = P1&0xf0; //第二次读取列检测状态:0xe0、0xd0、0xb0、0x70if(LJC!= 0xf0) / /如果有闭合钥匙,请逐行扫描{HSM = 0xfe; //扫描代码为0xfe,0xfd,0xfb,0xf7,而(((HSM&0x10)!=0) //如果扫描代码为0xef,然后结束扫描{P1 = HSM; //输出线扫描代码LJC = P1&0xf0; //读取列检测数据:0xe0、0xd0、0xb0、0x70if(LJC!= 0xf0) / /如果密钥已关闭{keyvalu e =(〜HSM)+(〜(LJC | 0x0f)); //计算键盘值return(keyvalue); //返回键值)else HSM =(HSM


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-335880-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...