導航:首頁 > 操作系統 > 單片機音符表

單片機音符表

發布時間:2023-03-19 05:05:19

『壹』 請問單片機音樂樂譜怎麼看

單片機實現音樂的原料很簡單,把樂曲中的符號按次序排成一個表,然後按該表編輯要播放的音樂,再由查表程序依次取出,產生鬧迅音符並控制節奏。
一般來說結束符為棗彎敗ff,體止符為00,
0x是16進制數字表示法前綴
其他字元的意思,你可以查看你彈片凳顫機程序是怎麼定義的就知道了。

『貳』 如何確定單片機音樂播放的音律和節拍計算

你是想用單片機編程,來播放曲子是吧。那往下看:
1.確定每一拍的時間,一般是一分鍾多少拍,確定一拍的時間是多少秒,確定每個音符的音長。
2.每個音符的音高,用十二平均律確定音高就可了。下面是音高與頻率的對應關系。
http://wenku..com/view/e1f7a551f01dc281e53af02a.html
紅色的部分是middle C的頻率。
3.音色選擇,也就是樂器的選擇,這個比較復雜,很難說清楚,如果這方面有問題,可給我發消息。先用c語言的beep函數試著編寫一下。

『叄』 為什麼單片機的樂譜要用十六進制

這個需要自己把樂譜轉換為十六進制數據:

相關知識:
1.要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),然後將此周期除以2,即為半周期的時間。利用定時器計時這個半周期時間,每當計時到後就將輸出脈沖的I/O反相,然後重復計時此半周期時間再對I/O反相,就可在I/O腳上得到此頻率的脈沖。
2.利用8051的內部定時器使其工作在計數器模式MODE1下,改變計數值TH0及TL0以產生不同頻率的方法。
3.例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計數器計時956us/1us=956,在每計數956次時將I/O反相,就可得到中音DO(523Hz)。
計數脈沖值與頻率的關系公式如下:
N=Fi÷2÷FrN:計數值;
Fi:內部計時一次為1us,故其頻率為12MHz;
Fr:要產生的頻率;
4.其計數值的求法如下:
T=65536-N=65536-Fi÷2÷Fr
例如:設K=65536,F=1000000=Fi=1MHz,求低音DO(261MHz)、中音DO(523MHz)、高音DO(1046MHz)的計數值。
T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1047=65059
5.C調各音符頻率與計數值T的對照表如下:
表1C調各音符頻率與計數值T的對照表
音符
低1DO頻率(Hz)簡譜碼(T值)音符頻率(Hz)簡譜碼(T值)
26263628#4FA#74064860
#1DO#27763731中5SO78464898
低2RE
#2RE#29463835#5SO#83164934
31163928中6LA88064968
低3M33064021#693264994
低4FA34964103中7SI98865030
#4FA#37064185高1DO104665058
低5SO39264260#1DO#110965085
#5SO#41564331高2RE117565110
低6LA44064400#2RE#124565134
#646664463高3M131865157
低7SI49464524高4FA139765178
中1DO52364580#4FA#148065198
#1DO#55464633高5SO156865217
中2RE58764684#5SO#166165235
#2RE#62264732高6LA176065252
中3M65964777#6186565268
中4FA69864820高196765283
表2節拍與節拍碼對照
節拍碼節拍數節拍碼節拍數
11/4拍11/8拍
22/4拍21/4拍
33/4拍33/8拍
41拍41/2拍
51又1/4拍55/8拍
61又1/2拍63/4拍
82拍81
A2又1/2拍A1又1/4拍
C3拍C1又1/2拍
F3又3/4拍

表3各調1/4節拍的時間設定各調1/4節拍的時間設定
曲調值DELAY曲調值DELAY
調4/4125毫秒調4/462毫秒
調3/4187毫秒調3/494毫秒
調2/4250毫秒調2/4125毫秒

