欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)按鍵控制蜂鳴器演奏音樂
[打印本頁]
作者:
R0514
時間:
2016-11-20 21:03
標(biāo)題:
單片機(jī)按鍵控制蜂鳴器演奏音樂
按鍵控制蜂鳴器演奏音樂
0.png
(9.01 KB, 下載次數(shù): 80)
下載附件
2016-12-5 03:39 上傳
下載:
單片機(jī)演奏音樂.rar
(44.26 KB, 下載次數(shù): 94)
2016-11-20 21:02 上傳
點(diǎn)擊文件名下載附件
音樂
下載積分: 黑幣 -5
#include<reg52.h>
sbit spek=P3^7; //聲音輸出端
sbit set=P3^2; //設(shè)定及退出鍵,按奇數(shù)次為設(shè)定功能;偶數(shù)次為退出功能
sbit up=P3^1; //上一曲
sbit down=P3^0; //下一曲
bit flag1,flag2; //按鍵掃描標(biāo)志位,新鍵值標(biāo)志位
unsigned char f_t,n,i,key,k_max; //音符頻率對應(yīng)的二分之一周期值,節(jié)拍常數(shù)值,查表用計數(shù)器,鍵值,最大鍵值
unsigned char *p_music; //指向音樂數(shù)據(jù)數(shù)組的指針
void timer_ms(unsigned char tim); //毫秒級延時函數(shù)聲明
void timer_us(unsigned char t); //微秒級延時函數(shù)
void key_scan(void); //按鍵掃描函數(shù)
void key_manage(); //鍵值處理函數(shù)
//格式為:頻率常數(shù),節(jié)拍常數(shù),頻率常數(shù),節(jié)拍常數(shù)
unsigned char code music_table1[]={
0x18,0x30,0x1c,0x10,0x20,0x40,0x1c,0x10,0x18,
0x10,0x20,0x10,0x1c,0x10,0x18,0x40,0x1c,0x20,
0x20,0x20,0x1c,0x20,0x18,0x20,0x20,0x80,0xff,
0x20,0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,
0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2b,0x20,
0x26,0x20,0x20,0x20,0x30,0x80,0xff,0x20,0x20,
0x1c,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2b,
0x20,0x30,0x20,0x2b,0x40,0x20,0x20,0x1c,0x10,
0x18,0x10,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,
0x20,0x2b,0x40,0x20,0x30,0x1c,0x10,0x18,0x20,
0x15,0x20,0x1c,0x20,0x20,0x20,0x26,0x40,0x20,
0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x30,0x80,
0x20,0x30,0x1c,0x10,0x20,0x10,0x1c,0x10,0x20,
0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,
0x20,0x15,0x1f,0x05,0x20,0x10,0x1c,0x10,0x20,
0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,
0x20,0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,
0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2b,0x20,
0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1c,
0x10,0x18,0x40,0x1c,0x20,0x20,0x20,0x26,0x40,
0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,
0x80,0x00}; //八月桂花香
unsigned char code music_table2[]={
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,
0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,
0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,
0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,
0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,
0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,
0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,
0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,
0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,
0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,
0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,
0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,
0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,
0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,
0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,
0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,
0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,
0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,
0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,
0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,
0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,
0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,
0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,
0x00}; //祝你平安
unsigned char code music_table3[]={
0x20,40,0x26,20,0x20,20,0x17,80,0x1c,40,0x17,40,
0x20,80,0x20, 40,0x2f,20,0x2a,20,0x26,40,0x2a,20,
0x2f,20,0x2a,80,0xff,0x20,40,0x26,20,0x20,20,0x17,60,
0x19,20, 0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,
0x26,20,0x24,60,0x32,20,0x2f,80,0xff,0x1c,40,0x17,40,
0x17, 80,0x19,40,0x1c,20,0x19,20,0x17,80,0x1c,20,
0x19,20,0x17,20,0x1c,20,0x1c,20,0x20,20,0x26,20,0x2f,20,
0x2a,80,0xff,0x20,40,0x26,20,0x20,20,0x17,60,0x19,20,
0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26, 20,
0x24,60,0x32,20,0x2f,80,0xff,0x20,40,0x26,20,0x20,20,
0x17,80,0x1c,40,0x17,40,0x20,80,0x20,40, 0x2f,20,0x2a,20,
0x26,40,0x2a,20,0x2f,20,0x2a,80,0xff,0x20,40,0x26,20,
0x20,20,0x17,60,0x19,20,0x1c, 40,0x17,40,0x20,80,0x20,40,
0x2a,20,0x26,20,0x24,60,0x32,20,0x2f,80,0}; //送別
main()
{
spek=0;
P3=0x7f;
TMOD=0x01; //T0工作于方式1,即16位定時器模式
IE=0x82; //開總中斷,T0中斷
flag2=0; //
flag1=0;
key=1;
k_max=3; //最大鍵值(取值范圍1~254)
n=0;
i=0;
p_music=music_table1; //指針賦初值
while (1)
{
switch (p_music[i])
{
case 0x00: i=0; //歌曲完,則停止0.5S后重新開始
timer_ms(250); //延時0.25ms
timer_ms(250);
break;
case 0xff: i++; //遇到休止符則停止100us
timer_ms(250);
timer_ms(250);
break;
default: f_t=p_music[i++];
n=p_music[i++];
spek=1;
TR0=1;
while (n!=0)
{
spek=~spek;
timer_us(4*f_t); //改變f_t前面的系數(shù)可以調(diào)整音符頻率的高低
}
TR0=0;
spek=0;
if(set==0)
{
key_scan();
key_manage();
}
}
}
}
/**************************************************************
函數(shù)名稱: 定時器0的中斷處理程序 函數(shù)功能: 完成10毫秒定時 入口參數(shù):
出口參數(shù): 其 它: **************************************************************/
void timer0() interrupt 1 using 2
{
TH0=(65536-10000)/256; //定時10毫秒
TL0=(65536-10000)%256;
n--; }
/**************************************************************
函數(shù)名稱: 延時程序 函數(shù)功能: 完成微秒級的延時 入口參數(shù):
t為需延時的時間(取值范圍1~255;延時時間5~1275us) 出口參數(shù):
其 它: **************************************************************/
void timer_us(unsigned char t)
{
while (--t); //本語句執(zhí)行一次需5us的時間
}
/**************************************************************
函數(shù)名稱: 按鍵掃描函數(shù) 函數(shù)功能: 完成按鍵掃描處理 入口參數(shù):
應(yīng)為在中斷函數(shù)中被調(diào)用,所以不能有參數(shù)傳遞 出口參數(shù): 其 它:
**************************************************************/
void key_scan(void)
{
timer_ms(10); //延時10ms等待按鍵狀態(tài)穩(wěn)定
if (set==0) //再次確認(rèn)
{
while (set==0); //等待按鍵松開
flag1=1; //該位為1,表示進(jìn)入按鍵掃描處理;為0,表示本次按鍵掃描處理完成
while (flag1)
{
if (up==0) //加一鍵
{
timer_ms(10);
if (up==0)
{
while (!up);
key++;
if (key>k_max) key=1;
}
}
if (down==0) //減一鍵
{
timer_ms(10);
if (down==0)
{
while (!down);
key--;
if (key<1) key=k_max;
}
}
if (set==0) //退出鍵
{
timer_ms(10);
if (set==0)
{
while (set==0);
flag1=0; //表示本次按鍵掃描處理完成
flag2=1; //該位置1,表示有新鍵值要處理
}
}//以上鍵值處理的范圍為1到254個鍵值
}
}
}
/**************************************************************
函數(shù)名稱: 鍵值處理函數(shù) 函數(shù)功能: 完成按鍵鍵值的處理
入口參數(shù): 應(yīng)為在中斷函數(shù)中被調(diào)用,所以不能有參數(shù)傳遞
出口參數(shù): 其 它:
**************************************************************/
void key_manage()
{
flag2=0;
switch (key)
{
case 1: p_music=music_table1; //鍵值為1 播放第一首樂曲
goto kh1;
case 2: p_music=&music_table2[0]; //鍵值為2 播放第2首樂曲
goto kh1;
case 3: p_music=&music_table3[0]; //鍵值為3 播放第3首樂曲
goto kh1;
default: key=1;
p_music=music_table1;
kh1: TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
break;
}
n=0;
i=0;
}
/*----------------------------------------------------------------------------------------------------
函數(shù)名稱: timer_ms 函數(shù)說明: 1ms延時子程序 入口參數(shù): tim為接收主調(diào)傳來需延時的毫秒數(shù),取值范圍1~256,定時時間1~256ms
出口參數(shù): 其 它: ----------------------------------------------------------------------------------------------------*/
void timer_ms(unsigned char tim)
{
unsigned char j;
while(tim--)
{
for(j=0;j<200;j++); //延時1ms
}
}
復(fù)制代碼
作者:
liyanchao153
時間:
2016-11-20 22:25
不錯。。。。。。。。。。。。。。
作者:
nswy123
時間:
2017-4-18 18:02
按鍵不管用啊
作者:
北辰
時間:
2017-4-19 20:22
按鍵怎么接啊
作者:
GUOPK
時間:
2017-4-19 20:26
請問是接有源蜂鳴器還是嗽叭?
作者:
double-naze
時間:
2017-5-25 11:30
按鍵怎么不管用啊
作者:
雨軒wyx
時間:
2017-7-25 10:23
不錯,學(xué)習(xí)學(xué)習(xí)
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1