原案例有一个按键实例,但是打开编译下载后的按键PowerKey没有任何反应,查找资料和在QQ咨询均无果,只能自编按键进行实验。硬件电路设计高电平有效,原理如图30,硬件如照片31。按键响应程序如下:
先定义按键:
#define key0 28
#define key1 27
#define key2 26
#define key3 25
#define key4 24
#define key5 23
loop中的代码:
KeyEvent=digitalRead(key0)|digitalRead(key1)<<1|digitalRead(key2)<<2|digitalRead(key3)<<3|digitalRead(key4)<<4|digitalRead(key5)<<5;
switch(KeyEvent){
case 31:
digitalWrite(led0,HIGH);break;
case 47:
digitalWrite(led0,LOW);break;
case 55:
digitalWrite(led0,HIGH);break;
case 59:
digitalWrite(led0,LOW);break;
case 61:
digitalWrite(led0,HIGH);break;
case 62:
digitalWrite(led0,LOW);break;
}
只是控制led0的亮暗,结果是6个按键,从key0~key5,偶数按下led0灭[高电平],奇数按下led0亮[低电平],按键编程成功,没有照片。下边来做按键播放控制实验。计划实现按键选曲首的功能。
按键的定义不变,key0~key5,6个按键。
在dispMes()函数中增加按键显示数值,KeyEvent显示为0x3F~0x31,默认按键为逻辑1,0b00xxxxxx。x只有1个按下的为0。键盘处理程序为:
KeyEvent=digitalRead(key0)|digitalRead(key1)<<1|digitalRead(key2)<<2|digitalRead(key3)<<3|digitalRead(key4)<<4|digitalRead(key5)<<5;
switch(KeyEvent){
case 31:
if(Audio){
if(Audio.getStatus()==AudioPlay){Audio.stop();}
if(Audio.getStatus()==AudioStop){Audio.playFile("\\1.MP3");dis++;}
}
break;
case 47:
if(Audio){
if(Audio.getStatus()==AudioPlay){Audio.stop();}
if(Audio.getStatus()==AudioStop){Audio.playFile("\\2.MP3");dis++;}
}
break;
case 55:
if(Audio){
if(Audio.getStatus()==AudioPlay){Audio.stop();}
if(Audio.getStatus()==AudioStop){Audio.playFile("\\3.MP3");dis++;}
}
break;
case 59:
if(Audio){
if(Audio.getStatus()==AudioPlay){Audio.stop();}
if(Audio.getStatus()==AudioStop){Audio.playFile("\\4.MP3");dis++;}
}
break;
case 61:
if(Audio){
if(Audio.getStatus()==AudioPlay){Audio.stop();}
if(Audio.getStatus()==AudioStop){Audio.playFile("\\5.MP3");dis++;}
}
break;
case 62:
if(Audio){
if(Audio.getStatus()==AudioPlay){Audio.stop();}
if(Audio.getStatus()==AudioStop){Audio.playFile("\\0.MP3");dis++;}
}
break;
}
这样就实现了6个按键控制6首音乐选播1遍的功能,同时也实现了音乐需要先停止之后再重新启动播放。相对应的录音功能也应该是这样的大致过程可以一试。照片32-1,32-2,32-3是按键改变播放改变照片,对应的视频链接:http://v.youku.com/v_show/id_XMjg2OTMwNjIyOA==.html?spm=a2h3j.8428770.3416059.1
|