欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機按鍵切換下一首歌
[打印本頁]
作者:
會飛的魚1710
時間:
2018-10-13 19:01
標題:
單片機按鍵切換下一首歌
#include "at89x51.h"
#define uchar unsigned char
#define uint unsinged int
sbit speaker=P1^5;//蜂鳴器。按鍵默認的是P3.2腳(外部中斷0)
uchar t0h,t0l,time,flag;
//--------------------------------------
//單片機晶振采用12MHz
// 頻率-半周期數據表 高八位 本軟件共保存了四個八度的28個頻率數據
uchar code FREQH[]={0x01, //0的時候沒有音符
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, //低音1234567
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, //高音 234567
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF}; //超高音 1234567
//-----------------------------------------
// 頻率-半周期數據表 低八位
uchar code FREQL[]={0x01, //0的時候沒有音符
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, //低音1234567
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i
0xEE,0x44,0x6B,0xB4,0xF4,0x2D, //高音 234567
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16}; //超高音 1234567
//--------------------------------------
//一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以1/4拍為單位)。
//6,2,6 分別代表:6,中音,6個1/4拍;
//5,2,2 分別代表:5,中音,2個1/4拍;
//3,2,4 分別代表:3,中音,4個1/4拍;
//5,2,4 分別代表:5,中音,4個1/4拍;
//1,3,4 分別代表:1,高音,4個1/4拍;
//低音為1,中音為2,高音為3,超高音為4;
//////////////////////////////////////////////////////////
/********************世上只有媽媽好*********************/
uchar code sszymmh[]={
6,2,6,5,2,2,3,2,4,5,2,4,
1,3,4,6,2,2,5,2,2,6,2,8,
3,2,4,5,2,2,6,2,2,5,2,4,
3,2,4,1,2,2,6,1,2,5,2,2,
3,2,2,2,2,8,2,2,6,3,2,2,
5,2,4,5,2,2,6,2,2,3,2,4,
2,2,4,1,2,8,5,2,6,3,2,2,
2,2,2,1,2,2,6,1,2,1,2,2,
5,1,16,0,0,0};
/**********************兩只耗子**********************/
uchar code TwoMouse[]={
3,2,2,6,2,2,7,2,2,5,2,2,
3,2,2,6,2,2,7,2,2,5,2,2,
7,2,2,1,3,2,2,3,4,
7,2,2,1,3,2,2,3,4,
2,3,1,3,3,1,2,3,1,1,3,1,7,2,2,5,2,2,
2,3,1,3,3,1,2,3,1,1,3,1,7,2,2,5,2,2,
6,2,2,2,2,2,5,2,4,6,2,2,2,2,2,5,2,4,
0,0,0};
/***********************兩只蝴蝶**********************/
uchar code TwoButterfly[]={
3,2,2,2,2,2,3,2,6,3,2,2,3,2,2,2,2,2,
1,2,6,6,1,2,1,2,2,2,2,4,2,2,2,3,2,2,
2,2,2,1,2,2,6,1,2,1,2,2,5,1,12,3,2,2,
2,2,2,3,2,8,3,2,2,2,2,2,3,2,2,3,2,2,
1,2,12,6,1,2,1,2,2,2,2,4,2,2,2,3,2,2,
2,2,2,1,2,2,6,1,2,1,2,2,2,2,12,3,2,2,
2,2,2,3,2,8,3,2,2,2,2,2,3,2,2,2,2,2,
1,2,12,6,1,2,1,2,2,2,2,4,2,2,2,3,2,2,
2,2,2,1,2,2,6,1,2,1,2,2,5,2,12,3,2,2,
5,2,2,5,2,8,5,2,2,5,2,2,6,2,2,5,2,2,
3,2,12,2,2,2,3,2,2,2,2,4,2,2,2,3,2,2,
2,2,2,1,2,2,6,1,2,6,1,1,1,2,1,1,2,1,
1,2,1,1,2,12,0,0,4,5,2,2,5,2,2,6,2,2,
1,3,2,7,2,2,7,2,2,6,2,2,3,2,2,2,2,2,
2,2,2,3,2,2,3,2,8,3,2,2,3,2,2,
5,2,2,6,2,4,6,2,6,6,1,2,3,2,2,2,2,2,
2,2,12,3,2,2,5,2,2,5,2,2,3,2,2,5,2,4,
1,3,4,7,2,2,6,2,2,7,2,2,3,2,4,
6,2,2,6,2,2,7,2,2,6,2,2,5,2,2,
3,2,2,2,2,4,3,2,2,2,2,2,3,2,2,5,2,6,
5,2,2,5,2,2,6,2,2,6,2,2,5,2,2,
3,2,2,2,2,4,5,1,2,5,1,2,6,1,2,1,2,12,
0,0,0};
/*****************happy birthday***********************/
uchar code Birthday[]={
5,1,2,5,1,2,6,1,4,5,1,4,1,2,4,7,1,8,
5,1,2,5,1,2,6,1,4,5,1,4,2,2,4,1,2,8,
5,1,2,5,1,2,5,2,4,3,2,4,1,2,4,7,1,4,
6,1,4,4,2,2,4,2,2,3,2,4,1,2,4,2,2,4,
1,2,4,0,0,0};
//-----------------------------------------------------
void delay(uchar t) //延時程序,控制發音的時間長度120ms(1/4拍)
{
uchar a,b,c;
while(t--) //四重循環,共延時t個1/4拍
{
for(c=193;c>0;c--)
for(b=114;b>0;b--)
for(a=1;a>0;a--);
}
//延時期間,可進入T0中斷去發音
TR0=0; //關閉T0,停止發音
}
//--------------------------------------
void singachar() //演奏一個音符
{
TR0=0;
TH0=t0h; //控制音調
TL0=t0l;
TR0=1; //啟動T0,由T0輸出方波去發音
delay(time); //控制時間長度即 節拍
}
//--------------------------------------
//**************演奏一首歌***********************************//
void song()
{
uchar k,i,*str;
i=0;
time=1;
while(time)
{
switch(flag)
{
case 1:str=sszymmh;break;
case 2:str=TwoButterfly;break;
case 3:str=Birthday;break;
case 4:str=TwoMouse;break;
}
k=str[i]+7*(str[i+1]);//第i個是音符,第i+1個是第幾個八度
t0h=FREQH[k];//從數據表中讀出頻率數值
t0l=FREQL[k];//實際上,是定時的時間長度
time=str[i+2];//讀出時間長度數值節拍時間
i+=3;
singachar();
}
}
//-----------------------------------------------------
void t0int() interrupt 1 //T0中斷程序,控制發音的音調
{
TR0=0; //先關閉T0
speaker=~speaker; //輸出方波,發音
TH0=t0h; //下次的中斷時間,這個時間,控制音調高低
TL0=t0l;
TR0=1; //啟動T0
}
//-----------------------------------------------------
void int0() interrupt 0 //T0中斷程序,控制發音的音調
{
delay(1);
if(INT0==0)
{
flag++; //先關閉T0
if(flag>=5)
flag=0;
}
while(INT0==0);
}
//--------------------------------------
void main(void)
{
TMOD=0x01; //置T0定時工作方式1
IT0=1;
EX0=1; //外部中斷0
ET0=1; //開T0中斷
EA=1; //開CPU中斷
while(1)
{
song();
delay(2);
/* song(sszymmh);
delay(20);
song(TwoButterfly);
delay(20);
song(Birthday);
delay(20);*/
}
//發出一個音符
}
復制代碼
作者:
快樂眼淚
時間:
2018-10-13 19:31
努力學習!一定要看懂程序!樓主真厲害
作者:
chaopping
時間:
2018-10-14 19:50
說好的按鍵切換歌曲 按鍵呢
作者:
會飛的魚1710
時間:
2018-10-16 20:57
P32呀,INT0默認的
作者:
jll586
時間:
2018-10-16 21:19
有個電路圖就更好了
作者:
會飛的魚1710
時間:
2018-10-26 09:36
jll586 發表于 2018-10-16 21:19
有個電路圖就更好了
就一個按鍵和一個蜂鳴器呀
作者:
zjchen
時間:
2019-3-25 16:31
樓主幸苦了!
作者:
真想當個散人
時間:
2019-3-25 19:51
看著很厲害 還要查樂譜 需要花時間
作者:
whille
時間:
2020-6-22 14:44
chaopping 發表于 2018-10-14 19:50
說好的按鍵切換歌曲 按鍵呢
采用外部中斷的方式切換歌曲,外部中斷就是按鍵
作者:
2847194402
時間:
2020-12-24 16:25
怎么用手機藍牙實現音樂播放啊
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1