完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
朋友给我一个矩阵键盘行列扫描的程序,中间键盘扫描程序是这样的
unsigned char keyscan(void) { unsigned char val; keyport=0xf0; if(keyport!=0xf0) { delay2(10); if(keyport!=0xf0) { keyport=0xfe; if(keyport!=0xfe) { val=keyport&0xf0; val+=0x0e; while(keyport!=0xfe) delay2(10); while(keyport!=0xfe) return val; 请问有谁能帮我详细解读一下这段程序里面各句的意思吗? 我自己看了一上午都没看明白是怎么扫描的。。。。 |
|
相关推荐
8个回答
|
|
这程序不完整吧?!还有你硬件怎么连的?我最近也在学键盘扫描,可以交流下!
|
|
|
|
具体要求是通过矩阵键盘输入 然后在单个共阳数码管上输出,源程序是这样的#include #define dateport P1 #define keyport P3 unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned char keyscan(void); unsigned char keypro(void); void delay1(unsigned char t); void delay2(unsigned char t); void main(void) { while(1) { switch(keypro()) { case 0:P1=table[0];break; case 1:P1=table[1];break; case 2:P1=table[2];break; case 3:P1=table[3];break; case 4:P1=table[4];break; case 5:P1=table[5];break; case 6:P1=table[6];break; case 7:P1=table[7];break; case 8:P1=table[8];break; case 9:P1=table[9];break; case 10:P1=table[10];break; case 11:P1=table[11];break; case 12:P1=table[12];break; case 13:P1=table[13];break; case 14:P1=table[14];break; case 15:P1=table[15];break; default:break; } } } void delay1(unsigned char t) { while(t--); } void delay2(unsigned char t) { while(t--) { delay1(245); delay1(245); } } unsigned char keyscan(void) { unsigned char val; keyport=0xf0; if(keyport!=0xf0) { delay2(10); if(keyport!=0xf0) { keyport=0xfe; if(keyport!=0xfe) { val=keyport&0xf0; val+=0x0e; while(keyport!=0xfe); delay2(10); while(keyport!=0xfe); return val; } keyport=0xfd; if(keyport!=0xfd) { val=keyport&0xf0; val+=0x0d; while(keyport!=0xfd); delay2(10); while(keyport!=0xfd); return val; } keyport=0xfb; if(keyport!=0xfb) { val=keyport&0xf0; val+=0x0b; while(keyport!=0xfb); delay2(10); while(keyport!=0xfb); return val; } keyport=0xf7; if(keyport!=0xf7) { val=keyport&0xf0; val+=0x07; while(keyport!=0xf7) delay2(10); while(keyport!=0xf7) return val; } } } return 0xff; } unsigned char keypro(void) { switch(keyscan()) { case 0x7f:return 0;break; case 0x7d:return 1;break; case 0x7b:return 2;break; case 0x77:return 3;break; case 0xbe:return 4;break; case 0xbd:return 5;break; case 0xbb:return 6;break; case 0xb7:return 7;break; case 0xde:return 8;break; case 0xdd:return 9;break; case 0xdb:return 10;break; case 0xd7:return 11;break; case 0xee:return 12;break; case 0xed:return 13;break; case 0xeb:return 14;break; case 0xe7:return 15;break; default: return 0xff;break; } } 但是我运行之后发现好像有问题,就是有几个键按了之后没反应,但问题具体在哪儿我还没搞明白。一起看看咯 |
|
|
|
是在某个口高四位接行线,低四位接列线么?
|
|
|
|
我试了下,仿真没问题啊!
|
|
|
|
就是把keyport()矩阵输入P3口高四位接行线,低四位接列线啊。没错啊,但是我下载到开发板上最后一列和第一行第一个无法输入。。不知道为什么 |
|
|
|
查连接线是否正确可靠
|
|
|
|
我去了!!
明天来Proteus板块直接提问吧,就怕找不到你的帖子。我一有时间,就帮你弄! Proteus板块支持:51,avr,pic,msp430,lm3s,lpc21。 部分单片机lpc13,68hc,tms320,8086还在研究中! |
|
|
|
你先试试按键按着不放,要是显示的话,那就是你的unsigned char keyscan(void)写错了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
203 浏览 0 评论
761 浏览 0 评论
806 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
743 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1195 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11807 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 20:15 , Processed in 0.732236 second(s), Total 90, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号