51单片机与JQ8900语音播报模块

news/2024/11/16 18:58:30/

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口为一线串口控制口。


http://www.ppmy.cn/news/249141.html

相关文章

(转)嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)

1. CS8900A CS8900芯片是Cirrus Logic公司生产的一种局域网处理芯片&#xff0c;在嵌入式领域中使用非常常见。它的封装是100-pin TQFP&#xff0c;内部集成了在片RAM、10BASE-T收发滤波器&#xff0c;并且提供8位和16位两种接口。CS8900与ARM芯片按照16位方式连接&#xf…

Linux-2.6.20的cs8900驱动分析(一)

本博客转载于&#xff1a;http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid22535114&id1773574 一、初始化阶段 网络初始化被调用的路径为&#xff1a; init->do_basic_setup->do_initcalls->net_olddevs_init->ethif_probe2->probe_list2-&g…

NANO2410 CS8900 debugging

1. 内核启动过程中CS8900驱动始终没有加载 最终发现跟device注册有关&#xff0c;修改mach_smdk2410.c文件如下&#xff1a; /* CS8900 */static struct resource s3c_cs89x0_resources[] {[0] DEFINE_RES_MEM(0x19000000, SZ_1M),[1] DEFINE_RES_IRQ(IRQ_EINT9), };stati…

Linux-2.6.20的cs8900驱动分析(三)

本博客转载于&#xff1a;http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid22535114&id1773576 三、net_rx和net_send_packet 3.1 net_rx 在这部分将介绍cs8900驱动的两个最重要的函数&#xff0c;内核通过该两个函数实现了数据的收发。net_rx函数的主要功能是…

CS8900A网络驱动程序移植

上图为开发板上的网卡原理图&#xff0c;可得到&#xff1a; 1.CS8900A的访问基址为0x19000000 2.总线位宽为16 3.中断引脚为EINT9 驱动文件drivers/net/cs89x0.c既可以编进内核&#xff0c;也可以编译为一个可加载模块。编译进内核时&#xff0c;它的入口函数为cs89x0_pro…

LT8900低成本的无线电收发器 2.4G射频芯片 CMOS射频收发器

LT8900低成本的2.4GHz无线电收发器 概述 LT8900是一个低成本&#xff0c;完全集成CMOS射频收发器&#xff0c;GFSK数据调制解调器&#xff0c;和数据包框架&#xff0c;优化用于中GHz ISM波段。 它包含发射接收射频合成器&#xff0c;和数字调制解调器功能&#xff0c;少数外…

中兴服务器售后,中兴全兼容智能视讯服务器ZXMVC8900

全兼容智能视讯服务器ZXMVC8900 中兴全兼容智能视讯服务器ZXMVC8900采用电信交换机架构设计&#xff0c;全面支持ITU-T H.323、H.320协议&#xff0c;可通过不同网络(IP、ISDN、DDN、SDH、ATM、卫星等)接入用户终端&#xff0c;并组织召开视频会议。 XMVC8900具有全兼容各种网络…

STM32驱动JQ8900语音模块

上次写了esp32驱动JQ8900模块&#xff0c;我做设计一般会把外设先在esp32上实现一般&#xff0c;再移植到比较复杂的stm32上去。直接上正常运行的干货代码。 文章目录 一、硬件准备二、程序编写1.jq8900.c2.jq8900.h3.main.c 三、音频替换总结 一、硬件准备 STM32F10x系列任意…