1/4拍的延遲時間=187毫秒
DELAY:MOVR7,#02
D2:MOVR4,#187別的延遲值,只需修改這兒的值為相應值,即可。
D3:MOVR3,#248
DJNZR3,$
DJNZR4,D3
DJNZR7,D2
DJNZR5,DELAY節拍值放在R5,決定節拍
RET

建立音樂的步驟:
1.先把樂譜的音符找出,然後建立T值表的順序。
2.把T值表建立在TABLE1,構成發音符是計數值放在「TABLE」。
3.簡譜碼(音符)為高位,節拍為(節拍數)為低4位,音符節拍碼放在程序的「TABLE」處。

相關知識:
每一音符使用1個位元組,位元組的高4位代表音符的高低,低4位代表音符的節拍,表2為節拍與節拍碼的對照。如果1拍為0.4秒,1/4拍是0.1秒,只要設定延遲時間就可求得節拍的時間。假使1/4拍為1DELAY,則1拍應為4DELAY,以此類推。所以只要求得1/4拍的DEALY時間,其餘的節拍就是它的倍數,如表3為1/4和1/8節拍的時間設定。
簡譜發音簡譜碼T值
5低音SO164260
6低音LA264400
7低音TI364524
1中音DO464580
2中音RE564684
3中音MI364777
4中音FA764820
5中音SO864898
6中音LA964968
7中音TIA65030
1高音DOB65058
2高音REC65110
3高音MID65157
4高音FAE65178
5高音SOF65217
不發音0
節拍碼節拍數
11/4拍
22/4拍
33/4拍
41拍
51又1/4拍
61又1/2拍
82拍
A2又1/2拍
C3拍
F3又3/4拍
表4簡譜對應的簡譜碼、T值、節拍數

