51单片机无线音乐门铃设计

发布者:phi31最新更新时间:2022-01-11 来源: elecfans关键字:51单片机  无线模块 手机看文章 扫描二维码
随时随地手机看文章

无线门铃又称无线遥控门铃或遥控门铃。无线门铃是利用超再生无线模块来实现无线遥控的,无线门铃不需要布线,安装简单灵活,但是传输距离受传输距离和现场环境影响较大。有线门铃正好与之相反

包含,程序 实物 图纸 程序 仿真


课题预期达到的效果:

1、有5首歌曲可以切换,每按一次演唱不同的歌曲。

2、无线传输距离10m以上,可以穿墙和门。

3、设计小巧,方便安装和使用

4、稳定性高,无误报。


实物图:

在这里插入图片描述

原理图:

在这里插入图片描述

仿真图

在这里插入图片描述

代码截图

在这里插入图片描述

无线音乐门铃元件清单

1.79万用板

2.8Ω0.25w小喇叭

3.DC电源插口

4.自锁开关

5.12m晶振

6.10k电阻8

7.2.2k电阻

8.30pf电容2

9.10uf电容

10.40脚IC座

11.按键2

12.stc89c51

13.315M发射模块

14.接收模块

15.2272-M4芯片

16.2262芯片

17.12v电池

18.820k贴片电阻

19.4.7M贴片电阻

20.9012

21.9013

22.导线若干

23.焊锡若干

24.23cm长天线*2

25.usb电源线(电池盒+DC插头)


C语言参考源代码


//

//51单片机无线遥控门铃程序

//

#include

#define sound_amount 5 //歌曲的数量

sbit pause=P2^5; //播放暂停

sbit speaker=P2^7; //无源蜂鸣器

//

unsigned char timer0h,timer0l,time;//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间

unsigned char music_num,num; //music_num为歌曲编号,music_num=0表示刚开机时的状态,num是查找歌曲数据表的地址

signed char fre; //对应频率数据表的地址

bit play_enable; //歌曲播放的使能标志位,用于播放暂停

void delay(unsigned char t); //延时子函数,控制发音的时间长度

void delayms(unsigned int t); //普通延时子程序,可用于按键消抖

void song(void); //演奏一个音符

void music_play(void); //播放歌曲

//

//每三个数字,代表一个音符

//第一个数字是音符的数值1234567之一(第几个音),代表哆来咪发…

//第二个数字是0123之一,代表低音中音高音超高音(第几个八度)

//第三个数字是时间长度,以半拍为单位,乐曲数据表的结尾是三个0

//

//《祝你生日快乐》

unsigned char code song1[]={

5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,

5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,

5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,

4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4, 0,0,0};


//《世上只有妈妈好》

unsigned char code song2[]={

6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,

//6,2,3代表6,中音,3个半拍;

//5,2,1代表5,中音,1个半拍;

//3,2,2代表3,中音,2个半拍;

//5,2,2代表5,中音,2个半拍;

//1,3,2代表1,高音,2个半拍;

//…

5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1,

3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2,

1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};


//《当你孤单你会想起谁》

unsigned char code song3[]={

3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,2, 5,2,2, 2,2,2, 2,2,3,

1,2,2, 1,2,1, 2,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3,

6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1,

1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 };


//《乡间小路》

unsigned char code song4[]={

3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,

6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1,

2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,1,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,

4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1,

5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2,

3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1,

6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1,

3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1,

6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0};


//《送别》

unsigned char code song5[]={

5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,

5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2,

3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1,

3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,

7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1,

1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2,

5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};


// 频率-半周期数据表 高八位 共保存了四个八度的28个频率数据

