19 基于51单片机的倒计时音乐播放系统设计

embedded/2024/9/23 1:07:33/

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

五个按键,分别为启动按键,则LCD1602显示倒计时,音乐播放
设置按键,可以设置倒计时的分秒,然后加减按键,还有最后一个暂停音乐按键。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
在这里插入图片描述

三、程序编程

#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include "intrins.h"											   #define     u8  			unsigned char#define     u16   		unsigned int#define     uchar  			unsigned char#define     uint   		unsigned int//温度值全局变量int fen=3,miao=0,tt,flag,flag1;					 			//用于读取ADC数据unsigned char timer0h,timer0l,time;//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间unsigned int num;signed int fre;                   //对应频率数据表的地址static int gqbf=0;void delay(unsigned char t);	   //延时子函数,控制发音的时间长度void delayms(unsigned int t);	   //普通延时子程序,可用于按键消抖void song(void);		           //演奏一个音符void music_play(void);	           //播放歌曲//管脚声明 sbit speaker   	 =P2^0;				 //蜂鸣器sbit key1    	 =P1^0;	
sbit key2    	 =P1^1;	
sbit key3    	 =P1^2;	
sbit key4    	 =P1^3;	
sbit key5      =P1^4;
sbit led       =P3^0;/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/void delay_ms(uint q){uint i,j;	for(i=0;i<q;i++)		for(j=0;j<110;j++);
}/***********************************************************************************************************
LCD1602相关函数
***********************************************************************************************************///LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)sbit LCDRS = P2^7;
sbit LCDEN = P2^6;
sbit D0		 = P0^0;
sbit D1		 = P0^1;
sbit D2		 = P0^2;
sbit D3		 = P0^3;
sbit D4		 = P0^4;
sbit D5		 = P0^5;
sbit D6		 = P0^6;
sbit D7		 = P0^7;  //《烟花易冷》unsigned char code song1\[\]={     5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1, 2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2, 2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2, 5,1,2, 6,1,6, 0,0,0 };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  //LCD延时void LCDdelay(uint z)		  //该延时大约100us(不精确,液晶操作的延时不要求很精确){uint x,y;  for(x=z;x>0;x--)    for(y=10;y>0;y--);
}void LCD_WriteData(u8 dat)	  {	if(dat&0x01)D0=1;else D0=0;	if(dat&0x02)D1=1;else D1=0;	if(dat&0x04)D2=1;else D2=0;	if(dat&0x08)D3=1;else D3=0;	if(dat&0x10)D4=1;else D4=0;	if(dat&0x20)D5=1;else D5=0;	if(dat&0x40)D6=1;else D6=0;	if(dat&0x80)D7=1;else D7=0;
}//写命令void write_com(uchar com){LCDRS=0;				  LCD_WriteData(com);//  DAT=com;LCDdelay(5);LCDEN=1;  LCDdelay(5);LCDEN=0;
}//写数据void write_data(uchar date){LCDRS=1;	LCD_WriteData(date);//  DAT=date;LCDdelay(5);LCDEN=1;  LCDdelay(5);LCDEN=0;
}/*------------------------------------------------选择写入位置
------------------------------------------------*/void SelectPosition(unsigned char x,unsigned char y) {     if (x == 0) {     write_com(0x80 + y);     //表示第一行}	else {      write_com(0xC0 + y);      //表示第二行}        
}/*------------------------------------------------写入字符串函数
------------------------------------------------*/void LCD\_Write\_String(unsigned char x,unsigned char y,unsigned char *s) {     SelectPosition(x,y) ;	while (*s) {     write_data( *s);     s ++;     }
}void LCD\_Write\_Char(u8 x,u8 y,u16 s,u8 l) {     SelectPosition(x,y) ;	if(l>=5)		write_data(0x30+s/10000%10);	//万位if(l>=4)		write_data(0x30+s/1000%10);		//千位if(l>=3)		write_data(0x30+s/100%10);		//百位if(l>=2)		write_data(0x30+s/10%10);			//十位if(l>=1)		write_data(0x30+s%10);		//个位}/*1602指令简介write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示 无光标 无光标闪烁write_com(0x0d);//打开显示 阴影闪烁write_com(0x0d);//打开显示 阴影闪烁
*///1602初始化

四、实现现象

具体动态效果看B站演示视频:

基于单片机>51单片机的倒计时音乐播放系统设计_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

通过百度网盘分享的文件:基于单片机>51单片机的倒计时音乐播放系统设计.zip
链接:https://pan.baidu.com/s/19RILEqXK6eeWC6n3ItDzYA?pwd=poos
提取码:poos
–来自百度网盘超级会员V4的分享


http://www.ppmy.cn/embedded/115329.html

相关文章

Mysql学习

目录 1、常用命令&#xff1a; 2、SQL语言分类 2.1 DML语言 2.2 DDL语言 2.3 DCL语言 2.4 SQL语言注意事项 3、数据处理之查询 3.1 基本的 SELECT 语句 3.2 过滤数据 3.2.1 比较运算符 a、将表中第lien2 列中不等于90的列过滤掉 b、选择表中salary 列中小于3000的…

Give azure openai an encyclopedia of information

题意&#xff1a;给 Azure OpenAI 提供一部百科全书式的信息 问题背景&#xff1a; I am currently dabbling in the Azure OpenAI service. I want to take the default model and knowledge base and now add on to it my own unique information. So, for example, for mak…

GPU使用

0. 写这篇文章的背景 最近还是在使用GPU、连接远程服务器上出现了一点问题,发现在这方面的知识还是学得很模糊。(最让人感到困惑的是之前GPU的使用都没有问题) 总结一下最近的问题: 1.每一次连接远程服务器(选择的Ubuntu22.04),使用服务器的文件夹还好(关键是现在用…

uniapp js修改数组某个下标以外的所有值

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

《家庭无线网络覆盖项目》

家庭无线网络覆盖报项目 目录 家庭无线网络覆盖项目 家庭无线网络覆盖项目 一、项目概述 二、设备清单及报价 三、安装调试费用 四、总报价 五、服务承诺 家庭无线网络覆盖项目 客户姓名:[客户姓名] 联系方式:[电话号码] 家庭地址:[详细地址] 一、项目概述 为客户…

GlusterFS 分布式文件系统

一、GlusterFS 概述 1.1 什么是GlusterFS GlusterFS 是一个开源的分布式文件系统&#xff0c;它可以将多个存储服务器结合在一起&#xff0c;创建一个大的存储池&#xff0c;供客户端使用。它不需要单独的元数据服务器&#xff0c;这样可以提高系统的性能和可靠性。由于没有…

2024年三个月自学 网络安全(黑客技术)手册

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、…

初级js混淆代码处理

# 在软件开发和安全领域&#xff0c;代码混淆是一种常见的技术手段&#xff0c;旨在保护代码不被轻易理解和逆向分析。熟悉这些手段不仅能帮助我们在应对开发工作&#xff0c;在进行数据获取的时候也是十分有裨益的。 一、常见的混淆手段 1.压缩混淆 压缩混淆是一种基础的混…