历史上的今天
今天是:2025年08月20日(星期三)
2020年08月20日 | 51单片机NY3P035语音播报源程序
2020-08-20 来源:51hei
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,光标输入方式 write_com(0x01); //清屏 write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) { // write_date(table1[num]); delay1(5); } write_com(0x80+0x40); for(num=0;num<16;num++) { // write_date(table2[num]); delay1(5); }
史海拾趣
|
有个lib库和一个头文件,在vc下编译连接过没问题的 在evc下,用emulator模式编译和连接也很正常 但是改用arm4模式来编译就连接出错,好像识别不了lib库的样子。以下是出错信息: ChildWindow.obj : error LNK2019: unresolved external symbol ...… 查看全部问答> |
|
以前都是用PICKIT3,在线编程。因为最近要烧裸片,就拿了个老古董出来,润飞的编程器。结果烧程序的时候总是提示:插座中芯片偏离正常位置,请往下移。(事实是我插得非常之正,精确无比) 有大虾遇到过类似情况吗?… 查看全部问答> |
|
我用STM32F105做can通讯,两个CAN口都要用到。CAN1用FIFO0,CAN2用FIFO1。节收到数据后进入中断处理,但我只能进入CAN1接收中断,CAN2却不能进入接收中断。大家帮我看下是哪里初始化错了。 NVIC初始化程序 void NVIC_Configuration(void) { ...… 查看全部问答> |
|
小弟最近搭了个isd4002的电路。将近50天,不能调试成功,不知哪位大侠赐教,呵呵~~。关于程序,查询开关状态,执行录音或放音,只有一个spi接口,应该不是很难啊。就一百多行,都认真分析过,datasheet也仔细读过。工作电压也改过多次(我曾遇到dat ...… 查看全部问答> |
|
有没有朋友485通讯比较了解的,求教个问题。 485调试后在收发数据都能实现,但是终端给PC发数据的时候,PC收到的数据会多出64个0xFF,例如:终端发 01 02 03 04,PC能收到:ff ff ff ...(64个) 01 02 03 04,是什么问题呢?… 查看全部问答> |
|
临时工无处不在。零售、餐饮等行业更是临时工的用人大户,尤其是在节假日期间。如何激励临时工的积极性?资深专家根据《财富》“最适宜工作的100家公司”的经验总结了5个行之有效的做法。 亲爱的安妮:今年七月中旬 ...… 查看全部问答> |




