51单片机JQ8900通信
- 51单片机
- 串口通信方式
- 实现功能
- 实现功能
- 接线图实物
51单片机
使用的是普中51-单核-A5的板子
串口通信方式
、
实现功能
测试语音播报模块一线串口模式。
在上位机(电脑)端输入字符1(通过串口调试助手),语音播报模块播放相应音频。
实现功能
// An highlighted block
#include <reg52.h>
#define uchar unsigned char
sbit key1=P0^0;
sbit led1=P0^1;
sbit key2=P0^7;
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
char code array[11] = {"hello world"};
char code NextFile[] = {0xAA, 0x06, 0x00, 0xB0};
char code Path[] = {0xAA, 0x08, 0x10, 0x02, 0x2F, 0xB9, 0xE3, 0xB8, 0xE6, 0x2A, 0x2F, 0xD0, 0xA1, 0xC3, 0xD7, 0x2A, 0x4D, 0x50, 0x33, 0x8B, }; // flash /1???*/D??×*MP3
unsigned char flag = 0; //标志位
/*初始化串口函数*/
void init_uart()
{TMOD = 0x20; //设定定时器工作方式2 8位初值自动重装定时/计数器SCON = 0x50; //10位异步收发器(8位数据) 打开串口接收允许TH1 = 0xF3; //4800波特率TL1 = 0xF3;PCON = 0x80; //波特率增倍TR1 = 1; //打开定时器1EA = 1; //打开中断总开关ES = 1; //允许串行口中断
}void Delay1us ( int T )
{T = T - 70;do{;}while ( T-- );
}sbit sda=P1^0; /*ò???′??ú·¢?íòy?? */
void SendData ( u8 addr )
{u8 i;EA = 0;/*·¢?íê±1?μ??D??£?·à?1?D??ó°?ìê±Dò */sda = 1;/*?aê?à-?? */Delay1us ( 1000 );sda = 0;/*?aê?òyμ???*/Delay1us ( 2200 );/*′?′|?óê±×?éùòa′óóú2ms£?′?2?êy?óê±?a310ms */for ( i = 0; i < 8; i++ ) /*×ü128??êy?Y */{sda = 1;if ( addr & 0x01 ) /*3:1±íê?êy?Y??1,??????ó?á?????3?±íê? */{Delay1us ( 500 );sda = 0;Delay1us ( 210 );}else /*1£o3±íê?êy?Y??0 ,??????ó?á?????3?±íê? */{Delay1us ( 210 );sda = 0;Delay1us ( 500 );}addr >>= 1;}sda = 1;EA = 1;
}void send_data(unsigned char c)
{SBUF = c;while(!TI);TI = 0; //这里有TI 置 0了 不需要在串口中断再次写 否则会冲突
}
/*主函数入口*/
void main()
{ unsigned char i;init_uart();while(1){ if(flag == 1) {for(i=0;i<11;i++) //我这里就是发送 hello world {send_data(array[i]); } flag=0;led1=0;key1=1;SendData(0x0a) ; //播报SendData(0x02);SendData(0x0b); Delay1us (500 );led1=1;} if ( key2== 0 ){led1=0;key1=1;SendData(0x0a) ; //设置音量SendData(0x00);SendData(0x04); SendData(0x0C);Delay1us (500 );led1=1;}}
}/*串口中断服务函数*/
void uart_dispose() interrupt 4
{unsigned char dat; //存放数据if(RI == 1) //如果有数据来{dat = SBUF;//接收数据switch(dat){case '1':flag = 1;break; default:flag = 0;break;}RI = 0; //软件置0}/*发送字节函数那里已经有TI置0 这里不加。*/
}
接线图实物
注:设定单片机P1^0口为一线串口控制口。