首页 > 其他分享 >1.基于51单片机的数码录音放音系统设计(实物)

1.基于51单片机的数码录音放音系统设计(实物)

时间:2024-07-17 21:57:10浏览次数:14  
标签:lie temp 51 放音 hang 录音 char 单片机 L1602

1.基于51单片机的数码录音放音系统设计(实物) 

1.基于51单片机的数码录音放音系统设计(实物)

综合运用所学的模拟电子技术、数字逻辑电路、C语言、单片机原理及应用、传感器等专业知识,设计出一套数码录音放音系统。系统实现录音、放音、播放停止、快进快退、删除、显示相关信息等功能。

要求简述:

1.录音;2.播放与停止;3.播放选择;4.快进快退;5.删除;6.显示相关信息。

当接通电源后,需要按下自锁开关才能使系统上电,随即LCD1602会显示录音条目选择界面。 按键开关从左至右(S0-S4)功能分别为S0-条目选择、S1-录音、S2-播放、S3-删除、S4-退出。 条目选择共4条,共可以录音4条语音信息。选择相对应的条目可以实现录音、播放、删除。 每次按下录音按键S1后,便能进行录音。录音完成后,按下退出键,再按播放键可播放录音内容,同时S0-按键能实现快进,S1-按键能实现快退,S2-按键、S3-按键能实现继续与停止。 只有在播放模式下这四个按键才能实现快进、快退、继续与停止的功能。按下S4-退出按键即可会到条目选择界面。 选择相对应的条目,在按下删除键时即可删去该条目的语音信息。能够经过调节电位器的阻值,从而改变扬声器的音量大小。

资料包括:

image.png

原理图:

image.png

PCB截图:

image.png

程序运行图:

image.png

实物图:

image.png

/********************************************************************
* 文件名  : 液晶1602显示.c
* 描述    :  该程序实现了对液晶1602的控制。
***********************************************************************/
#include "1602.h"
#include "math.h"

/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间大概为140US。
* 输入 : 无
* 输出 : 无
***********************************************************************/

void delay()
{
	int i,j;
	for(i=0; i<=10; i++)
	for(j=0; j<=2; j++)
;
}

