#include <intrins.h>
unsigned int dTime[]={
0XFB04,0XFB90,0XFC0C,0XFC44,
0XFCAC,0XFD09,0XFD34,0XFD82,
0XFDC8,0XFE06,0XFE22,0XFE56,
0XFE85,0XFE9A,0XFEC1}
unsigned char happy[]={0X82,0X01,0X81,0X94,0X84,0X0B4,0X0A4,0X04,0X82,0X01,0X81,0X94,0X84,0X0C4,0X0B4,0X04
,0X82,0X01,0X81,0X0F4,0X0D4,0X0B4,0X0A4,0X94,0X0E2,0X01,0X0E1,0X0D4,0X0B4,0X0C4,0X0B4,0X04
,0X82,0X01,0X81,0X94,0X84,0X0B4,0X0A4,0X04,0X82,0X01,0X81,0X94,0X84,0X0C4,0X0B4,0X04
,0X82,0X01,0X81,0X0F4,0X0D4,0X0B4,0X0A4,0X94,0X0E2,0X01,0X0E1,0X0D4,0X0B4,0X0C4,0X0B4,0X04,0X00
}
unsigned char _TH0,_TL0
unsigned char *mus
sbit p10=P1^0
void delay(unsigned char n) //节拍延时
{
unsigned char i=105,j
do {
do {
for (j=0j<80j++) _nop_()//j=(11159KHz/12-10)/4
}while(--i)
}while(--n)
}
void t0() interrupt 1
{
TH0=_TH0
TL0=_TL0
p10=~p10
}
void main()
{
unsigned char yd,jp
int k
TMOD=0X01
ET0=1
EA=1
mus=happy
TR0=1
while(1)
{
while(*mus!=0)
{
jp=(*mus)&0x0f
if((*mus)>>4==0)
delay(jp)
else
{
yd=(*mus)>>4
k=dTime[yd-1]
_TH0=k>>8
_TL0=k&0x00ff
delay(jp)
}
mus++
}
}
mus=happy
}
//上面是生日快乐歌的才c程序!你自己改数组就行了!
//下面是国歌程序
音符 频率 周期(半个) 初值 音符 频率周期(半个)初值 音符 频率周期(半个)初值
------------------------------------------------------------------------------------------------------
低1DO 262 1908 f88c中1DO 523 0956 fc44 高1DO 10460478fe22
#1DO# 277 1805 #1DO# 554 0903 #DO#11090451
低2RE 294 1700 f95c中2RE 578 0842 fcb6 高2RE 11750426fe56
#2RE# 311 1608 #2RE# 622 0804 #2RE# 12450402
低3M 330 1516 fa14中3M 659 0759 fd09 高3M13180372fe8c
低4FA 349 1433 fa67中4FA 698 0716 fd34 高4FA 13970358fe9a
#4FA# 370 1350 #4FA# 740 0676 #4FA# 14800338
低5SO 392 1276 fb04中5SO 784 0638 fd82 高5SO 15680319 fec1
#5SO# 415 1205 #5SO# 831 0602 #5S0# 16610292
低6LA 440 1136 fb90中6LA 880 0568 fdc8 高6LA 17600284 fee4
#6LA# 466 1072 #6LA# 932 0536 #6LA# 18650268
低7SI 494 1012 fc0c中7SI 988 0506 fe06 高7SI 19760253 ff03
------------------------------------------------------------------------------------------------------
yfh equ 30h 音符高位
yfl equ 31h 音符低位
jp equ 32h 节拍
yyd equ 33h
yf equ 34h
org 0000h
ajmp main
--------------定时中断程序
org 000bh
cpl p2.1
mov th0,yfh
mov tl0,yfl
reti
--------------主程序
org 0030h
main: setb p2.1
mov yyd, #00h
mov tmod,#11h
setb ea
setb et0
setb tr1
setb tr0
music:
mov dptr,#table2 取出音符,并存入yf单元
mov a,yyd
movc a,@a+dptr
cjne a,#00h,music1判断音乐是否结束,结束复位
ajmp main
music1:
dec a
rl a
mov yf,a
mov a,yyd指向节拍
inc a
mov yyd,a
mov dptr,#table1 取出音符初值,并存入yfh,yfl单元
mov a,yf
movc a,@a+dptr
mov yfh,a
mov a,yf
inc a
movc a,@a+dptr
mov yfl,a
mov dptr,#table2
mov a,yyd取出音节,并存入jp
movc a,@a+dptr
mov jp,a
mov th0,yfh送入音符初值
mov tl0,yfl
mov a,yyd 指向下一音符
inc a
mov yyd,a
lcall delay
nop
ljmp music
delay:
mov r2,jp
del4: mov r1,#3
del3:
mov th1,#3ch
mov tl1,#0b0h
del1:
jbc tf1,del2 查询定时时间是否到
ajmp del1
del2:
djnz r1,del3
djnz r2,del4
ret
table1:
db 0f8h,8ch,0f9h,5ch,0fah,14h,0fah,67h,0fbh,04h,0fbh,90h,0fch,0ch 音符表
db 0fch,44h,0fch,0b6h,0fdh,09h,0fdh,34h,0fdh,82h,0fdh,0c8h,0feh,06h
db 0feh,22h,0feh,56h,0feh,8ch,0feh,9ah,0feh,0c1h,0feh,0e4h,0ffh,03h
table2: 歌曲---音节表
/*db 01h,04h,02h,04h,03h,04h,04h,04h,05h,04h,06h,04h,07h,04h 歌曲表
db 08h,04h,09h,04h,0ah,04h,0bh,04h,0ch,04h,0dh,04h,0eh,04h
db 0fh,04h,10h,04h,11h,04h,12h,04h,13h,04h,14h,04h,15h,06h
db 00h*/
/*乐曲---心太软
db 0ch,02h,0ch,02h,0ah,02h,0dh,04h,0ch,02h,0ah,06h,0ah,04h,09h,02h,08h,02h,08h,04h,08h,02h
db 0fh,02h,0fh,02h,0fh,02h,0fh,02h,0dh,02h,0ch,04h,0ah,02h,0dh,02h,0ch,06h*/
乐曲---老鼠爱大米
/*db 0ah,02h,09h,01h,08h,01h,08h,04h,0ah,02h,09h,01h,08h,01h,08h,04h,0ah,02h,09h,02h
db 0ah,02h,01h,02h,0ah,02h,0dh,01h,0ch,01h,0ch,04h,0ah,01h,0ch,01h,0dh,02h,0dh,01h,0ch,01h,0ch,02h
db 0dh,01h,0ch,01h,0ch,04h,0ah,01h,09h,01h,08h,02h,09h,02h,09h,01h,0ah,01h,09h,02h,08h,01h,09h,01h,09h,04h */
乐曲---国歌
db 05h,02h,08h,06h,08h,02h,08h,02h,08h,02h,05h,02h,06h,01h,07h,01h,08h,04h,08h,04h
db 0ah,02h,08h,02h,09h,01h,0ah,01h,0ch,04h,0ch,04h,0ah,02h,0ah,01h,08h,02h,0ah,02h
db 0ch,02h,0ah,01h,09h,04h,09h,08h,0dh,04h,0ch,04h,09h,04h,0ah,04h,0ch,02h,0ah,02h
db 0ch,02h,0ah,02h,09h,01h,0ah,01h,08h,04h,0ah,04h,05h,02h,0dh,01h,08h,02h,08h,02h
db 0ah,02h,0ah,01h,0ch,02h,0ch,02h,09h,02h,09h,01h,09h,01h,06h,04h,09h,04h,05h,02h
db 08h,04h,08h,02h,0ah,04h,0ah,02h,0ch,08h,08h,02h,0ah,01h,0ch,02h,0ch,02h,0dh,04h
db 0ch,04h,0ah,02h,08h,01h,0ch,02h,0ch,01h,0ch,01h,0ah,03h,08h,03h,05h,04h,08h,04h
db 0ah,02h,08h,01h,0ch,02h,0ch,01h,0ch,01h,0ah,03h,08h,03h,05h,04h,08h,04h,05h,04h
db 08h,04h,05h,04h,08h,04h,08h,04h
end
不用出钱,你学过vc自己就可以写。1:写几个函数分别显示不同的国旗形态
2:主函数里循环swith时间,比如X.1秒显示第一个函数对应形态,X.3秒对应第二函数对应形态。。。
3:循环调用音频
P.S. 你网上搜下怎么调用事件函数,怎么调用音频,比你花钱快得多