
单片机音乐程序怎么编?
老师要我们用单片机编一个音乐程序,但我不知从何下手,请哪位大虾帮帮忙,最好还告诉我编写的思路!多谢!!//这里定义的是数码管对应的字符字根codeuchardisbuf_...
老师要我们用单片机编一个音乐程序,但我不知从何下手,请哪位大虾帮帮忙,最好还告诉我编写的思路!多谢!!
// 这里定义的是数码管对应的字符字根
code uchar disbuf_u[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
// 这里定义音乐音符表
code uchar musictabl[]={0xf0,0xf0,
0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x0c,0xfb,0x03,0xfb,0x8f,0xfc,0x0b,
0xfc,0x43,0xfc,0xab,0xfd,0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x05,
0xfe,0x32,0xfe,0x55,0xfe,0x84,0xfe,0x99,0xfe,0xc0,0xfe,0xe3,0xff,0x02};
//这里定义音乐曲谱表格
............
这里面的音符表和曲谱表怎么好像不对啊,例如do应该是64021,re是64103啊,谁知道原因啊? 展开
// 这里定义的是数码管对应的字符字根
code uchar disbuf_u[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
// 这里定义音乐音符表
code uchar musictabl[]={0xf0,0xf0,
0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x0c,0xfb,0x03,0xfb,0x8f,0xfc,0x0b,
0xfc,0x43,0xfc,0xab,0xfd,0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x05,
0xfe,0x32,0xfe,0x55,0xfe,0x84,0xfe,0x99,0xfe,0xc0,0xfe,0xe3,0xff,0x02};
//这里定义音乐曲谱表格
............
这里面的音符表和曲谱表怎么好像不对啊,例如do应该是64021,re是64103啊,谁知道原因啊? 展开
4个回答
展开全部
写一个函数,函数有一个参数,参数是一个数组,数组的元素是一个结构体,结构体有两个成员:一个是声音的频率,另一个是声音响的时间;在函数里让单片机的某个脚按数组顺序发出一定时长的一定频率的声音,将这个脚接到一个喇叭上就好了。
展开全部
先到网上找段自己喜欢的音乐程序,注意单片机类型一定要匹配哦,再用一调用CALL指令或中断指令执行就好了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例:
sing: dec a ;取到的音符码减1(不含0).
mov 22h,a ;存入(22H).
rl a ;乘2
mov dptr,#table1 ;至table1取相对的高位字节计数值
movc a,@a+dptr
mov th0,a ;取到的高位字节存入TH0
mov 21h,a ;取到的高位字节存入(21H)
mov a,22h ;再载入取的的音符码
rl a ;乘2
inc a ;加1
movc a,@a+dptr ;至table1取相对的低位字节计数值
mov tl0,a ;取到的低位字节存入TL0
mov 20h,a ;取到的低位字节存入(20H)
setb tr0 ;启动timer0
d1: call delay ;基本单位时间1/4拍187毫秒
inc 30h ;取简谱码指针加1
jmp next ;取下一个码
end0: clr tr0 ;停止timer0
jmp start0 ;重复循环
写一个函数,函数有一个参数,参数是一个数组,数组的元素是一个结构体,结构体有两个成员:一个是声音的频率,另一个是声音响的时间;在函数里让单片机的某个脚按数组顺序发出一定时长的一定频率的声音,将这个脚接到一个喇叭上
sing: dec a ;取到的音符码减1(不含0).
mov 22h,a ;存入(22H).
rl a ;乘2
mov dptr,#table1 ;至table1取相对的高位字节计数值
movc a,@a+dptr
mov th0,a ;取到的高位字节存入TH0
mov 21h,a ;取到的高位字节存入(21H)
mov a,22h ;再载入取的的音符码
rl a ;乘2
inc a ;加1
movc a,@a+dptr ;至table1取相对的低位字节计数值
mov tl0,a ;取到的低位字节存入TL0
mov 20h,a ;取到的低位字节存入(20H)
setb tr0 ;启动timer0
d1: call delay ;基本单位时间1/4拍187毫秒
inc 30h ;取简谱码指针加1
jmp next ;取下一个码
end0: clr tr0 ;停止timer0
jmp start0 ;重复循环
写一个函数,函数有一个参数,参数是一个数组,数组的元素是一个结构体,结构体有两个成员:一个是声音的频率,另一个是声音响的时间;在函数里让单片机的某个脚按数组顺序发出一定时长的一定频率的声音,将这个脚接到一个喇叭上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我刚写完这个程序,可以到我的Q空间看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询