完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
正在学习单片机,下面的程序请大神指教一下,程序烧进去以后只有第二个按键有效,其他的都没有反应,感觉程序也没有什么错误啊,请问各位大神问题出在哪里呢?
#include #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define KeyPort P1IN //独立键盘接在P10~P13 #define LED P3OUT //LED灯接在P34、P35上 uchar key; //************************************************************************* // 系统时钟初始化 //************************************************************************* void Clock_Init() { uchar i; BCSCTL1&=~XT2OFF; //打开XT振荡器 BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ do{ IFG1&=~OFIFG; //清除震荡标志 for(i=0;i<100;i++) _NOP(); //延时等待 } while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待 IFG1&=~OFIFG; } //************************************************************************* // MSP430内部看门狗初始化 //************************************************************************* void WDT_Init() { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 } //************************************************************************* // 初始化IO口子程序 //************************************************************************* void Port_init() { P1SEL = 0x00; //P1普通IO功能 P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻 P3SEL = 0x00; //P3口普通IO功能 P3DIR = 0xFF; //P3口输出模式 } //********************************************************************** // 键盘扫描子程序,采用逐键扫描的方式 //********************************************************************** 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: LED=0xEF;break; //给不同的键赋键值,键值1,亮1个LED灯D1 case 2: LED=0xDF;break; //给不同的键赋键值,键值2,亮1个LED灯D2 case 3: LED=0xCF;break; //给不同的键赋键值,键值3,亮2个LED灯D1.D2 case 4: LED=0xFF;break; //给不同的键赋键值,键值4,亮0个LED灯 } } } else { //LED=key; //没有按键的时候显示上次的键值 } } } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
过采样提高12位ADC精度在STM32主控上的实现(附电路及代码)
290 浏览 0 评论
飞凌嵌入式-ELFBOARD 解决PCB布线时无法捕捉到焊盘中心的问题
811 浏览 0 评论
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
1142 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
1195 浏览 0 评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】开发板简介与上电测试
1233 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11082 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-14 14:48 , Processed in 0.639010 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号