设计与开发

单片机音乐c程序 毕业论文:单片机的音乐喷泉制作-DIY分享 全部设计资料 源代码

小编 2024-10-08 设计与开发 23 0

毕业论文:单片机的音乐喷泉制作-DIY分享 全部设计资料 源代码

因为最近忙着考试,所以都没时间更新博客了,在后台有个小姐姐给我留言说自己对单片机很感兴趣,但是又不知道从哪里开始学起,是先学硬件好还是先学软件好,其实在我们复杂的电子学里,硬件和软件是分不开的,硬件就像是我们的心脏和四肢,软件就像我们的大脑,如果只有软件没有硬件,那我们的系统就是一个没用的程序,不能执行任何操作,而如果只有硬件没有软件那么整个系统就是一个行尸走肉,是一个没有“大脑”的躯壳,我说到现在大家也应该明白了,硬不离软,软不离硬,只有软硬兼修,方能大成!好了,回到刚才的问题,我建议先从硬件开始学起,先理解了硬件的架构和各部分的工作原理,然后再去看软件,这样能更好的理解原理,就像我推荐大家先用汇编后用C一样 好了,写了这么多,如果你有不同意见或者想法欢迎留言和私信。

今天送给大家一个比较简单的小项目吧,如果你有兴趣的话可以试着做一下呦!

好了老规矩先上实物图

正面图:

焊接好的成品背面图:

电路原理图:

PCB图:

音乐喷泉的项目元器件清单:

音乐喷泉单片机C语言参考源代码如下:

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit out=P3^7;

sbit led1=P0^7;

sbit led2=P0^6;

sbit led3=P0^5;

sbit led4=P0^4;

sbit led5=P0^3;

sbit led6=P0^2;

sbit led7=P0^1;

sbit led8=P0^0;

sbit SCL=P1^2; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚

sbit DO=P1^3; //DO定义为P1口的第4位脚,连接ADC0832DO脚

sbit CS=P1^0; //CS定义为P1口的第4位脚,连接ADC0832CS脚

uchar h1,date;

unsigned char adval;

void delay(uint z)

{

uchar y;

for(;z>0;z--)

for(y=120;y>0;y--);

}

以下是模数转换部分

/***********读数模转换数据********************************/

//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的

// 1 1 0 通道

// 1 1 1 通道

unsigned char ad0832read(bit SGL,bit ODD)

{

unsigned char i=0,value=0,value1=0;

SCL=0;

DO=1;

CS=0; //开始

SCL=1; //第一个上升沿

SCL=0;

DO=ODD;

SCL=1; //第二个上升沿

SCL=0;

DO=SGL;

SCL=1; //第三个上升沿

DO=1;

for(i=0;i<8;i++)

{

SCL=1;

SCL=0; //开始从第四个下降沿接收数据

value<<=1;

if(DO)

value++;

}

for(i=0;i<8;i++)

{ //接收校验数据

value1<<=1;

if(DO)

value1+=0x01;

SCL=1;

SCL=0;

}

if(value==value1) //与校验数据比较,正确就返回数据,否则返回0

return value;

return 0;

}

void penquan() //PWM调压

{

date=ad0832read(1,0);

h1=(255-date);

out=0;

delay(h1);

if(h1>30) led1=1; else led1=0;

if(h1>70) led2=1; else led2=0;

if(h1>100) led3=1; else led3=0;

if(h1>130) led4=1; else led4=0;

if(h1>160) led5=1; else led5=0;

if(h1>180) led6=1; else led6=0;

if(h1>200) led7=1; else led7=0;

if(h1>220) led8=1; else led8=0;

out=1;

delay(date);

}

……………………

鉴于篇幅所限代码只能写到这里,由于平台不能上传附件,如果需要设计文件请留言或者私信,如果你有什么意见和建议欢迎大家交流,让我们共同学习,一起进步!

喜欢请转发留言加关注,谢谢!

单片机六首歌曲的音乐门铃程序

;音乐门铃程序

buzzer equ p2.4

KEY EQU P3.7

org 00h ;主程序起始地址

jmp start ;跳动主程序

org 0bh ;timer0中断起始地址

jmp tim0 ;跳至timer0在mode1

start: MOV tmod,#00000001b ;设timer0在mode1

MOV ie,#10000010b ;中断使能

jb KEY,$ ;第一次按to?

call delay1 ;消除抖动

jnb KEY,$ ;to放开?

MOV 31h,#00 ;按to次数计数指针初值为00h

start0:

MOV 30h,#low song ;取简谱码指针(第1首)

