标题:
单片机歌曲上一曲下一曲切换问题求助
[打印本页]
作者:
陆小贱
时间:
2017-4-10 16:22
标题:
单片机歌曲上一曲下一曲切换问题求助
各位 我想请教个问题,要实现单片机歌曲的切换如何做,不用外部中断实现能用IF语句实现吗 ?
我直接在主函数下while(1)循环内写IF(!KEY)(相应的歌曲自加或自减)不起作用是为什么
作者:
张恒博
时间:
2019-12-23 11:05
我也在研究这个,应该是没法实现的,因为蜂鸣器响,一定是在一个循环里。
作者:
诸天明月
时间:
2019-12-24 11:15
void PlayMusic(uchar arr[],uint num)
{
uint i=0;
TR1=1;
while(i<num)
{
display(); // 显示当前在播放歌曲
if(gPlayStatus==1) // 判断播放状态是否为播放还是暂停
{
gTone=arr[i]; // 给全局变量gTone赋值,方便中断函数使用
PlayTone(arr[i],arr[i+1]); // 开始演奏一个节拍
i+=2; // 进入下一个节拍,因为每2个数为1组,所以每次要加2
if(i==num) // 判断歌曲是否播放完了
{
gPlayStatus=0; // 播放完了的话,则把播放状态改为暂停,否则会循环播放
TR1=0;
T1_num=0;
fen=0;
miao=0;
gSong++; // 把当前播放到第几首歌的变量gSong加1,即切到下一曲
if(gSong>SONG) // 如果gSong为SONG,说明到后面的尽头了,则转为第一首
gSong=1;
}
}
if(Key1_P==0) // 判断播放过程中是否按下了“开始/暂停”键
{
DelayMs(10); // 消除按键按下的抖动
while(!Key1_P); // 等待按键释放
DelayMs(10); // 消除按键松开的抖动
if(gPlayStatus==1) // 如果是播放状态,则改为暂停状态
{
gPlayStatus=0; //切换成 暂停
TR1=0; //关闭定时器计时
Beep_P=1; //关闭喇叭
}
else // 如果是暂停状态,则改为播放状态
{
gPlayStatus=1; //切换成 播放
TR1=1; //重新打开定时器计时
}
}
if(Key2_P==0) // 判断播放过程中是否按下了“上一曲”键
{
DelayMs(10); // 消除按键按下的抖动
while(!Key2_P); // 等待按键释放
DelayMs(10); // 消除按键松开的抖动
gSong--; // 把当前播放到第几首歌的变量gSong减1,即切到上一曲
if(gSong==0) // 如果gSong为0,说明到前面的尽头了,则转为最后一首
gSong=SONG;
T1_num=0;
fen=0;
miao=0;
break;
}
if(Key3_P==0) // 判断播放过程中是否按下了“下一曲”键
{
DelayMs(10); // 消除按键按下的抖动
while(!Key3_P); // 等待按键释放
DelayMs(10); // 消除按键松开的抖动
gSong++; // 把当前播放到第几首歌的变量gSong加1,即切到下一曲
if(gSong>SONG) // 如果gSong为SONG,说明到后面的尽头了,则转为第一首
gSong=1;
T1_num=0;
fen=0;
miao=0;
break;
}
}
gPlayStatus=1;
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1