完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
矩阵接上去不能实现功能 是不是程序出现问题了,求大神帮忙看下 本人菜鸟。。。//键盘扫描子程序流程:
void vShowOneChar(unsigned char ucChar) { switch(ucChar) { case '0': vWriteData(0x30);break; case '1': vWriteData(0x31);break; case '2': vWriteData(0x32);break; case '3': vWriteData(0x33);break; case '4': vWriteData(0x34);break; case '5': vWriteData(0x35);break; case '6': vWriteData(0x36);break; case '7': vWriteData(0x37);break; case '8': vWriteData(0x38);break; case '9': vWriteData(0x39);break; case 'a': vWriteData(0x61);break; case 'b': vWriteData(0x62);break; case 'c': vWriteData(0x63);break; case 'd': vWriteData(0x64);break; case 'e': vWriteData(0x65);break; case 'f': vWriteData(0x66);break; default: break; } } unsigned char ucKeyScan() { unsigned char ucTemp=0; //扫描状态暂存。 unsigned char ucRow=0,ucLine=0; //行号,列号。 for(ucLine=0;ucLine<4;ucLine++) //列扫描 { SCANPORT=uca_LineScan[ucLine]; //输出扫描电位。 ucTemp=SCANPORT&0x0F; //输入扫描电位,并屏蔽高4位。 if(ucTemp!=0x0F) { //判断该列是否有按键按下。 switch(ucTemp) { case 0x0E: ucRow=10;break; //如果有,则判断行号。 case 0x0D: ucRow=20;break; case 0x0B: ucRow=30;break; case 0x07: ucRow=40;break; default: ucRow=50;break; } break; } } SCANPORT=0x0F; //恢复P1口 return ucRow+ucLine+1; //返回按键编码。格式为2位数,高位为行号,低位为列号。 } void vKeyProcess(unsigned char ucKeyCode) { SendCommand(0xC4+uc_ClickCount); if(a_key==1) { switch(ucKeyCode) { case 41:vShowOneChar('7');temp=7;break; case 42:vShowOneChar('8');temp=8;break; case 43:vShowOneChar('9');temp=9;break; case 31:vShowOneChar('4');temp=4;break; case 32:vShowOneChar('5');temp=5;break; case 33:vShowOneChar('6');temp=6;break; case 21:vShowOneChar('1');temp=1;break; case 22:vShowOneChar('2');temp=2;break; case 23:vShowOneChar('3');temp=3;break; case 12:vShowOneChar('0');temp=0;break; SendCommand(0xc4+uc_ClickCount); SendCommand(0x0f); } switch(ucKeyCode) { case 44:/*vShowOneChar('c');*/temp=12;break; //'/' case 34:/*vShowOneChar('d')*/temp=13;break; //'清除' case 24:/*vShowOneChar('e')*/temp=14;break; //'下调' case 14:/*vShowOneChar('f')*/temp=15;break; //'上调' case 13:/*vShowOneChar('b');*/temp=11;break; //'返回' case 11:/*vShowOneChar('a');*/temp=10;break; //'ON/C' default:break; } if(temp==11) //判断按键与上一次所按的键是否相同。 { delay_50ms(100); if(uc_ClickCount<255) //同一个连续按下的次数小于255 { uc_ClickCount++; SendCommand(0xc3+uc_ClickCount); SendCommand(0x0f);} if(uc_ClickCount==3) uc_ClickCount=0; SendCommand(0xc4+uc_ClickCount); SendCommand(0x0f); } if(temp<=9) {switch(uc_ClickCount) { case 0:key_ctt[0]=temp;break; case 1:key_ctt[1]=temp;break; case 2:key_ctt[2]=temp;break; default:break; } } } } 万分感谢!! |
|
相关推荐
2个回答
|
|
|
|
|
|
学习一下!学习一下!学习一下!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4828 浏览 3 评论
6115 浏览 1 评论
6381 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
8124 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1236 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 13:19 , Processed in 0.772529 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号