完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*
把矩阵键盘的键值以2400bps上传到计算机串口助手 */ #include #define uchar unsigned char #define uint unsigned int /*1毫秒延时函数*/ void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } /* 串口初始化函数 工作模式1 10位异步收发 发送速率2400bps */ void UART_init() { TMOD = 0x20; //T1工作模式2 8位自动重装 TH1 = 0xf4; TL1 = 0xf4; //比特率2400,计算公式256-11059200/2400/32/12 TR1 = 1;//启动T1定时器 SM0 = 0; SM1 = 1; //串口工作方式1 10位异步 //REN = 1;//串口允许接收 } /* 4*4矩阵键盘扫描函数 带返回值,返回键值码 */ uchar KeyScan() { uchar cord_l,cord_h;//声明列线和行线的值的储存变量 P3 = 0xf0;//1111 0000 if( (P3 & 0xf0) != 0xf0)//判断是否有按键按下 { delay(5);//软件消抖 if( (P3 & 0xf0) != 0xf0)//判断是否有按键按下 { cord_l = P3 & 0xf0;// 储存列线值 P3 = cord_l | 0x0f; cord_h = P3 & 0x0f;// 储存行线值 while( (P3 & 0x0f) != 0x0f );//松手检测 return (cord_l + cord_h);//返回键值码 } } } /* 4*4矩阵键盘键值码处理函数 返回转换后的键值码 */ uchar KeyPro() { uchar key_value; //存放转换后的按键值 switch( KeyScan() ) { //第一行键值码 case 0xee: key_value = 0x01;break; case 0xde: key_value = 0x02;break; case 0xbe: key_value = 0x03;break; case 0x7e: key_value = 0x04;break; //第二行键值码 case 0xed: key_value = 0x05;break; case 0xdd: key_value = 0x06;break; case 0xbd: key_value = 0x07;break; case 0x7d: key_value = 0x08;break; //第三行键值码 case 0xeb: key_value = 0x09;break; case 0xdb: key_value = 0x0a;break; case 0xbb: key_value = 0x0b;break; case 0x7b: key_value = 0x0c;break; //第四行键值码 case 0xe7: key_value = 0x0d;break; case 0xd7: key_value = 0x0e;break; case 0xb7: key_value = 0x0f;break; case 0x77: key_value = 0x10;break; } return (key_value);//返回转换后的键值码 } void main() { UART_init();//串口初始化 while(1) { SBUF = KeyPro();//调用带返回值的键值码转换函数,把转换后的键值码送入发送SBUF while(!ti);//检测是否发送完毕 TI = 0;//清楚发送完毕标志位,已便于下次发送 } } 在main函数中,SBUF = KeyPro(); 理论上在没有按下按键时,KeyPro()也会返回key_value,key_value的值应该为0,,如果这样,在while大循环下,没有按下按键的情况下,不是应该源源不断的发送0吗,但实际却没有,为什么呢? |
|
相关推荐
5个回答
|
|
在main函数中,SBUF = KeyPro(); 理论上在没有按下按键时,KeyPro()也会返回key_value,key_value的值应该为0,,如果这样,在while大循环下,没有按下按键的情况下,不是应该源源不断的发送0吗,但实际却没有,为什么呢?
|
|
|
|
然而这么久了还没人回答。。
|
|
|
|
继续人工顶。。
|
|
|
|
看程序,没有键按下时没有返回语句,这种情况下返回值是什么不好说。你跟踪一下看看
|
|
|
|
楼主的问题值得研究。我等有空在我板子上实验看看。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
54 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
395 浏览 0 评论
439 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1265 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
529 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11743 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 12:29 , Processed in 0.638573 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号