/********************************************************************
* 名称 : Convert(uchar In_Date)
* 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
* 输入 : 1602资料上的值
* 输出 : 送到1602的值
***********************************************************************/
uchar Convert(uchar In_Date)
{
    
//    uchar i, Out_Date = 0, temp = 0;
//    for(i=0; i<8; i++)
//    {
//        temp = (In_Date >> i) & 0x01;
//        Out_Date |= (temp << (7 - i));
//    }
//	
//    return Out_Date;
	
    return In_Date;

}
/********************************************************************
* 名称 : enable(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/

void enable(uchar del)
{	
	RS = 0;
	RW = 0;
	LCD_DATA = Convert(del);
	E = 1;
	delay();
	E = 0;
	delay();
}

/********************************************************************
* 名称 : write(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/

void write(uchar del)
{  
	RS = 1;
	RW = 0;
	LCD_DATA = Convert(del);
	E = 1;
	delay();
	E = 0;
	delay();
}

/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void lcd1602_init(void)
{
	enable(0x38);
	enable(0x0c);
	enable(0x06);
	enable(0x01);
	enable(0xd0);
}

/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
		 L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
	uchar a;
	if(hang == 1) a = 0x80;
	if(hang == 2) a = 0xc0;
	a = a + lie - 1;
	enable(a);
	write(sign);
}

/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
	 	 L1602_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
	uchar a;
	if(hang == 1) a = 0x80;
	if(hang == 2) a = 0xc0;
	a = a + lie - 1;
	enable(a);
	while(1)
	{
		if(*p == '\0') break;
		write(*p);
		p++;
	}
}

//显示整型的温湿度数据用,共占用4位,其中一位符号位
void L1602_int(uchar hang, uchar lie, int num)
{
   uint temp;
   uint gewei,shiwei,baiwei,sign;
   if (num >= 0)
   {
      sign = 0;
   }
   else
   {
      sign = 1;
   }
   temp = abs(num);
   baiwei = temp / 100;
   temp = temp - baiwei*100;
   shiwei = temp / 10;
   gewei = temp - shiwei*10;
   num = abs(num);
   if (num>=100)
   {
      if (sign == 1) //负数
	  {
	     L1602_char(hang, lie, '-');
	  }
      L1602_char(hang, lie+1, baiwei+48);  
	  L1602_char(hang, lie+2, shiwei+48);  
	  L1602_char(hang, lie+3, gewei+48);  
   }
   else if (num>=10)
   {
      if (sign == 1)	   
	  {
	     L1602_char(hang, lie+1, '-');
	  }
	  L1602_char(hang, lie+2, shiwei+48);  
      L1602_char(hang, lie+3, gewei+48);
   }
   else
   {
      if (sign == 1)	   
	  {
	     L1602_char(hang, lie+2, '-');
	  }
	  L1602_char(hang, lie+2, ' ');
      L1602_char(hang, lie+3, gewei+48);  
   }
}

标签:lie,temp,51,放音,hang,录音,char,单片机,L1602
From: https://blog.csdn.net/I1125787856/article/details/140505734

相关文章

  • 【LeetCode 0051】【剪枝】N皇后
    N-QueensThen-queenspuzzleistheproblemofplacingnqueensonannxnchessboardsuchthatnotwoqueensattackeachother.Givenanintegern,returnalldistinctsolutionstothen-queenspuzzle.Youmayreturntheanswerinanyorder.Eachsolu......
  • 51单片机
    1基础LEDKeil5C51软件安装正确驱动程序COM口电路原理图理解文件设置.hex2数码管消隐数码管按照电路设计可分为位选和段选。段选246译码器,通过左边的P0来控制段选的数字,数码管以a,b,c,d,e,f,g,dp来排列,1表示的是这个LED亮,从右往左读,转换为16进制,即为P0的段选值。、位选138译码......
  • 零基础STM32单片机编程入门(十五) DHT11温湿度传感器模块实战含源码
    文章目录一.概要二.DHT11主要性能参数三.DHT11温度传感器内部框图四.DTH11模块原理图五.DHT11模块跟单片机板子接线和通讯时序1.单片机跟DHT11模块连接示意图2.单片机跟DHT11模块通讯流程与时序六.STM32单片机DHT11温度传感器实验七.CubeMX工程源代码下载八.小结一.......
  • 代码随想录算法训练营第九天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28.
    151.翻转字符串里的单词题目:.-力扣(LeetCode)思路:用快慢双指针重置空格,先整体翻转再局部翻转代码:classSolution{public:voidremoveSpace(string&s){intslow=0;for(intfast=0;fast<s.size();fast++){if(slow!=0&&s[fast]!='')......
  • 基于单片机的智能医疗监护系统设计
    1.简介  随着社会的发展,智能化电子设备成为了人们生活中不可或缺的一部分,尤其是在人们对于身心健康更加注重的今天,智能医疗监护系统应运而生。本套电子监护设备集体温测量、心电采集、心率监测、血氧监测于一体,带有语音播报模块,适用于不同年龄段人群。智能化电子监护设备......
  • 为什么执行代码,烧入程序之后,电脑对单片机发送数据,但是单片机不反应
    #include"stm32f10x.h"      #include"Uart.h"#include<stdio.h>#include<stdarg.h>u8USART1_RX_BUF[64];  //接收缓冲,最大64个字节.//接收状态//bit7,接收完成标志//bit6,接收到0x0d//bit5~0,接收到的有效字节数目u16USART1_RX_STA=0;   ......
  • 51小车红外循迹及蓝牙代码
     main.c#include<REGX52.H>#include"time.h"#include"motordriver.h"#include"MoveState.h"#include"follow.h"#include"lanya.h"externunsignedintPWMR;externunsignedintPWML;unsignedi......
  • 基于51单片机控制的简易交通灯设计
    在我们生活中,各个道口上红绿灯随处可见,是疏导交通车辆最常见和最有效的手段。通过查找资料能够发现这一科技从十九世纪就开始出现了。时间追溯到1858年,英国伦敦的各个重要街头就安装了红色和蓝色组成信号灯,它是以燃煤气为光源的扳手式信号灯,一开始是用作指挥马车的行驶,这应......
  • 牛客周赛 Round 51
    A.小红的同余思路+解法:找到唯一一个x满足2x%m=1(0<=x<m)  就可以推出(m+1)*2即可Code: #include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);intm;cin>>m;......
  • 2024.7.12单片机PWM
    遇到了一个光标变成下划线的问题:Keil5光标变下划线,变回来的方法_keil5光标是下划线-CSDN博客这里是用了输入捕获(IC:inputcapture),输出比较(OC:OutputCompare)区别学到这里是以为,首先输入捕获是捕获外界的数字信号,如果是模拟信号,可能需要加信号处理的模块,变成数字信号再加以处......