×
单片机 > 单片机程序设计 > 详情

51单片机NY3P035语音播报源程序

发布时间:2024-05-04 发布时间:
|

51单片机语音播报模块:
以8位STC89C52单片机为控制核心,利用DHT11、GY-30、MQ-2传感器实时采集温湿度、光照强度、气体浓度等环境参数,用户可以通过LCD1602液晶查看当前环境参数数据。NY3P035芯片控制语音播报,加入蓝牙通信接口电路,手机连接蓝牙模块,下位机和上位机进行通信,手机蓝牙串口界面可以接收当前的环境数据,手机发命令给单片机,可控制语音的播报。
实物图:


单片机源程序如下:

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int


uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //数据的地址

uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};

uchar code table3[]=" "; //清屏内容



sbit rs=P1^0; //LCD1602

sbit rw=P1^1; //LCD1602

sbit e=P2^5; //LCD1602


sbit SCL=P1^5; //IIC时钟引脚定义 //BH1750fvi光照强度传感器

sbit SDA=P1^6; //IIC数据引脚定义




sbit cs=P3^6; //TLC2543

sbit clk=P2^7;

sbit sdi=P2^6;

sbit sdo=P2^4;

sbit flag=P3^4;

sbit bit7=B^7;



sbit Data =P1^3; //DHT11


int temperature; //全局变量 温度

int Count; //T0中断次数


sbit KEY1=P3^5; //播放语音

//sbit KEY2=P3^6; //暂停


sbit BUSY=P2^0; //语音芯片

sbit DATA=P2^1; //语音芯片

sbit RST=P2^2; //语音芯片



void delay_ms( uint ms);

void delay1();

void ADC_read( uint ch);

void volt_result();

void disp_volt(uint value);


uchar y;

uchar first,second,third,forth;

bit date;

uint adval=0;

uint volt=0;

uchar temppp=0;

uchar flag_table[3]={0};

uchar flagx;

bit SetFlag=0; //更新时间标志位


uchar shi,ge;

uchar temp,tempp; //八个bit数据位的变量

uchar comdata; //总线接收到的数据

uchar T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp,temp_data;

uchar T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;

void music(uchar k);




uchar uart_wendu_shi,uart_wendu_ge,uart_shidu_shi,uart_shidu_ge;

uchar uart_sun_shi,uart_sun_ge;


#define SlaveAddress 0x46 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改

//ALT ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8

typedef unsigned char BYTE;

typedef unsigned short WORD;


BYTE BUF[8]; //接收数据缓存区

uchar gee,shii,bai,qian,wan; //显示变量

int dis_data;


void delay_nms(unsigned int k);


void Init_BH1750(void);


void WriteDataLCM(uchar dataW);

void WriteCommandLCM(uchar CMD,uchar Attribc);

void DisplayOneChar(uchar X,uchar Y,uchar DData);

void conversion(uint temp_data);


void Single_Write_BH1750(uchar REG_Address); //单个写入数据

uchar Single_Read_BH1750(uchar REG_Address); //单个读取内部寄存器数据

void Multiple_Read_BH1750(); //连续的读取内部寄存器数据

//------------------------------------

void Delay5us();

void Delay5ms();

void BH1750_Start(); //起始信号

void BH1750_Stop(); //停止信号

void BH1750_SendACK(bit ack); //应答ACK

bit BH1750_RecvACK(); //读ack

void BH1750_SendByte(BYTE dat); //IIC单个字节写

BYTE BH1750_RecvByte(); //IIC单个字节读


/*********************************************************************************************************************/

void delay1(uint z) //延时1ms函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=80;y>0;y--);

}


/***********************************

延时 BH1750

************************************/


/**************************************

延时5微秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数,注意时钟过快时需要修改

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5us()

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

}


/**************************************

延时5毫秒(STC90C52RC@12M)

不同的工作环境,需要调整此函数

当改用1T的MCU时,请调整此延时函数

**************************************/

void Delay5ms()

{

WORD n = 560;


while (n--);

}


//毫秒延时**************************

void delay_nms(unsigned int k)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j<121;j++)

{;}}

}


/*******************************/


void write_com(uchar com) //写指令函数

{

rw=0;

delay1(5);

rs=0;

delay1(5);

e=1;

delay1(5);

P0=com;

delay1(5);

e=0;

delay1(5);

}


void write_date(uchar date) //写数据函数

{

rw=0;

delay1(5);

rs=1;

delay1(5);

e=1;

delay1(5);

P0=date;

delay1(5);

e=0;

delay1(5);

}


void LCDinit() //初始化函数

{

uchar num;

e=0; // 时序表e初始为0

write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口

write_com(0x0c); //设置光标

write_com(0x06); //光标自动加1,光标输入方式

[1] [2] [3] [4] [5] [6] [7] [8]
51单片机NY3P035语音播报


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义