51-基于单片机的智能语音识别与处理系统设计

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,搞L298N驱动两个电机转动,然后搞LCD1602显示屏,弄个超声波传感器实时检测距离 通过LCD1602显示距离,如果距离小于阈值,则两个电机停止,蜂鸣器报警,灯光亮起。如果大于阈值,说明没有障碍物,电机正常运作。有两个按键,一个是自动按键,就是按下后靠超声波来避障。一个是手动按键,按下后,由电脑云端也就模拟语音来控制小车的运转,比如发现0x01,让小车停止运行,发送0x02,让小车正常运行。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程

cpp 复制代码
#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit CS=P1^0;        //51单片机引脚设置
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit Motor1_IN1 = P3^3;	      //电机IN1口
sbit Motor1_IN2 = P3^4;
sbit Motor2_IN1 = P1^0;	      //电机IN2口
sbit Motor2_IN2 = P1^1;

sbit LED =  P1^5;  //LED灯定义
sbit key1 = P1^4;
sbit key2 = P1^6;
sbit BEEP = P1^3;
sbit Tr=P3^5;//触发信号
sbit Ec=P3^6;//回响信号

uchar Recv_Buffer[4];
uint Voltage[]={'0','0','0','0'};
bit bdata IIC_ERROR;
static int flag = 0;
unsigned int distance;
static char Dat_rxd;
unsigned int Read_value(void);//读值函数

void Delay10us(void);//10us延时函数

void Time0_Init()          //定时器初始化
{
    TMOD = 0x21;
    TH0 = 0x00;
    TL0 = 0x00;
    TR0 = 0;//先关闭定时器0
}

void Time0_Int() interrupt 1 //中断程序
{
   TH0  = 0xfe;             //重新赋值
   TL0  = 0x33;
}
unsigned int Read_value()
{
	uint result;
	Tr=1;//触发引脚发出11us的触发信号(至少10us)
	Delay10us();
	Tr=0;
	while(!Ec);//度过回响信号的低电平
	TR0=1;//开启定时器0
	while(Ec);//度过回响信号高电平
	TR0=0;//关闭定时器0
	result=((TH0*256+TL0)*0.034)/2;		// 距离cm=(时间us * 速度cm/us)/2
	return result + 2;	//+2修正补偿	
}

void Com0_Init(void)
{
    EA=1;        //开总中断
    ES=1;        //允许串口中断
    TMOD=0x21;   //定时器T1,在方式3中断产生波特率
    SCON=0x50;
    TH1=0xfd;    //波特率设置为9600(晶振12M)
    TL1=0xfd;
    TR1=1;       //开定时器T1运行控制位
	  
//	TI=1;
}

void Com0(void) interrupt 4 using 1
{
    if(RI)
    {
        Dat_rxd=SBUF;                 //串口接收
        Dat_rxd=Dat_rxd-0x30;
        RI=0;
    }
}
void main()					  //主函数
{	
	Tr=0;               //出发引脚首先拉低
	LCD_Init();         //显示屏初始化
	LCD_ShowString(1,1,"Distance:"); //显示字符串Distance
	Time0_Init();	   //定时初始化
	Com0_Init();//串口初始化 
	LED = 0;
	BEEP = 0;
	while(1)
	{
		distance = Read_value();//读值
		distance+=3;
		LCD_ShowNum(1,10,distance,3); //显示距离
		
		if(flag == 1)
		{
		if(distance>=50)
		{
		   Motor1_IN1 = 1;
	     Motor1_IN2 = 0;
			Motor2_IN1=1;
			Motor2_IN2=0;
		 LED  = 0; 	 //LED灯熄灭
		 BEEP = 0;	 //蜂鸣器关掉
		}
		else if(distance < 50)	  //超声波距离判断
		{
			Motor1_IN1 = 0;
	    Motor1_IN2 = 0;
			Motor2_IN1 = 0;
	    Motor2_IN2 = 0;
		 LED  = 1;   //LED灯亮起
		 BEEP = 1;   //蜂鸣器响起
		}
	 }
		
	 if(flag == 2)
	 {
		 if(Dat_rxd==0x01)
				{ 
			 Motor1_IN1 = 0;
	     Motor1_IN2 = 0;
			Motor2_IN1 = 0;
	    Motor2_IN2 = 0;
				}
				else if(Dat_rxd==0x02)
				{
			  Motor1_IN1 = 1;
	     Motor1_IN2 = 0;
			Motor2_IN1=1;
			Motor2_IN2=0;
				}
					else if(Dat_rxd==0x03)
				{
			  Motor1_IN1 = 1;
	     Motor1_IN2 = 0;
			Motor2_IN1=0;
			Motor2_IN2=0;
				}
					else if(Dat_rxd==0x04)
				{
			  Motor1_IN1 = 0;
	     Motor1_IN2 = 0;
			Motor2_IN1=1;
			Motor2_IN2=0;
				}
	 }

		if(key1 == 0)
		{
		 Delay(100); //消除抖动
		 if(key1 == 0)
		 {
		  flag = 1;
		 }
		}

		if(key2 == 0)
		{
		 Delay(100);//消除抖动
		 if(key2 == 0)
		 {
		  flag = 2;
		 }
		}

	
	}
	  
}

void Delay10us()
{
	TL0=0xF5;
	TH0=0xFF;
	TR0=1;
	while (TF0==0);
	TR0=0;
	TF0=0;
}

四、实现现象

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

基于单片机的智能语音识别与处理系统设计_哔哩哔哩_bilibili

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

点击进入百度网盘下载源代码资料

相关推荐
叁散21 小时前
实验项目1 RFID 标签实验
单片机·嵌入式硬件
比奇堡派星星1 天前
MCU 裸机时间片调度系统
单片机·嵌入式硬件
安科瑞刘鸿鹏171 天前
工业自动化系统中抗晃电保护的协同控制研究
运维·网络·嵌入式硬件·物联网
深圳市方中禾科技1 天前
LED驱动芯片FZH02,应用开发相关数据技术手册
单片机·嵌入式硬件·led
第二层皮-合肥1 天前
光耦瞬态响应特性:上升时间与下降时间的测试方法与误差分析
嵌入式硬件
yuanmenghao1 天前
CAN系列 — (6) CAN FD 带宽、CPU、中断:工程上是如何一起算的?
网络·驱动开发·单片机·mcu·自动驾驶·信息与通信
Arciab1 天前
51单片机_蜂鸣器
单片机·嵌入式硬件·51单片机
SmartRadio1 天前
在CH585M代码中如何精细化配置PMU(电源管理单元)和RAM保留
linux·c语言·开发语言·人工智能·单片机·嵌入式硬件·lora
qq_411262421 天前
纯图像传感器(只出像素),还是 Himax WiseEye/WE1/WE-I Plus 这类带处理器、能在端侧跑模型并输出“metadata”的模块
人工智能·嵌入式硬件·esp32·四博智联
不脱发的程序猿1 天前
嵌入式开发中C++内存泄漏的场景与解决办法
单片机·嵌入式硬件·嵌入式