STC11L08XE_study01

1.使用了 P0,P1,P2,P3,P4
2.
在这里插入图片描述
3.
使用到了定时器,并把定时器计数数率的模式调为了12T模式
4.
在这里插入图片描述
5.
在这里插入图片描述
6.
在这里插入图片描述
7.main

/*******************************************************
**	波特率:9600 bit/S
**  延时口令模式: 即识别时都说“小明”这个口令唤醒后,如果15秒内不进行语音识别则退出唤醒
/*********************************************************/


#include "config.h"
/************************************************************************************/
//	nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
//	LD_ASR_NONE:		表示没有在作ASR识别
//ASR,英文的全称是Automated?Speech?Recognition,即自动语音识别技术,它是一种将人的语音转换为文本的技术。
//语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。
//由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。
//语音识别系统的性能大致取决于以下4类因素:1.?识别词汇表的大小和语音的复杂性;2.?语音信号的质量;3.?单个说话人还是多说话人;4.?硬件。
//	LD_ASR_RUNING:		表示LD3320正在作ASR识别中
//	LD_ASR_FOUNDOK:		表示一次识别流程结束后,有一个识别结果
//	LD_ASR_FOUNDZERO:	表示一次识别流程结束后,没有识别结果
//	LD_ASR_ERROR:		表示一次识别流程中LD3320芯片内部出现不正确的状态
/***********************************************************************************/
uint8 idata nAsrStatus = 0;
void MCU_init();//对4组引脚进行了不同的初始化、选择了定时器时钟模式、选择定时器模式、定时器的初值、定时器/计数器溢出标志位定时器开始计时、定时器0的中断允许控制位、设置管脚模式、//外部中断0中断请求标志位、允许外部中断0中断、开总中断控制位
void ProcessInt0(); //识别处理函数
void delay(unsigned long uldata);
void User_handle(uint8 dat);//用户执行操作函数
void Delay200ms();
void Led_test(void);//单片机工作指示
uint8_t G0_flag = DISABLE; //运行标志,ENABLE:运行。DISABLE:禁止运行
sbit LED = P4 ^ 2; //信号指示灯
int over_time; 

sbit SRD1 = P1 ^ 7;
sbit SRD2 = P1 ^ 6;
sbit SRD3 = P1 ^ 5;
sbit SRD4 = P1 ^ 4;
sbit SRD5 = P1 ^ 3;
sbit SRD6 = P1 ^ 2;//凭感觉改的-----------------------------------------------------------------------------------------------------------------------------------------------------