next: MOV a,30h

MOV dptr,#table

MOVc a,@a+dptr ;至相关页码,高4位为音符的高低

MOV r2,a ;低4位为音符的节拍

jz end0 ;检查简谱码是否已结束(有无00?)

anl a,#0fh ;取节拍(低4位)

MOV r5,a ;存入r5,节拍的时间

MOV a,r2

swap a

anl a,#0fh ;取音频值(高4位)

jnz sing ;是否为0,是0则不发音

clr tr0

jmp d1

sing: dec a ;因0不列入

MOV 22h,a ;存入(22h)

rl a ;乘2

MOV dptr,#table

MOVc a,@a+dptr ;至table取码,取t的值

MOV th0,a ;取到的高位字节存入th0

MOV 21h,a ;取到的高位字节存入(21h)

MOV a,22h ;再载入取到的音符码

rl a ;乘2

inc a ;加1

MOVc a,@a+dptr ;至table取相对的低位字节计数值

MOV tl0,a ;取到的低位字节存入tl0

MOV 20h,a ;取到的低位字节存入(20h)

setb tr0 ;启动timer0

d1: call delay

inc 30h ;取简谱码指针加1

jmp next

end0: clr tr0 ;停止计数器

MOV a,31h ;载入计次指针

xrl a,#00h ;是否按第1次?

jnz end1 ;不是则跳至end1

jb KEY,$ ;按第2次?

call delay1 ;消除抖动

jnb KEY,$ ;放开否?

inc 31h ;计次地址(31h)加1

MOV 30h,#low song1 ;第2首歌指针

jmp next

end1:

MOV a,31h ;载入计次指针

xrl a,#01h ;是否按第2次?

jnz end2 ;不是则跳至end2

jb KEY,$ ;按第3次?

call delay1 ;消除抖动

jnb KEY,$ ;放开否?

inc 31h ;计次地址(31h)加1

MOV 30h,#low song2 ;第3首歌指针

jmp next

end2:

MOV a,31h ;载入计次指针

xrl a,#02h ;是否按第3次?

jnz end3 ;不是则跳至end3

jb KEY,$ ;按第4次?

call delay1 ;消除抖动

jnb KEY,$ ;放开否?

inc 31h ;计次地址(31h)加1

MOV 30h,#low song3 ;第4首歌指针

jmp next

end3:

MOV a,31h ;载入计次指针

xrl a,#03h ;是否按第4次?

jnz end4 ;不是则跳至end4

jb KEY,$ ;按第5次?

call delay1 ;消除抖动

jnb KEY,$ ;放开否?

inc 31h ;计次地址(31h)加1

MOV 30h,#low song4 ;第5首歌指针

jmp next

end4:

MOV a,31h ;载入计次指针

xrl a,#01h ;是否按第5次?

jnz end5 ;不是则跳至end2

jb KEY,$ ;按第6次?

call delay1 ;消除抖动

jnb KEY,$ ;放开否?

inc 31h ;计次地址(31h)加1

MOV 30h,#low song5 ;第6首歌指针

jmp next

end5:

jmp start ;回到第1次位置

tim0: push acc ;将a的值暂存于堆栈

push psw ;将psw的值暂存于堆栈

setb rs0 ;设工作寄存器库1,rs0=1,rs1=0

clr rs1

MOV tl0,20h ;重设计数值

MOV th0,21h

cpl buzzer ;将p10位反相

clr rs0

pop psw ;至堆栈取回psw的值

pop acc ;至堆栈取回a的值

reti ;返回主程序

delay: MOV r7,#02 ;125秒

d2: MOV r4,#125

d3: MOV r3,#248

djnz r3,$

djnz r4,d3

djnz r7,d2

djnz r5,delay ;决定节拍

ret

delay1: MOV r4,#20

d4: MOV r3,#248

djnz r3,$

djnz r4,d4

ret

org 300h

table:

dw 64260,64400,64524,64580

dw 64684,64777,64820,64898

dw 64968,65030,65058,65110

dw 65157,65178,65217

song: ;第一首歌 哈 巴 狗

;1

db 42h,42h,42h,52h,62h,04h

db 62h,62h,62h,72h,84h,04h

db 92h,92h,82h,72h,64h,04h

db 82h,82h,52h,62h,44h,04h

;2

db 42h,42h,42h,52h,62h,04h

db 62h,62h,62h,72h,84h,04h

db 92h,92h,82h,72h,64h,04h

db 82h,82h,52h,62h,44h,04h

db 00h

song1: ;第2首歌 生 日 快 乐