#include"reg51.h"
#defineuintunsignedint
#defineucharunsignedchar
uchar*TABLE;
codeuintTABLE1[15]={64260,64400,64524,64580,<br>64684,64777,64820,64898,<br>64968,65030,65058,65110,<br>65157,65178,65217};
codeucharSONG[]={
//1.遲來的愛
//0
0x08,0x08,
//1
0x02,0x12,0x42,0x62,0x52,0x42,0x21,11,
0x18,0x18,
0x02,0x22,0x42,0x82,0x92,0x82,0x61,0x51,0x42,
0x58,0x58,
//2
0x66,0x51,0x61,0x84,0x62,0x82,
0x52,0x62,0x42,0x52,0x28,
0x52,0x42,0x52,0x62,0x94,0x81,0x91,0x81,0x61,
0x1C,0x12,0x82,
//3
0x68,0x02,0x92,0x82,0x42,
0x5C,0x12,0x62,
0x58,0x02,0x42,0x51,0x41,0x22,
0x4C,0x62,0x52,
//4
0x66,0x82,0x92,0x82,0x61,0x51,0x41,0x51,
0x6C,0x52,0x62,
0x53,0x63,0x52,0x42,0x42,0x22,
0x1C,0x12,0x22,
//5
0x42,0x44,0x51,0x61,0x82,0x84,0x61,0x81,
0x96,0x82,0x66,0x51,0x61,
0x56,0x42,0x22,0x42,0x82,0x62,
0x5C,0x62,0x52,
//6
0x66,0x82,0x92,0x82,0x61,0x51,0x41,0x51,
0x6C,0x52,0x62,
0x56,0x62,0x52,0x42,0x42,0x22,
0x1C,0x12,0x22,
//7
0x42,0x44,0x51,0x61,0x82,0x84,0x61,0x81,
0x96,0x82,0x66,0x51,0x61,
0x56,0x62,0x92,0x82,0x62,0x52,
0x4C,0x62,0x61,0x81,
//8
0x9C,0x81,0x91,0x81,0x61,
0x6C,0x82,0x62,
0x56,0x42,0x24,0x42,0x52,
0x6C,0x62,0x61,0x81,
//9
0x9C,0xB2,0x92,
0x8C,0x82,0x92,
0xB2,0xB2,0xB2,0x92,0xD4,0xC1,0xD1,0xC1,0xB1,
0xCC,0xB2,0xB1,0xC1,
//A
0xDC,0xD2,0xC1,0xB1,
0x9C,0x92,0x91,0xC1,
0x92,0x84,0x92,0x82,0x62,0x51,0x61,0x51,0x41,
0x48,0x48,
//B
0x42,0x41,0x51,0x66,0x82,0x91,0xB1,
0x92,0x86,0x88,
0x42,0x41,0x51,0x66,0x42,0x41,0x51,
0x22,0x16,0x18,
0x86,0x62,0x58,
//C
0x83,0x91,0x62,0x82,0x58,
0x52,0x62,0x52,0x42,0x22,0x12,0x62,0x52,
0x4C,0x62,0x52,
//6
0x66,0x82,0x92,0x82,0x61,0x51,0x41,0x51,
0x6C,0x52,0x62,
0x56,0x62,0x52,0x42,0x42,0x22,
0x1C,0x12,0x22,
//7
0x42,0x44,0x51,0x61,0x82,0x84,0x61,0x81,
0x96,0x82,0x66,0x51,0x61,
0x56,0x62,0x92,0x82,0x62,0x52,
0x4C,0x62,0x61,0x81,
//8
0x9C,0x81,0x91,0x81,0x61,
0x6C,0x82,0x62,
0x56,0x42,0x24,0x42,0x52,
0x6C,0x62,0x61,0x81,
//9
0x9C,0xB2,0x92,
0x8C,0x82,0x92,
0xB2,0xB2,0xB2,0x92,0xD4,0xC1,0xD1,0xC1,0xB1,
0xCC,0xB2,0xB1,0xC1,
//A
0xDC,0xD2,0xC1,0xB1,
0x9C,0x92,0x91,0xC1,
0x92,0x84,0x92,0x82,0x62,0x51,0x61,0x51,0x41,
0x4C,0x62,0x61,0x81,
//8
0x9C,0x81,0x91,0x81,0x61,
0x6C,0x82,0x62,
0x56,0x42,0x24,0x42,0x52,
0x6C,0x62,0x61,0x81,
//9
0x9C,0xB2,0x92,
0x8C,0x82,0x92,
0xB2,0xB2,0xB2,0x92,0xD4,0xC1,0xD1,0xC1,0xB1,
0xCC,0xB2,0xB1,0xC1,
//A
0xDC,0xD2,0xC1,0xB1,
0x9C,0x92,0x91,0xC1,
0x92,0x84,0x92,0x82,0x62,0x51,0x61,0x51,0x41,
0x4C,0x62,0x61,0x81,
//D
0x66,0x51,0x61,0x86,0x61,0x81,
0x52,0x62,0x52,0x42,0x28,
0x82,0x91,0x01,0x62,0x11,0x52,0x11,0x01,0x62,0x54,
0x48,0x48,0x00};