/***********************************************************
* 名    称: void  main(void)
* 功    能: 主函数	程序入口
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
**********************************************************/
void  main(void)
{
	uint8 idata nAsrRes;
	uint8 i = 0;
	P1M0 = 0xFF;
	P1M1 = 0x00;
	SRD1 = SRD2 = SRD3 = SRD4 = 0;
	Led_test();
	MCU_init();
	LD_Reset();
	UartIni(); /*串口初始化*/
	nAsrStatus = LD_ASR_NONE;		//	初始状态:没有在作ASR
	//UARTSendByte(0);//---------------------------------------------------------------------------
	while(1)
	{
		if(over_time>=500)
		{
			over_time=0;
			G0_flag = DISABLE;
			LED = 1;
			UARTSendByte(0x38);//超时十进制8--------------------------------------------------------------------------
		}
		switch(nAsrStatus)
		{
		case LD_ASR_RUNING:
		case LD_ASR_ERROR:
			break;
		case LD_ASR_NONE:
		{
			nAsrStatus = LD_ASR_RUNING;
			if (RunASR() == 0)	/*	启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/
			{
				nAsrStatus = LD_ASR_ERROR;
			}
			break;
		}
		case LD_ASR_FOUNDOK: /*	一次ASR识别流程结束,去取ASR识别结果*/
		{
			nAsrRes = LD_GetResult();		/*获取结果*/
			User_handle(nAsrRes);//用户执行函数
			nAsrStatus = LD_ASR_NONE;
			break;
		}
		case LD_ASR_FOUNDZERO:
		default:
		{
			nAsrStatus = LD_ASR_NONE;
			break;
		}
		}// switch
	}// while

}
/***********************************************************
* 名    称: 	 LED灯测试
* 功    能: 单片机是否工作指示
* 入口参数: 无
* 出口参数:无
* 说    明:
**********************************************************/
void Led_test(void)
{
	LED = ~ LED;
	Delay200ms();
	LED = ~ LED;
	Delay200ms();
	LED = ~ LED;
	Delay200ms();
	LED = ~ LED;
	Delay200ms();
	LED = ~ LED;
	Delay200ms();
	LED = ~ LED;
}
/***********************************************************
* 名    称: void MCU_init()
* 功    能: 单片机初始化
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
**********************************************************/
void MCU_init()
{
	P0 = 0xff;
	P1 = 0x00;
	P2 = 0xff;
	P3 = 0xff;
	P4 = 0xff;

	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD |= 0x01;		//设置定时器模式
	
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x28;		//设置定时初值
	TF0 = 0;		//清除TF0标志
//	定时器/计数器0溢出标志位.当T0允许计数后,T0从初值开始加1计数,最高
//位产生溢出时,置“1”TF0,并向CPU请求中断,当CPU响应时,由硬件清"0”
//TF0,TF0也可以由程序查询或清“0”

	TR0 = 1;		//定时器0开始计时
	ET0=1;

	LD_MODE = 0;		//	设置MD管脚为低,并行模式读写
	IE0 = 1;
	EX0 = 1;
	EA = 1;
	WDT_CONTR=0x3D;
}
/***********************************************************
* 名    称:	延时函数
* 功    能:
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
**********************************************************/
void Delay200us()		//@22.1184MHz
{
	unsigned char i, j;
	_nop_();
	_nop_();
	i = 5;
	j = 73;
	do
	{
		while (--j);
	}
	while (--i);
}

void  delay(unsigned long uldata)
{
	unsigned int j  =  0;
	unsigned int g  =  0;
	while(uldata--)
		Delay200us();
}

void Delay200ms()		//@22.1184MHz
{
	unsigned char i, j, k;

	i = 17;
	j = 208;
	k = 27;
	do
	{
		do
		{
			while (--k);
		}
		while (--j);
	}
	while (--i);
}

/***********************************************************
* 名    称: 中断处理函数
* 功    能:
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
**********************************************************/
void ExtInt0Handler(void) interrupt 0
{
	ProcessInt0();
}
/***********************************************************
* 名    称:用户执行函数
* 功    能:识别成功后,执行动作可在此进行修改
* 入口参数: 无
* 出口参数:无
* 说    明:
**********************************************************/
void 	User_handle(uint8 dat)
{
	if(0 == dat)
	{
		G0_flag = ENABLE;
		over_time=0;
			UARTSendByte(0x39);//		PrintCom("<G>你好,主人");  -----------------------------唤醒小明
		LED = 0;
	}
	else if(ENABLE == G0_flag)
	{
//		G0_flag = DISABLE;
//		LED = 1;
		switch(dat)
		{
		case CODE_1:	 //餐巾纸--------------打开干垃圾桶
			over_time=0;
			SRD1 = 1;
			UARTSendByte(0x31);
			break;
		case CODE_2:	 //干燥剂---------------打开干垃圾桶
			over_time=0;
			SRD1 = 0;
			UARTSendByte(0x31);
			break;
		case CODE_3:	//橡皮泥---------------打开干垃圾桶
			over_time=0;
			SRD2 = 1;
			UARTSendByte(0x31);
			break;
		case CODE_4:		//菜叶---------------打开湿垃圾桶
			over_time=0;
			SRD2 = 0;
			UARTSendByte(0x32);
			break;
		case CODE_5:		//杂草---------------打开湿垃圾桶
			over_time=0;
			SRD3 = 1;
			UARTSendByte(0x32);
			break;
		case CODE_6:		//果皮---------------打开湿垃圾桶
			over_time=0;
			SRD3 = 0;
			UARTSendByte(0x32);
			break;
		case CODE_7:		//玻璃酒瓶---------------打开可回收垃圾桶
			over_time=0;
			SRD4 = 1;
			UARTSendByte(0x33);
			break;
		case CODE_8:		//洗手液瓶---------------打开可回收垃圾桶
			over_time=0;
			SRD4 = 0;
			UARTSendByte(0x33);
			break;
		
		
			case CODE_9:		//塑料文具---------------打开可回收垃圾桶
			over_time=0;
			SRD5 = 1;
			UARTSendByte(0x33);
			break;
		
		
			case CODE_10:		//充电电池---------------打开有害垃圾桶
			over_time=0;
			SRD5 = 0;
			UARTSendByte(0x34);
			break;
		
		
		
		case CODE_11:		//过期药物---------------打开有害垃圾桶
			over_time=0;
			SRD6 = 1;
			UARTSendByte(0x34);
			break;
		
		
		
			case CODE_12:		//水银温度计---------------打开有害垃圾桶
			over_time=0;
			SRD6 = 0;
			UARTSendByte(0x34);
			break;
		
		
		
		
		default:
			break;
		}
	}
	else
	{
		//PrintCom("请说出一级口令\r\n"); /*text.....*/
	}
}



void tm0_isr() interrupt 1
{
    TL0 = 0x00;		//设置定时初值
	TH0 = 0x28;		//设置定时初值
	WDT_CONTR=0x3D;
    if(G0_flag == ENABLE)
	{
		over_time++;
	}
		
}

(1) MCU_init

/***********************************************************
* 名    称: void MCU_init()
* 功    能: 单片机初始化
* 入口参数:
* 出口参数:
* 说    明:
* 调用方法:
*  P0,P1,P2,P3,P4
**********************************************************/
void MCU_init()
{
	P0 = 0xff;//该芯片有4组引脚,初试化,给没组引脚的每个引脚赋值高低电平。高电平为5V低电平为0V
	P1 = 0x00;
	P2 = 0xff;
	P3 = 0xff;
	P4 = 0xff;

	AUXR &= 0x7F;		//定时器时钟12T模式  
	TMOD |= 0x01;		//设置定时器模式
	
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x28;		//设置定时初值
	TF0 = 0;		//清除TF0标志
//	定时器/计数器0溢出标志位.当T0允许计数后,T0从初值开始加1计数,最高
//位产生溢出时,置“1”TF0,并向CPU请求中断,当CPU响应时,由硬件清"0”
//TF0,TF0也可以由程序查询或清“0”

	TR0 = 1;		//定时器0开始计时
	ET0=1;

	LD_MODE = 0;		//	设置MD管脚为低,并行模式读写
	IE0 = 1;
	EX0 = 1;
	EA = 1;
	WDT_CONTR=0x3D;
}

(2)

	AUXR &= 0x7F;		//定时器时钟12T模式 

在这里插入图片描述
(3)

	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x28;		//设置定时初值

在这里插入图片描述
(4)

TF0 = 0;		//清除TF0标志
//	定时器/计数器0溢出标志位.当T0允许计数后,T0从初值开始加1计数,最高
//位产生溢出时,置“1”TF0,并向CPU请求中断,当CPU响应时,由硬件清"0”
//TF0,TF0也可以由程序查询或清“0”

(5)

	TR0 = 1;		//定时器0开始计时
	

在这里插入图片描述
(6)

ET0=1;//中断允许控制位

在这里插入图片描述

(7)

	LD_MODE = 0;		//	设置MD管脚为低,并行模式读写

//驱动端口定义
sbit LD_MODE =P4^3; /读写模式选择/

(8)

	IE0 = 1;

在这里插入图片描述
(9)

	EX0 = 1;

在这里插入图片描述
(10)

EA = 1;

在这里插入图片描述
(11)

WDT_CONTR=0x3D;

在这里插入图片描述
在这里插入图片描述
(12)
在这里插入图片描述

(1)

P1M0

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)

