专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
[原创]偶地第1件独立作品:用SYN6288语音合成芯片制作的简易公交车报站器[图片+视频]
2020-01-23 14:26
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
8742
42
42
好久没来啦,发个新作品。
学单片机一年了,总算独立完成一件完整的东东,先上照片:
(原文件名:11.jpg)
(原文件名:12.jpg)
(原文件名:13.jpg)
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
42条回答
ciky
2020-01-26 07:29
发个按键读数的源码,大家自己改撒
/***********************************************************
**
** 北京宇音天下公司 SYN6288 中文语音合成芯片测试程序演示版
**
** 本程序用于89C51/89C52/89S51/89S52及与其兼容的其他单片机
**
** 作 者:CIKY & SPP From Dreamon-II Labs.
**
** 版权所有:追梦计算机及电子技术实验室
**
** 最后修改:2010-05-06 凌晨 03:22
**
***********************************************************/
#include <reg51.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define KEY P0 //P1用于键扫描
#define BUFLEN 32 //文字缓冲区的长度
#define HEADLEN 5 //数据包头的长度
#define LEN_OFFSET 2 //长度字节的偏移量(本例中长度不超过255字节,因此只使用1字节长度)
//数据包头(0xFD + 2字节长度 + 1字节命令字 + 1字节命令参数)
uchar head[HEADLEN] = {0xfd,0x00,0x00,0x01,0x00};
//文字(中间有需要变化的内容可在发送前修改)
uchar text[BUFLEN] = {"溶液温度 度"};
//延时1ms
void Delay1ms(uchar n)
{
uchar i=112;
while(n--)
{
while(i--);
}
}
//串口初始化
void UART_InitBaud(void)
{
SCON=0xD8 ; //晶振为11.059MHZ时,设定串口波特率为9600bit/s,方式3
TMOD=0x20 ;
PCON=0x00 ;
TH1=0xFD ;
TR1=1;
}
//串口发送数据
void UART_Trans(uchar n)
{
SBUF = n;
while(TI==0); //发送数据
TI=0;
}
//发声程序
void Speech(uchar *buf, uchar len)
{
uchar i = 0; //循环计数变量
uchar xor = 0x00; //校验码初始化
head[LEN_OFFSET] = len + 3; //计算正文长度(1命令字 + 1命令参数 + 文字长度 + 1校验位)
//发送数据包头(0xFD + 2字节长度 + 1字节命令字 + 1字节命令参数)
for(i = 0; i < HEADLEN; i++)
{
xor ^= head
;
UART_Trans(head
);
Delay1ms(2);
}
//发送文字内容
for(i = 0; i < len; i++)
{
xor ^= buf
;
UART_Trans(buf
);
Delay1ms(2);
}
UART_Trans(xor); //发送校验位
}
//主函数
void main()
{
uchar xor = 0; //校验码(正文内容的异或)
uchar i = 0; //循环计数变量
float num = 123.45; //测试值,可以由用户程序自动生成
uchar numbuf[10];
memset(numbuf,0,sizeof numbuf);
UART_InitBaud(); //初始化串口为 9600bps
while(1)
{
if(KEY != 0xff)
{
Delay1ms(10);
if(KEY != 0xff)
{
sprintf(text + 10,"%6.2f",num); //将浮点数 num 转为字符串,
//并追加到数组text[]的第6字节后
//(前6字节为字符串“当前值”)
//参见库函数sprintf()的用法
num -= 0.43;
Speech(text,20); //调用发声函数,读出指定长度数据
}
}
Delay1ms(100); //延时
}
}
加载中...
查看其它42个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
/***********************************************************
**
** 北京宇音天下公司 SYN6288 中文语音合成芯片测试程序演示版
**
** 本程序用于89C51/89C52/89S51/89S52及与其兼容的其他单片机
**
** 作 者:CIKY & SPP From Dreamon-II Labs.
**
** 版权所有:追梦计算机及电子技术实验室
**
** 最后修改:2010-05-06 凌晨 03:22
**
***********************************************************/
#include <reg51.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define KEY P0 //P1用于键扫描
#define BUFLEN 32 //文字缓冲区的长度
#define HEADLEN 5 //数据包头的长度
#define LEN_OFFSET 2 //长度字节的偏移量(本例中长度不超过255字节,因此只使用1字节长度)
//数据包头(0xFD + 2字节长度 + 1字节命令字 + 1字节命令参数)
uchar head[HEADLEN] = {0xfd,0x00,0x00,0x01,0x00};
//文字(中间有需要变化的内容可在发送前修改)
uchar text[BUFLEN] = {"溶液温度 度"};
//延时1ms
void Delay1ms(uchar n)
{
uchar i=112;
while(n--)
{
while(i--);
}
}
//串口初始化
void UART_InitBaud(void)
{
SCON=0xD8 ; //晶振为11.059MHZ时,设定串口波特率为9600bit/s,方式3
TMOD=0x20 ;
PCON=0x00 ;
TH1=0xFD ;
TR1=1;
}
//串口发送数据
void UART_Trans(uchar n)
{
SBUF = n;
while(TI==0); //发送数据
TI=0;
}
//发声程序
void Speech(uchar *buf, uchar len)
{
uchar i = 0; //循环计数变量
uchar xor = 0x00; //校验码初始化
head[LEN_OFFSET] = len + 3; //计算正文长度(1命令字 + 1命令参数 + 文字长度 + 1校验位)
//发送数据包头(0xFD + 2字节长度 + 1字节命令字 + 1字节命令参数)
for(i = 0; i < HEADLEN; i++)
{
xor ^= head;
UART_Trans(head);
Delay1ms(2);
}
//发送文字内容
for(i = 0; i < len; i++)
{
xor ^= buf;
UART_Trans(buf);
Delay1ms(2);
}
UART_Trans(xor); //发送校验位
}
//主函数
void main()
{
uchar xor = 0; //校验码(正文内容的异或)
uchar i = 0; //循环计数变量
float num = 123.45; //测试值,可以由用户程序自动生成
uchar numbuf[10];
memset(numbuf,0,sizeof numbuf);
UART_InitBaud(); //初始化串口为 9600bps
while(1)
{
if(KEY != 0xff)
{
Delay1ms(10);
if(KEY != 0xff)
{
sprintf(text + 10,"%6.2f",num); //将浮点数 num 转为字符串,
//并追加到数组text[]的第6字节后
//(前6字节为字符串“当前值”)
//参见库函数sprintf()的用法
num -= 0.43;
Speech(text,20); //调用发声函数,读出指定长度数据
}
}
Delay1ms(100); //延时
}
}
一周热门 更多>