unsigned char code FREQH[]={

0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567

0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i

0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 234567

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567


// 频率-半周期数据表 低八位

unsigned char code FREQL[]={

0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567

0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i

0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 234567

0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567


void main(void)

{

TMOD=0x11; //T0 T1 均在工作方式1

ET0=1; //T0开中断

EA=1; //CPU开中断

while(1)

{

music_play(); //根据当前状态播放相应歌曲的某个音符


if(!pause) //暂停键处理

{

delayms(5);

if(!pause)

{

if(music_num0) //music_num=0只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放

{

music_num=1; //歌曲序号置1

num=0; //从头播放

play_enable=1; //允许播放

}

else

{

play_enable=~play_enable;

speaker=1;

}

while(!pause) //若按着暂停键不放手时的处理

{

if(play_enable0){} //如果是暂停,则显示时间不变//(暂停时play_enable==0)

}


}//暂停键处理结束

}//while结束

}

}


void delayms(unsigned int t) //MS延时子程序

{

unsigned int i,j;

for(i=0;i{

for(j=0;j<123;j++)

;

}

}


void delay(unsigned char t) //延时子函数,控制发音的时间长度,每个节拍0.4S

{

unsigned char t1;

unsigned long t2;

for(t1=0;t1{

for(t2=0;t2<8000;t2++) //延时期间, 可进入T0中断去发音

{

;

}

}

TR0=0; //关闭T0, 停止发音

}


void timer0(void) interrupt 1 //T0中断程序,控制发音的音调

{

speaker=!speaker;//输出方波, 发音

TH0=timer0h; //下次的中断时间,这个时间控制音调高低

TL0=timer0l;

}


void song(void) //演奏一个音符

{

TH0=timer0h; //控制音调

TL0=timer0l;

TR0=1; //启动T0, 由T0输出方波发音

delay(time); //每个音符的演奏时间

}


void music_play(void)//播放相应歌曲的某个音符

{

if((music_num1)&&(play_enable1))

{

fre=song1[num]+7song1[num+1]-1;//第i个是音符,第i+1个是第几个八度

timer0h=FREQH[fre]; //从数据表中读出频率数值,实际上是定时的时间长度

timer0l=FREQL[fre];

time=song1[num+2]; //读出时间长度数值

num+=3;

if(fre==-1) //判断歌曲的结束位,结束后转到下一首

{

num=0; //下一首从头播放

music_num=2;

play_enable=0;

}

song(); //发出一个音符

}


if((music_num2)&&(play_enable1))

{

fre=song2[num]+7song2[num+1]-1;

timer0h=FREQH[fre];

timer0l=FREQL[fre];

time=song2[num+2];

num+=3;

if(fre==-1)

{

num=0;

music_num=3;

play_enable=0;

}

song();

}


if((music_num3)&&(play_enable1))

{

fre=song3[num]+7song3[num+1]-1;

timer0h=FREQH[fre];

timer0l=FREQL[fre];

time=song3[num+2];

num+=3;

if(fre==-1)

{

num=0;

music_num=4;

play_enable=0;

}

song();

}


if((music_num4)&&(play_enable1))

{

fre=song4[num]+7song4[num+1]-1;

timer0h=FREQH[fre];

timer0l=FREQL[fre];

time=song4[num+2];

num+=3;

if(fre==-1)

{

num=0;

music_num=5;

play_enable=0;

}

song();

}


if((music_num5)&&(play_enable1))

{

fre=song5[num]+7*song5[num+1]-1;

timer0h=FREQH[fre];

timer0l=FREQL[fre];

time=song5[num+2];

num+=3;

if(fre==-1)

{

num=0;

music_num=1;

play_enable=0;

}

song();

}


}

//程序结束

关键字:51单片机  无线模块 引用地址:51单片机无线音乐门铃设计

上一篇:手机蓝牙控制 广州塔LED灯阵 无线控制播放音乐
下一篇:扫盲:什么是单片机时序,如何看懂时序图

推荐阅读最新更新时间:2024-11-13 11:03

8051单片机(STC89C52)倒计时器
#include STC89C5xRC.H void delay()//用定时器0实现10ms精准定时 { TMOD = 0x01; TH0 = 0xd8; TL0 = 0xf0;//65536 - 10000 = 55536 TF0 = 0;//置溢出标志位为0 TR0 = 1;//开启定时器0 while(TF0 == 0); TR0 = 0;//暂停定时器0 } void disp_digit(int d) { unsigned char code DIG_CODE = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x
[单片机]
80<font color='red'>51单片机</font>(STC89C52)倒计时器
51单片机几个精确延时程序
  51单片机几个精确延时程序:在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响.   一. 500ms延时子程序(晶振12MHz,一个机器周期1us.)   程序:   void delay500ms(void)   {   unsigned char i,j,k;   for(i=15;i 0;i--)   for(j=202;j 0;j--)   for(k=81;k 0;k--);   }   计算分析:   程序共有三层循环   一层循环n:R5*2 = 81*2 = 162us DJNZ 2us   二层循环m:R6*(n+3)
[单片机]
51单片机C编程(四、定时器秒表数码管显示)
这个程序实现了通过定时器定时的秒表,并通过两位的数码管显示 #include reg51.h #define uchar unsigned char #define uint unsingned int #define LED P0 uchar tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管数字码 uchar num,t,shi,ge; //----------------子函数初始化-------------------- void init(); void timer0(); void display(); void delay(uch
[单片机]
51单片机LED点阵上移程序!(汇编)
注释:行采用74LS154+PNP三极管驱动 列采用两个74HC595驱动! 此程序可以实现上移!下面是视频链接实拍效果,请大家查看!链接地址:视频祥见: http://www.tudou.com/programs/view/D0SCJyO4RBQ/ SDATA EQU P1.0 ;串行数据 SCLK EQU P1.1 ;移位时钟脉冲 RCK EQU P1.2 ;输出锁存器控制脉冲 ORG 000H JMP MAIN ORG 0030H MAIN: MOV SP,#5FH MOV 20H,#00H MAIN1: MOV R0,#5 MAIN2: MOV R3,#10H MOV R1,#00H MOV R2,20H
[单片机]
<font color='red'>51单片机</font>LED点阵上移程序!(汇编)
51单片机学习实践:用NTC电阻测温并显示在TM1637数码管
STC15单片机 实验名称:使用NTC电阻测量温度 实验内容: 使用NTC电阻测量温度并显示在数码管上 读取DS18B20模块测量温度作为参考 实验器材: STC15W408AS_DIP16 x1 DS18B20 x1 TM1637数码管 x1 1%精度 热敏电阻NTC-MF52-103/3435 10K 3435±1 x1 金属膜电阻 1/4W 1% 五色环 10千欧 10K x1 在STC15单片机上使用NTC(10K)电阻测量温度的基本方法: 电压-- 电阻-- 温度 1、先有一个准确且稳定的参考电压,外部可以用TL431A,内部可以使用STC15系列芯片自带的
[单片机]
<font color='red'>51单片机</font>学习实践:用NTC电阻测温并显示在TM1637数码管
51单片机modbus协议程序
#include reg51.h #define uint8 unsigned char #define uint16 unsigned int #define FOSC 16000000 uint16 BAUD=9600; uint16 TEMP_Alert=1000; //字地址 0 - 255 (只取低8位) //位地址 0 - 255 (只取低8位) uint16 TempRegister; //用于测试 字址址16 uint8 localAddr = 0x01; //单片机控制板的地址 uint8 sendCount; //发送字节个数 uint8 receCount; //接收到的字节个数 //uint8 sen
[单片机]
基于ADC081S051与51单片机的接口电路及驱动程序
  引言   自然界存在的信号通常为模拟信号,在测控系统中通常将采集到的模拟信号数字化,然后交给微处理器或微控制器进行处理。因此模数转换器成为测控系统中不可缺少的部分。ADC081S051 模数转换器是国家半导体公司生产的低功率单通道CMOS 8位A/D转换器,它采用串行外设接口方式进行数据输出。与传统的器件不同的是,传统器件的采样速率是固定的,而ADC081S051 的采样速率可以在200~500 KSPS 范围内可变。   ADC081S051 的数据输出是串行数据输出,它与SPI、QSPI 等一些标准相兼容。它的工作电压范围在2.7~5.25 V,因此可以采用3 V或者5 V电源供电。它可以应用于便携式系统、远程数据采集
[单片机]
基于ADC081S051与<font color='red'>51单片机</font>的接口电路及驱动程序

推荐帖子

STM32一定要集成NetPHY吗?
为什么一定要集成PHY呢?难道嵌入式系统就一定要集成PHY?集成PHY有其好处亦有其坏处,好处无非就是totalcost,集成度等方面有优势,坏处其实也不少:1.无法满足某些安规标准,有些场合是需要光耦隔离的,这个时候就不能用了;2.增加芯片的发热,这些热量都是来自于你的供电系统,甚至是电池,无形中会使你的设备功耗奇高;3.增加IC设计的难度,模数信号处理不好,EMI不好通过;4.增加主芯片的成本;等等,这些都是需要考虑的。如果你用外部的PHY可选择的地方就很多,包括型号,增加系统设计的灵
wangzelin311 stm32/stm8
传感器 信号调理电路 的阻容器件 如何选用 ?
见附图,传感器P3的输出(输出_P、输出_N),经信号调理电路(由两个电阻、三个电容组成)后输入模数转换器U6。信号调理电路选用低温票、高精度的阻容器件,如下:电阻(低温票):阻值封装精度5.1KΩ06030.1%电容(低温票):容值(nF)封装精度1006035%10006035%请教:上述的选型是否合适?谢谢!备注:传感器的输出为0-100mV。---
yhye2world 传感器
请教 STM32 CAN_Filter的查询问题
怎样在can中断程序中查出当前的报文是来自于那个filter的阿看资料说的是结构体中的FMI参数可我在实验的时候明明filter12收到的查询fmi却是8百思不得其解阿有哪位知道的请指教一下阿以下为该语句if(RxMessageIsr.FMI==CAN_Filter_RecallPGN)请教STM32CAN_Filter的查询问题
hanker510 stm32/stm8
微弱信号检测电路分析,超声波检测
大家分析一下这个电路,信号路径如下:超声波信号(很小幅度,几毫伏~几十毫伏)从probe进去-----C22隔掉直流分量----经过U6进行放大----经过U5进行放大----经过(C18、C19、C20、C21、L3、L4、L5、L6、R17)进行滤波这个电路通过测试,电路是正常的,但不知道如果从理论上来正确分析U6部分和(C18、C19、C20、C21、L3、L4、L5、L6、R17)滤波部分的电路。求高手分析一下。微弱信号检测电路分析,超声波检测U6信号放大,注意C24
gaoyang9992006 模拟电子
vivado学习3-生成BOOT.bin
接上一篇帖子vivado学习2-自定义IP核-FPGA/CPLD-电子工程世界-论坛https://bbs.eeworld.com.cn/thread-509154-1-1.html上个帖子白丁给了我一赞,昨晚再接再厉上个帖子已对IP的时钟、端口等进行设置,下面生成设计文件,输出成功,会看到目录下多了文件建立HDLWrapper选择File-Export-ExportHardware-OK,把硬件文件system_wrapper.hdf导到zynq700
suoma FPGA/CPLD
华纳公司开户为迎新小学捐款3万元
迎新小学,建校距今已有40余年,近年来,随着地区教育事业的发展,该校的教学环境已然不能满足现状,当前,决定重建该学校。用心关注教育、用爱播撒希望!华纳公司开户董事长通过具体了解情况后,决定向迎新小学捐助3万元人民币,为地区的教育事业尽一份公司的绵薄之力。4月20日下午3点,受董事长委托,华纳公司开户代表团,亲自到迎新小学进行捐款。迎新小学校长接受了捐款,并对华纳技实业有限公司的爱心善举表示由衷的感谢,他还说,我们全校师
华纳开户有限公司 国产芯片交流
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved