完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
13个回答
|
|
给你写了一个2*3矩阵键盘演示程序,已经实物验证无误。有详细注释,不要说看不懂。是从异组端口4*4矩阵键盘演化而来。 #include #define uint unsigned int //宏定义数据类型uint #define uchar unsigned char //宏定义数据类型uchar ***it code0=P2^0; //定义2*3键盘端口 ***it code1=P2^1; ***it code2=P2^2; ***it code3=P2^3; ***it code4=P2^4; uchar key=0; //键值变量初始值 void PX(uchar i) //写入P2低5位数据 { code0=i&0x01;i>>=1; code1=i&0x01;i>>=1; code2=i&0x01;i>>=1; code3=i&0x01;i>>=1; code4=i&0x01; } uchar PD() //读取P2低5位数据 { uchar i=0; i=code4; i=(i<<1)|code3; i=(i<<1)|code2; i=(i<<1)|code1; i=(i<<1)|code0; return i; } void key_scan() //矩阵键盘扫描函数 { uchar temp1,temp2,temp3; //临时变量 static bit sign=0; //按键自锁标志 static uint count=0; //消抖计数变量 PX(0x1C); //先给矩阵端口赋一个初值0x1C,高3位置0,中3位置1,低2位置0,0001 1100 if(PD()!=0x1C) //判断矩阵端口不等于所赋初值,说明有健按下 { if(sign==0) //如果按键自锁标志为0 { count++; //消抖计数 if(count>=200) //消抖计数自>=200,估算主循环周期调整 { //摒弃Delay延时方式, count=200; //防止溢出 sign=1; //按键自锁标志置1,键不抬起,按其他键无效 temp1=PD(); //temp1保存矩阵端口中3位变化,000x xx00 PX(0x03); //再给矩阵端口赋值0x03,0000 0011 temp2=PD(); //temp2保存矩阵端口低2位变化,0000 00xx temp3=temp2|temp1; //temp3=低2位+中3位 000x xxxx switch(temp3) { case 0x1a: key=1; break; case 0x16: key=2; break; case 0x0e: key=3; break; case 0x19: key=4; break; case 0x15: key=5; break; case 0x0d: key=6; break; default: break; } } } } else //按键抬起 { sign=0; //按键自锁标志清0 count=0; //消抖计数清0 } } void key_service() //按键服务程序 { switch(key) { case 1: P1=0xfe; break;//LED显示键值 case 2: P1=0xfd; break; case 3: P1=0xfb; break; case 4: P1=0xf7; break; case 5: P1=0xef; break; case 6: P1=0xdf; break; default: break; } } void main() { while(1) { key_scan(); //键盘扫描 key_service(); //LED低电平亮显示键值 } } |
|
|
|
用5个I/O口做6个键的矩阵键盘有多大意义?
|
|
|
|
|
|
|
|
|
|
|
|
和矩阵键盘扫描一样啊,扫描行列
|
|
|
|
和普通矩阵键盘一样的做法,只是要注意保护P2.5-P2.7的状态
|
|
|
|
|
|
|
|
|
|
|
|
本帖最后由 wulinwl 于 2017-9-16 16:33 编辑
程序已写好,在审核中。仿真和实物测试都正常,不影响P2.5~2.7的状态,也与P2.5~2.7的状态无关,并可以移植到任意I/O口矩阵键盘。 |
|
|
|
非常感谢! |
|
|
|
对P2.5-P2.7就是在对键盘引脚置1或清零的时候要保持P2.5-P2.7不变,一般就是在对键盘引脚设置时,通常对整个P2口进行操作,这时就是操作前先读P2数据,然后用与或者或的方式对键盘引脚设置,来保持P2.5-P2.7不变。
另外P2口可以位操作,那就可以用位操作的方式扫描键盘,也可以保持P2.5-P2.7不变 |
|
|
|
|
|
|
|
wulinwl 发表于 2017-9-16 15:36 非常感谢! |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
290 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
487 浏览 0 评论
614 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】SPI点亮16级灰阶OLED显示屏
478 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第四十二章 录音机实验
1114 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12205 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 02:05 , Processed in 0.644887 second(s), Total 69, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号