完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 playwife_花 于 2015-1-21 09:04 编辑
疑问:把变量 key_check去掉, key_check = KeyPort和 switch (key_check &= 0x0F)中的check改成checkin功能也能实现;;;;;完整代码楼下,求助大神!! |
|
相关推荐
2个回答
|
|
#include
#include "Config.h" uchar key;a //************************************************************************* // 初始化IO口子程序 //************************************************************************* void Port_init() { //用于控制按键 P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻 P6DIR = 0xFF; //P6口输出模式 } //********************************************************************** // 键盘扫描子程序,采用逐键扫描的方式 //********************************************************************** uchar Key_Scan(void) { uchar key_check; uchar key_checkin; key_checkin=KeyPort; //读取IO口状态,判断是否有键按下 key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下 if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下 { delay_ms(20); //键盘消抖,延时20MS key_checkin=KeyPort; if(key_checkin!=0x1F) { key_check = KeyPort; switch (key_check &= 0x0F) { case 0x0E:key=1;break; case 0x0D:key=2;break; case 0x0B:key=3;break; case 0x07:key=4;break; } } } else { key=0xFF; } return key; } void main(void) { WDT_Init(); //看门狗设置 Clock_Init(); //系统时钟设置 Port_init(); //系统初始化,设置IO口属性 delay_ms(100); //延时100ms while(1) { Key_Scan(); //键盘扫描,看是否有按键按下 if(key!=0xff) //如果有按键按下,则显示该按键键值1~4 { { switch(key) { case 1: LED8 = 0xFC;break; //给不同的键赋键值,键值1,亮2个LED灯 case 2: LED8 = 0xF3;break; //给不同的键赋键值,键值2,亮2个LED灯 case 3: LED8 = 0xCF;break; //给不同的键赋键值,键值3,亮2个LED灯 case 4: LED8 = 0x3F;break; //给不同的键赋键值,键值4,亮2个LED灯 } } } else { // LED=key; //没有按键的时候显示上次的键值 } } } 只改变Key_Scan,其他不变; uchar Key_Scan(void) { uchar key_checkin; key_checkin=KeyPort; //读取IO口状态,判断是否有键按下 key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下 if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下 { delay_ms(20); //键盘消抖,延时20MS key_checkin=KeyPort; if(key_checkin!=0x1F) { key_checkin = KeyPort; switch (key_checkin&= 0x0F) { case 0x0E:key=1;break; case 0x0D:key=2;break; case 0x0B:key=3;break; case 0x07:key=4;break; } } } |
|
|
|
终于搞懂了,原来是为了怕弄混淆而设置了两个变量,一个功能是读取IO状态判断是否有按键按下,一个是判断哪个按键按下,心里好明快,结贴
|
|
|
|
只有小组成员才能发言,加入小组>>
3052个成员聚集在这个小组
加入小组2968 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3691 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2366 浏览 1 评论
4830 浏览 1 评论
2592 浏览 1 评论
1374浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3692浏览 2评论
2968浏览 1评论
1570浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 16:08 , Processed in 1.344537 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号