ucharljsz;
ucharjpm;
ucharyfm;
uchart0=0;
uinti=0;
sbitSpeaker=P1^0;
uintk;
voidDelay1()
{
for(k=0;k<20000;k++);
}
voidLignt()
{uchart;<br>for(t=0;t<10;t++)<br>{<br>P2=0xff;<br>Delay1();<br>P2=0x00;<br>Delay1();<br>}
}
voidLignt1()
{
P2=0xaa;
Delay1();
P2=0x55;
Delay1();
}
voidDelay(uchart0)//延時
{
while(t0--)//決定節拍
Lignt1();
}
voidDelay2(ucharw0)//延時
{
while(w0--)//決定節拍
Lignt();
}
voidT0Int()interrupt1//TIMER0
{
TL0=ljsz;
TH0=hjsz;
Speaker=!Speaker;
}
voidExtInt0()interrupt0//INT0
{
if(t0>10)
t0=0;
i=0;
switch(t0++)
{
case0:TABLE=SONG;break;//選擇第1首
case1:TABLE=SONG1;break;//選擇第2首
case2:TABLE=SONG2;break;//選擇第3首
case3:TABLE=SONG3;break;//選擇第4首
case4:TABLE=SONG4;break;//選擇第5首
case5:TABLE=SONG5;break;//選擇第6首
case6:TABLE=SONG6;break;//選擇第7首
case7:TABLE=SONG7;break;//選擇第8首
case8:TABLE=SONG8;break;//選擇第9首
case9:TABLE=SONG9;break;//選擇第10首
}
}
voidsongsing()//發音程序
{
i=0;
while(TABLE[i])
{
jpm=TABLE[i]&0x0f;//節拍值
yfm=(TABLE[i]>>0x04)&0x0f;//簡譜值
if(yfm)//簡譜為1,取計數值
{
yfm=yfm-1;
hjsz=(uchar)(TABLE1[yfm]>>0x08);//取計數值高位元組
TH0=hjsz;
ljsz=(uchar)(TABLE1[yfm]);//取計數值低位元組
TL0=ljsz;
TR0=1;//啟動TIMER0
}
elseTR0=0;//簡譜為0,不發音
Delay(jpm);//節拍延時
i++;
}
}
voidmain(void)
{
TMOD=0X01;//設TIMER0在MODE1
TCON=0X01;//外部中斷INT0,下降沿觸發
IE=0x83;//開中斷(INT0,TIMER0)
IP=0x00;//設置中斷優先順序
TABLE=SONG0;
while(1)
{
Lignt();
songsing();//調用發音程序
TR0=0;//停止TIMER0
Delay2(1);
TABLE=SONG0;
songsing();
}
}

『肆』 單片機蜂鳴器波放音樂怎樣區分樂譜有幾個半拍

/*【音符頻率對應表 】

音符 頻率/HZ 半周期/us(N)
--------------------------------
低1DO 262 1908 #1DO# 277 1805
低2RE 294 1700 #2RE# 311 1608
低3MI 330 1516 #3MI# 340 1470
低4FA 349 1433 #4FA# 370 1350
低5SO 392 1276 #5SO# 415 1205
低6LA 440 1136 #6LA# 466 1072
低7SI 494 1012 #7SI# 524 0954

中1DO 523 0956 #1DO# 554 0903
中2RE 578 0842 #2RE# 622 0804
中3MI 659 0759 #3MI# 682 0733
中4FA 698 0716 #4FA# 740 0676
中5SO 784 0638 #5SO# 831 0602
中6LA 880 0568 #6LA# 932 0536
中7SI 988 0506 #7SI# 1046 478

高1DO 1046 478 #1DO# 1109 451
高2RE 1175 426 #2RE# 1245 402
高3MI 1318 372 #3MI# 1356 368
高4FA 1397 358 #4FA# 1480 338
高5SO 1568 319 #5S0# 1661 292
高6LA 1760 284 #6LA# 1865 268
高7SI 1976 253 #7SI# 2066 242
---------------------------------
("#"表示半音,用於上升半個音) */

/*------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#define uint unsigned int
#define uchar unsigned char
sbit SPK=P1^2; //定義喇叭埠
unsigned int i; //定義全局變數
uchar table[14]={ //中音音階對應定時器初值
0xfc,0x44, //1
0xfc,0xb6, //2
0xfd,0x09, //3
0xfd,0x34, //4
0xfd,0x82, //5
0xfd,0xc8, //6
0xfe,0x06 //7
};
/******************************************************************/
/* 延時函數聲明 */
/******************************************************************/
void delayms(unsigned int xms) //毫秒延時
{
uint i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}

void init() //定時器初始化函數
{
TMOD|=0x01; // 定時器工作方式,定時器0作定時用
TH0=table[0]; //定時器賦音階1對應初值,高位0xfc,低位0x44
TL0=table[1];
ET0=1; // 定時器0允許
EA=1; //開總中斷

}
/******************************************************************/
/* 主函數 */
/******************************************************************/
main()
{

init(); //定時器初始化
while(1)
{

for(i=0;i<7;i++) //循環播放7個音階
{
TR0=1; //打開定時器0,開始計時,產生喇叭驅動頻率
delayms(500); //每個音階大致持續播放時間
TR0=0; //停止計時
delayms(1000); //喇叭停止工作,約1s間歇的時間,可更改
}
}

}

