找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1649|回复: 7
打印 上一主题 下一主题
收起左侧

如何让单片机控制播报模块随机播报声音或显示屏显示随机图片

[复制链接]
跳转到指定楼层
楼主
ID:547210 发表于 2019-11-16 20:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100黑币
最好用STC15系列的单片机产生随机的图片。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:617449 发表于 2019-11-16 22:19 | 只看该作者
1、是什么样的图片
2、显示用什么?真彩还是黑白?
回复

使用道具 举报

板凳
ID:25310 发表于 2019-11-17 08:09 | 只看该作者
产生随机数:
rand()是一个可以生成随机数的函数随机数,函数返回的随机数在0-RAND_MAX(32767)之间;
rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在0~99之间;
使用rand()函数需添加头文件:#include <stdlib.h>


建个数组,产生随机数后调用数组里面的子函数处理随机语音或图片,
MCU控制串口语音模块
MCU调用EEPROM中图片显示到LCD。

评分

参与人数 1黑币 +10 收起 理由
aaaa520 + 10 赞一个!

查看全部评分

回复

使用道具 举报

地板
ID:390150 发表于 2019-11-17 11:01 | 只看该作者
用stm32系列比较好,因为32系列的内存大,运算速度快,和语音播报模块和显示模块都可以很好的通信,我也正在研究stm32驱动语音模块的课设
回复

使用道具 举报

5#
ID:547210 发表于 2019-11-17 15:04 | 只看该作者
来51学习1 发表于 2019-11-16 22:19
1、是什么样的图片
2、显示用什么?真彩还是黑白?

图片都可以,可以用12864,主要是用单片机控制显示模块随机显示16张图片
回复

使用道具 举报

6#
ID:466505 发表于 2019-11-17 15:15 | 只看该作者
对某个变化的电压进行ADC转换,每次取最后一位数,16次就凑成一个int 8次凑成 1个char,这样就很随机了
回复

使用道具 举报

7#
ID:547210 发表于 2019-11-17 15:21 | 只看该作者
pcbboy 发表于 2019-11-17 08:09
产生随机数:
rand()是一个可以生成随机数的函数随机数,函数返回的随机数在0-RAND_MAX(32767)之间;
rand ...

是不是下面rand()随机函数,如果用单片机控制12864随机显示图片或控制语音模块随机播报声音,用rand()随机函数像下面一定要用定时器吗

#include<reg52.h>  
#include<stdlib.h> //包含 rand()随机函数的头文件
unsigned char t,k,i,j,a,f,n[10];
//t 是计时变量,k 是按键标志,i 是数组下标,f 是随机数重复标志,n[10]
是存放随机数的数组


void init()      //初始化函数
{
    t = 0;
    i = 0;
    f = 0;
    k = 0;
    TMOD = 0x02;    //设置定时器 0 为工作方式 2
    TH0 = 7;        //装初值                          
    TL0 = 7;                                 
    EA = 1;         //开总中断
    ET0 = 1;        //开定时器 0 中断
    TR0 = 1;        //启动定时 0
    EX0 = 1;        //开外部中断 0,同按键的效果一样
    IT0 = 1;        //下降沿触发   
}
void main()
{


    init();
    while(1)
    {
        while(k)                     //外部中断 0 触发循环
        {
            if(!i)                  //i=0时取第一个随机数放入数组
n[0]
            {
                srand(t);           //随机数初始化      
                a = (char)(rand() % 10); //取随机数(0~9)
                n[0] = a;              //存入数组
                i++;                 //数组下标加 1
            }
            else
                while(i < 10)             //存放剩下的 9 个随机数
                {  
                    srand(t);           //随机数初始化      
                    a = (char)(rand() % 10);  //取随机数


                    for(j = 0; j < i; j++)      //与前面的随机数比较
                    {  
                        if(n[j] == a)        //与前面的随机数相同
                            f = 1;           //标志置 1  
                    }
                    if(f)                  //有重复执行
                    {  
                        f = 0;               //标志清 0
                        continue;          //结束本次循环
                    }
                    n = a;                //不同则存入数组中
                    i++;                   //数组下标加 1
                }  
        }
    }
}
void inter0() interrupt 0    //外部中断 0


{
    k = 1;                     //按键标志置 1,主函数执行取随机数  
}
void time0() interrupt 1     //定时器 0 中断
{         
    t++;        //时间加 1
    if(t == 100)
    {
        t = 0;  
    }
}  
回复

使用道具 举报

8#
ID:547210 发表于 2019-11-17 15:30 | 只看该作者
巨人肩上看世界 发表于 2019-11-17 11:01
用stm32系列比较好,因为32系列的内存大,运算速度快,和语音播报模块和显示模块都可以很好的通信,我也正 ...

我现在主要用的是stc系列,主要是如何用MCU控制一些模块来产生一些随机的东西(数字,图片,语音等)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表