56 基于51单片机无线门铃控制系统设计【毕设课设】

2024-01-23 18:10

本文主要是介绍56 基于51单片机无线门铃控制系统设计【毕设课设】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

硬件构成:单片机+最小系统+放音模块+无线模块+按键模块

本设计基于STC89C51/52单片机

1.采用三极管驱动放音喇叭;

2.采用315M无线模块实现无线的连接,实际应用中更易安装,是家居首选;

3.内置5首音乐,按一下门铃键,就会播放第一首音乐,再按一下就会播放下一曲。

 

 

 

//
//51单片机无线遥控门铃程序
//
#include<REG51.H>
#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,    //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567// 频率-半周期数据表 低八位
unsigned char code FREQL[]={0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567  void main(void)
{TMOD=0x11; //T0 T1 均在工作方式1ET0=1;  //T0开中断EA=1;   //CPU开中断	 while(1){music_play();	//根据当前状态播放相应歌曲的某个音符if(!pause)		//暂停键处理{delayms(5);if(!pause){if(music_num==0)    //music_num=0只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放{music_num=1;    //歌曲序号置1num=0;	        //从头播放play_enable=1;	//允许播放}else{play_enable=~play_enable;speaker=1;}while(!pause)	 //若按着暂停键不放手时的处理{if(play_enable==0){}	        //如果是暂停,则显示时间不变//(暂停时play_enable==0)}}//暂停键处理结束}//while结束}
} void delayms(unsigned int t)	   //MS延时子程序
{unsigned int i,j;for(i=0;i<t;i++){for(j=0;j<123;j++);}
}void delay(unsigned char t)	    //延时子函数,控制发音的时间长度,每个节拍0.4S
{unsigned char t1;unsigned long t2;for(t1=0;t1<t;t1++)	       //嵌套循环, 共延时t个半拍{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_num==1)&&(play_enable==1)){fre=song1[num]+7*song1[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_num==2)&&(play_enable==1)){  fre=song2[num]+7*song2[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_num==3)&&(play_enable==1)){  fre=song3[num]+7*song3[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_num==4)&&(play_enable==1)){fre=song4[num]+7*song4[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_num==5)&&(play_enable==1)){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();		}}
//程序结束

资料下载地址

https://pan.baidu.com/s/1bNR5A012cEmgd8DOPobUJg?pwd=8888

这篇关于56 基于51单片机无线门铃控制系统设计【毕设课设】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/637090

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

无线领夹麦克风什么牌子好用?揭秘领夹麦克风哪个牌子音质好!

随着短视频行业的星期,围绕着直播和视频拍摄的电子数码类产品也迎来了热销不减的高增长,其中除了数码相机外,最为重要的麦克风也得到了日益增长的高需求,尤其是无线领夹麦克风,近几年可谓是异常火爆。别看小小的一对无线麦克风,它对于视频拍摄的音质起到了极为关键的作用。 不过目前市面上的麦克风品牌种类多到让人眼花缭乱,盲目挑选的话容易踩雷,那么无线领夹麦克风什么牌子好用?今天就给大家推荐几款音质好的

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网(IoT)和人工智能技术的发展,智能家居语音控制系统已经成为现代家庭的一部分。通过语音控制设备,用户可以轻松实现对灯光、空调、门锁等家电的控制,提升生活的便捷性和舒适性。本文将介绍如何构建一个基于人工智能的智能家居语音控制系统,包括环境准备

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在