[原创]偶地第1件独立作品:用SYN6288语音合成芯片制作的简易公交车报站器[图片+视频]

2020-01-23 14:26发布

好久没来啦,发个新作品。

学单片机一年了,总算独立完成一件完整的东东,先上照片:



(原文件名: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);        //延时
        }
}

一周热门 更多>