完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
蓝桥杯单片机硬件基础
独立按键 跳线帽需要短接J5口的3和2引脚,按键能使用的仅有第一列(即上图中S4、S5、S6、S7)。当按键按下时,相应的P30-33口输入为低电平,由此编写独立按键扫描函数。 矩阵按键 跳线帽需要短接J5口的1和2引脚,按键能使用16个(即上图中S4-S19)。矩阵按键的扫描方法可采用行列扫描法,分为两步:
将两个检测值进行叠加,计算判断哪个按键被按下;具体的原理这里就不展开讲解了,较为简单。 相关代码编写:
void KEY_1(void) { static u8 key_flag = 1; if(key_flag && (P30 == 0||P31 == 0|| P32 == 0||P33 == 0)) { key_flag = 0; if(P30 == 0) //S7 { } else if(P31 == 0) //S6 { } else if(P32 == 0) //S5 { } else if(P33 == 0) //S4 { } } else if(P33 && P32 && P31 && P30) key_flag = 1; }
u16 j; void KEY_2(void) { u16 k; static u16 i; P44 = 0; P42 = 1; P35 = 1; P34 = 1; k = P3; P44 = 1; P42 = 0; k = (k<<4)|(P3&0x0f); P42 = 1; P35 = 0; k = (k<<4)|(P3&0x0f); P35 = 1; P34 = 0; k = (k<<4)|(P3&0x0f); k = ~k; i = k&(k^j); j = k; switch(i) { case 0x8000: break; //S4 case 0x4000: break; case 0x2000: break; case 0x1000: break; case 0x0800: break; case 0x0400: break; case 0x0200: break; case 0x0100: break; case 0x0080: break; case 0x0040: break; case 0x0020: break; case 0x0010: break; case 0x0008: break; case 0x0004: break; case 0x0002: break; case 0x0001: break; } } |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
633 浏览 0 评论
3336 浏览 9 评论
3013 浏览 16 评论
3506 浏览 1 评论
9098 浏览 16 评论
1216浏览 3评论
631浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
619浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2361浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1926浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 13:36 , Processed in 1.093599 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号