智能车制作
标题:
用按键控制LED灯的程序(有问题)
[打印本页]
作者:
改变ING
时间:
2014-2-25 21:08
标题:
用按键控制LED灯的程序(有问题)
void main(void) {
unsigned char k;
k=0;
DDRH=0x0; //定义H口的数据方向寄存器为输入
PERH_PERH0=1;
PERH_PERH1=1; //上拉电阻使能
if(PTH_PTH0==0) { //PH0为低电平时表示S1被按下
delay(10); //延时10ms //消抖
if(PTH_PTH0==0) {
k=1;
}
}
else if(PTH_PTH1==0) { //PH1为低电平时表示S2被按下
delay(10);
if(PTH_PTH1==0) { //消抖
k=2;
}
}
if(k==1){
PORTB=0xFF; //S1键被按下时LED灯以此种方式亮
} else if(k==2){
PORTB=0x1; //S2键被按下时LED灯以此种方式亮
}
EnableInterrupts;
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
各位高手以上是我自己写得程序(延时程序未加入),目的是读取S1,S2的按键状态,并使LED在不同键按下时能有不同的显示状态,可是下到单片机以后无论怎么按键都没有任何反应。我的单片机型号是mc9s12dg128.请各位帮我看看是什么原因,谢谢!
作者:
改变ING
时间:
2014-2-26 22:06
找到原因了,第一个问题是没有将B口的数据方向寄存器定为输出,第二个问题是这个程序查询函数只能查询一次,因此以后再按键就没有反应了,应该加入循环。
作者:
若要走
时间:
2014-7-11 19:39
作者:
Single_Sunshine
时间:
2015-1-19 20:24
程序不会等着你来按键的
作者:
我快乐
时间:
2015-1-22 10:09
每次按键后要加while(!PTH_PTH)
如: if(PTH_PTH0==0) { //PH0为低电平时表示S1被按下
delay(10); //延时10ms //消抖
if(PTH_PTH0==0) {
k=1;
while(!PTH_PTH0);//等待按键释放
}
}
else if(PTH_PTH1==0) { //PH1为低电平时表示S2被按下
delay(10);
if(PTH_PTH1==0) { //消抖
k=2;
while(!PTH_PTH1);//等待按键释放
}
}
作者:
我快乐
时间:
2015-1-22 10:09
还要放在while大循环里
作者:
WG1314
时间:
2015-6-2 11:25
上楼正解,。几个月前我在参加本校的单片机大赛时碰到的设计LED灯问题时也是没有加while释放语句导致我我和冠军失之交臂。还好团体赛冠军
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2