;1

db 82h,01h,81h,94h,84h

db 0b4h,0a4h,04h

db 82h,01h,81h,94h,84h

db 0c4h,0b4h,04h

;2

db 82h,01h,81h,0f4h,0d4h

db 0b4h,0a4h,94h

db 0e2h,01h,0e1h,0d4h,0b4h

db 0c4h,0b4h,04h

db 00h

song2: ;第3首歌 不 倒 翁

;1

db 84h,94h,88h

db 64h,54h,68h

db 84h,64h,54h,44h

db 52h,42h,52h,62h,48h

;2

db 84h,94h,88h

db 64h,54h,68h

db 84h,64h,54h,44h

db 52h,42h,52h,62h,48h

db 00h

song3: ;第4首歌 妹妹背着洋娃娃

;1

db 84h,02h,82h,64h,54h

db 64h,54h,48h

db 64h,02h,52h,44h,24h

db 14h,24h,18h

;2

db 24h,02h,22h,42h,24h

db 44h,54h,68h

db 54h,02h,52h,84h,84h

db 54h,64h,48h

db 00h

song4: ;第5首歌 两只老虎

;1

db 44h,54h,64h,44h

db 44h,54h,64h,44h

db 64h,74h,88h

db 64h,74h,88h

;2

db 82h,92h,82h,72h,64h,44h

db 82h,92h,82h,72h,64h,44h

db 44h,84h,48h

db 44h,14h,48h,00H

song5: ;第6首歌 三只小猫

;1

db 62h,82h,82h,62h,98h

db 92h,0b2h,0b2h,82h,98h

db 62h,82h,82h,52h,68h

db 92h,0b2h,0b2h,82h,98h

;2

db 62h,82h,82h,62h,92h,92h,94h

db 92h,0b2h,0b2h,92h,84h,94h

db 0b8h,0b4h,04h

db 00h

end

相关问答

单片机 高手求助,怎样用 C 语言编写歌曲 程序 和歌曲代码?需要用那些工具怎么样编写的要求详细解答。谢谢?

//绝对调试通过,AVR-GCC,mega16,带数码显示,单键开关多功能控制#include{key_state=7;key_return=3;}elsekey_state=5; ...

求51 单片机 音乐 播放 程序 实验仪器必须是DP-51proc-ZOL问答

Count;sbitbuzzer=P1^4;//讯响器控制脚unsignedcharcodeSONG[]={//祝你平安0x26,0x20,0x20,0x20,0x20,0x20...

怎么让计算机发出 音乐 声?

1、将计算器调节成音乐键,首先需要调节音量键,确保计算器的声音打开。然后按下两次“时间、日期”键,待屏幕显示为“年月日模式”即为设置完成,这时按下按键...

怎么实现手机APP与 单片机 之间的数据传递?

从提问中你得有如下知识:1.单片机编程能力;2.手机APP编程能力3.一种网络协议要想用手机APP接收到单片机的数据,简单一点的办法就是让单片机连入局域...从...

怎么将计算机调成 音乐 模式?

首先需要调节音量键,确保计算器的声音打开。然后按下两次“时间/日期”键,待屏幕显示为“年月日模式”即为设置完成,这时按下按键就可以弹音乐了。不过需要注...

什么模块可以让 单片机 的数字信号转换成音频信号?

你好!关于这个问题:什么模块可以让单片机的数字信号转换成音频信号?1、单片机本身可以模拟输出音频信号2、输出音频信号其实就是AD采样的逆向工程。即DA3、...

音乐 原理?

改变频率就改变了电机的转速,也就改变了水泵的压力,音乐的不同频率经单片机处理送到变频电机的控制端,使电机转速随音乐的音调,节奏,和强弱变化,水泵的压力...

音乐 喷泉原理及安装方法?

首先,音乐喷泉需要的设备主要包括:喷泉喷头、LED水下灯、喷泉专用泵、阀门、漂浮平台(湖面水上喷泉用)、管道、电缆、控制系统、音响系统等设备,带有激光水...首...

计算器怎么设置弹 音乐 ?

普通计算器是没办法的,我不知道你说的是哪一种计算器。如果是普通计算器的话,里面有一个单片机,可以理解为性能比较一本的cpu处理器,通过蜂鸣器器,编程控制...

怎么调节计算机的背景 音乐 ?

1、将计算器调节成音乐键,首先需要调节音量键,确保计算器的声音打开。然后按下两次“时间、日期”键,待屏幕显示为“年月日模式”即为设置完成,这时按下按键...

猜你喜欢