/************************************************************************
功能描述: 	 复位LD模块
入口参数:	 none
返 回 值: 	 none
其他说明:	 none
**************************************************************************/
void LD_Reset()
{
	RSTB = 1;//sbit RSTB=P3^5;	 /*复位端口*/
	delay(5);
	RSTB = 0;
	delay(5);
	RSTB = 1;

	delay(5);
	CSB = 0;//sbit CSB=P2^1;	 /*模块片选端口*/
	delay(5);
	CSB = 1;
	delay(5);
}

在这里插入图片描述

(3)

/************************************************************************
函 数 名: 串口初始化
功能描述: STC10L08XE 单片机串口初始化函数
返回函数: none
其他说明: none
**************************************************************************/
void UartIni(void)
{
    SCON = 0x50;            //8-bit variable UART
    TMOD |= 0x20;            //Set Timer1 as 8-bit auto reload mode
    TH1 = TL1 = -(FOSC/12/32/baud); //Set auto-reload vaule
    TR1 = 1;                //Timer1 start run
    ES = 1;                 //Enable UART interrupt
    EA = 1;                 //Open master interrupt switch
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
10.
在这里插入图片描述
11.
在这里插入图片描述

/*******************************************************
**	CPU: STC11L08XE
**	晶振:22.1184MHZ
**	波特率:9600 bit/S
**  延时口令模式: 即识别时都说“小明”这个口令唤醒后,如果15秒内不进行语音识别则退出唤醒
/*********************************************************/
#include "config.h"

#define LD_INDEX_PORT		(*((volatile unsigned char xdata*)(0x8100)))
#define LD_DATA_PORT		(*((volatile unsigned char xdata*)(0x8000)))

void LD_WriteReg( unsigned char address, unsigned char dataout )
{
  LD_INDEX_PORT  = address;
  LD_DATA_PORT = dataout;
}

unsigned char LD_ReadReg( unsigned char address )
{
  LD_INDEX_PORT = address;
  return (unsigned char)LD_DATA_PORT;
}


在这里插入图片描述
12.
在这里插入图片描述

在这里插入图片描述
13.
在这里插入图片描述
14.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值