完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
本周学习了关于矩阵键盘的知识,并利用矩阵键盘制作了密码锁。
矩阵键盘利用矩阵式的连接减少了IO口的使用,并用扫描的方式保证每一个按键的响应。 下面是代码 main #include #include "lcd1602.h" #include "delay.h" #include "MatrixKey.h" unsigned char keynum,Password,Count; void main() { LCD_Init(); LCD_ShowString(1,1,"helloworld"); while(1) { keynum=MatrixKey(); if(keynum) { if(NUMBER<=10) { if(Count<4) { Password*=10; Password=KeyNum%10; Count++; } } LCD_ShowNum(2,1,keynum,4); if(KeyNum==11) { if(Password==0619) { LCD_ShowString(1,14,"OK "); Password=0; Count=0; LCD_ShowNum(2,1,keynum,4); } else { LCD_ShowString(1,14,"ERR"); Password=0; Count=0; LCD_ShowNum(2,1,keynum,4); } } if(KeyNum==12) { Password=0; Count=0; LCD_ShowNum(2,1,keynum,4); } } } } MatrixKey.c unsigned char MatrixKey() { unsigned char Keynum=0; P1_0=0xFF; P1_3=0; if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=1;} if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=5;} if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=9;} if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=13;} P1_0=0xFF; P1_2=0; if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=2;} if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=6;} if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=10;} if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=14;} P1_0=0xFF; P1_1=0; if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=3;} if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=7;} if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=11;} if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=15;} P1_0=0xFF; P1_0=0; if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=4;} if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=8;} if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=12;} if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=16;} return(Keynum); } 这个矩阵扫描方式虽然有点繁琐,但是最好理解 .h #ifndef __MATRIXKEY_H__ #define __MATRIXKEY_H__ unsigned char MatrixKey(); #endif |
|
|
|
只有小组成员才能发言,加入小组>>
3263 浏览 9 评论
2944 浏览 16 评论
3443 浏览 1 评论
8955 浏览 16 评论
4036 浏览 18 评论
1079浏览 3评论
559浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
552浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2287浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1848浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:00 , Processed in 1.024151 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号