void timer0() interrupt 1 //定時器中斷函數
{

TH0=table[i*2]; //音階1234567對應定時器初值高位數值,
//table[i*2]代表table[]數組裡面的第0 2 4 6 8 10 12 14個數值

TL0=table[i*2+1]; //table[i*2+1]代表table[]數組裡面的第1 3 5 7 9 11 13 15個數值
SPK=~SPK; //定時時間到,喇叭電平取反,實現頻率驅動
}

『伍』 51單片機音符頻率表是怎麼算出來的

頻率棗陸是12MHz,也就是凳岩頃說1秒有12*10^6個周期(時鍾周期)
1/12000000秒計棗陸數一次。。

『陸』 單片機蜂鳴器怎麼發出7階音符

蜂鳴器有兩種,一種是有源的,加上5V電壓就響的,頻率是固定的。常用來報警的。

另一種是無源的,需要加音頻信號才響的,就像小喇叭。

蜂鳴器要發出7階音符,必須用無源的蜂鳴器,這樣,由單片機產生7階音符的信號,最好再放大後加到蜂鳴器上。單片機用定時器控制控制輸出一定頻率的信號,是最簡單的應用了。

音階與頻率對應關系表如下

『柒』 51單片機寫音樂的一個程序,求詳解,以下是程序。

SONG_TONE[i]/3
產生一個短延時,延時的時間正好是音符的頻率

延時時間越短產生的頻率就越高,發出的聲音也越高

SONG_LONG[i]*20
是用於音符的持續時間。

就相當於長按跟短按一個按鍵一樣

『捌』 單片機 音樂程序編寫 歌曲《小星星》

只有音樂發聲匯編程序,沒有加入LED燈,供參考。數據代碼已改為小星星發聲
;**********************************************
ORG
0000H
SJMP
MAIN
ORG
0BH
AJMP
TIME0
;*************主程序************************
MAIN:
MOV
SP,#60
MOV
TMOD,#01H
;T0定時工作方式
MOV
IE,#82H
;CPU
中斷允許,T0中斷允許
START0:
MOV
30H,#00H
;TABLE
相對地址指針
NEXT:
MOV
A,30H

MOV
DPTR,#TABLE
;到TABLE處取
簡譜碼
節拍

MOVC
A,@A+DPTR
MOV
R2,A
;取到的簡譜碼
節拍碼
暫存於R2中
JZ
ENDF
;取到
00
結束
ANL
A,#0FH
;否,取低四位
節拍

MOV
R5,A
;將節拍碼存於R5中
MOV
A,R2
;簡譜碼
節拍

給A
SWAP
A
;高4位

低4位
交換
ANL
A,#0FH
;取簡譜

JNZ
SING
;取到的簡譜
碼不是0,則去發聲
CLR
TR0
;取到0
則不發聲
SJMP
DLY1
;節拍延時子程序(
隨節拍碼變化,延時時間不同)
;---------------發聲-----------------------
SING:
DEC
A
;取到的簡譜碼減1
;(簡譜碼計數值16位數據存儲首地址從TABLE1
《相對地址》0處開始放起,所以要減1)
MOV
22H,A
;存入(22H)中
RL
A
;乘2
因為取的數據占兩位元組(16位)
;所以指針增加量要乘2
MOV
DPTR,#TABLE1
;...........簡譜碼轉換為相應定時器16位計數值.............
MOVC
A,@A+DPTR
;到TABLE1取相應的高位元組計數值
MOV
TH0,A
;高位元組計數值存入TH0和(21H)中
MOV
21H,A
MOV
A,22H
;減1的簡譜碼給A
RL
A
;乘2
因為取的數據占兩位元組(16位)
;所以指針增加量要乘2
INC
A
;A
增加
取下一個位元組計數值
;...........簡譜碼轉換為相應定時器16位計數值.............
MOVC
A,@A+DPTR
;到TABLE1取相應的低位元組計數值
MOV
TL0,A
;低位元組計數值存入TL0和(20H)中
MOV
20H,A
SETB
TR0
;啟動T0定時器讓喇叭發出不同頻率聲音
;---------------節拍延時-------------------
DLY1:
ACALL
DELAY
;基本單位時間為1/4拍
187ms
INC
30H
;取下一個簡譜碼
節拍

SJMP
NEXT
;---------------歌放完結束---------------
ENDF:
CLR
TR0
;關閉T0定時器
AJMP
START0
;反復循環
;****T0中斷子程序(用來驅動喇叭發出不同頻率聲音)**************
TIME0:
PUSH
ACC
PUSH
PSW
MOV
TL0,20H
;重裝計數值
MOV
TH0,21H
CPL
P3.7
;驅動發聲
POP
PSW
POP
ACC
RETI
;******************節拍延時187ms****************************
DELAY:
MOV
R7,#187
;187ms延時子程序
DLY2:
MOV
R4,#02
DLY3:
MOV
R3,#248
DJNZ
R3,$
DJNZ
R4,DLY3
DJNZ
R7,DLY2
DJNZ
R5,DELAY
RET
;*******音符T值表(用來讓定時器發出不同的頻率)**DW
表示一個
計數值
占兩個位元組存儲單元***************
TABLE1:
DW
64260,64400,64524,64580,64684
;低音SO
低音LA
低音SI
/中音DO
中音RE
DW
64777,64820,64898,64968,65030
;中音MI
中音FA
中音SO
中音LA
中音SI
DW
65058,65110,65157,65178,65217
;高音DO
高音RE
高音MI
高音FA
高音SO
;*********簡譜碼
節拍碼(高4位簡譜碼
,低4位節拍碼)*************
TABLE:
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h

;
6
6
5
-
DB
74H,74H,63H,63H;
4
4
3
3
DB
52H,52H,48h
;
2
2
1-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h;
3
3
2-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h
;
3
3
2-
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h;
6
6
5
-


DB
74H,74H,63H,63H;
4
4
3
3
DB
52H,52H,48h;
2
2
1-
END
加入了LED燈,水平有限,效果有點不太好
;**********************************************
ORG
0000H
SJMP
MAIN
ORG
0BH
AJMP
TIME0
;*************主程序************************
MAIN:
MOV
SP,#60
MOV
TMOD,#01H
;TO定時工作方式
MOV
IE,#82H
;CPU
中斷允許,TO中斷允許
START0:
MOV
30H,#00H
;TABLE
相對地址指針
NEXT:
MOV
A,30H

MOV
DPTR,#TABLE
;到TABLE處取
簡譜碼
節拍

MOVC
A,@A+DPTR
MOV
R2,A
;取到的簡譜碼
節拍碼
暫存於R2中
JZ
ENDF
;取到
00
結束
ANL
A,#0FH
;否,取低四位
節拍

MOV
R5,A
;將節拍碼存於R5中
MOV
A,R2
;簡譜碼
節拍

給A
SWAP
A
;高4位

低4位
交換
ANL
A,#0FH
;取簡譜

JNZ
SING
;取到的簡譜
碼不是0,則去發聲
CLR
TR0
;取到0
則不發聲
SJMP
DLY1
;節拍延時子程序(
隨節拍碼變化,延時時間不同)
;---------------發聲-----------------------
SING:
DEC
A
;取到的簡譜碼減1
;(簡譜碼計數值16位數據存儲首地址從TABLE1
《相對地址》0處開始放起,所以要減1)
MOV
22H,A
;存入(22H)中
RL
A
;乘2
因為取的數據占兩位元組(16位)
;所以指針增加量要乘2
MOV
DPTR,#TABLE1
;...........簡譜碼轉換為相應定時器16位計數值.............
MOVC
A,@A+DPTR
;到TABLE1取相應的高位元組計數值
MOV
TH0,A
;高位元組計數值存入TH0和(21H)中
MOV
21H,A
MOV
A,22H
;減1的簡譜碼給A
RL
A
;乘2
因為取的數據占兩位元組(16位)
;所以指針增加量要乘2
INC
A
;A
增加
取下一個位元組計數值
;...........簡譜碼轉換為相應定時器16位計數值.............
MOVC
A,@A+DPTR
;到TABLE1取相應的低位元組計數值
MOV
TL0,A
;低位元組計數值存入TL0和(20H)中
MOV
20H,A
SETB
TR0
;啟動T0定時器讓喇叭發出不同頻率聲音
;---------------節拍延時-------------------
DLY1:
ACALL
DELAY
;基本單位時間為1/4拍
187ms
INC
30H
;取下一個簡譜碼
節拍

CPL
P1.0
LED燈
閃爍
CPL
P1.1

CPL
P1.2
CPL
P1.3
CPL
P1.4
CPL
P1.5
CPL
P1.6
CPL
P1.7
SJMP
NEXT
;---------------歌放完結束---------------
ENDF:
CLR
TR0
;關閉T0定時器
AJMP
START0
;反復循環
;****T0中斷子程序(用來驅動喇叭發出不同頻率聲音)**************
TIME0:
PUSH
ACC
PUSH
PSW
MOV
TL0,20H
;重裝計數值
MOV
TH0,21H
CPL
P3.7
;驅動發聲
POP
PSW
POP
ACC
RETI
;******************節拍延時187ms****************************
DELAY:
MOV
R7,#187
;187ms延時子程序
DLY2:
MOV
R4,#02
DLY3:
MOV
R3,#248
DJNZ
R3,$
DJNZ
R4,DLY3
DJNZ
R7,DLY2
DJNZ
R5,DELAY
RET
;*******音符T值表(用來讓定時器發出不同的頻率)**DW
表示一個
計數值
占兩個位元組存儲單元***************
TABLE1:
DW
64260,64400,64524,64580,64684
;低音SO
低音LA
低音SI
/中音DO
中音RE
DW
64777,64820,64898,64968,65030
;中音MI
中音FA
中音SO
中音LA
中音SI
DW
65058,65110,65157,65178,65217
;高音DO
高音RE
高音MI
高音FA
高音SO
;*********簡譜碼
節拍碼(高位簡譜碼
,低位節拍碼)*************
TABLE:
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h
;
6
6
5
--表示有節拍
DB
74H,74H,63H,63H
;
4
4
3
3
DB
52H,52H,48h
;
2
2
1-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h
;
3
3
2-
DB
84H,84H,74H,74H
;
5
5
4
4
DB
64H,64H,58h
;
3
3
2-
DB
44H,44H,84H,84H

;
1
1
5
5
DB
094H,094H,88h
;
6
6
5
-


DB
74H,74H,63H,63H
;
4
4
3
3
DB
52H,52H,48h
;
2
2
1-
END

閱讀全文

與單片機音符表相關的資料

熱點內容
文件夾圖標如何改成公會logo 瀏覽:973
怎樣創建job文件夾 瀏覽:831
介紹單片機外設的書籍推薦 瀏覽:56
通達信雙柱擒牛指標源碼 瀏覽:467
內存太大解壓失敗怎麼辦 瀏覽:441
linuxmakefile解析 瀏覽:777
單片機原理與應用李林功 瀏覽:39
pythonorm框架有哪些 瀏覽:431
indesign轉pdf 瀏覽:483
javaweb找源碼 瀏覽:26
浪潮物理伺服器如何重啟 瀏覽:602
aes加密性能下降 瀏覽:449
linux驅動結構 瀏覽:868
psv安裝壓縮包 瀏覽:613
錦州聯通DNS伺服器地址 瀏覽:115
伺服器佔用太多的網路怎麼辦 瀏覽:936
設置ftp共享文件夾win10 瀏覽:794
伺服器和主機是什麼意思 瀏覽:639
自製透明收納文件夾 瀏覽:165
testflight怎麼下載安卓軟體 瀏覽:181