标题: 如何让单片机控制播报模块随机播报声音或显示屏显示随机图片 [打印本页]

作者: aaaa520    时间: 2019-11-16 20:40
标题: 如何让单片机控制播报模块随机播报声音或显示屏显示随机图片
最好用STC15系列的单片机产生随机的图片。

作者: 来51学习1    时间: 2019-11-16 22:19
1、是什么样的图片
2、显示用什么?真彩还是黑白?
作者: pcbboy    时间: 2019-11-17 08:09
产生随机数:
rand()是一个可以生成随机数的函数随机数,函数返回的随机数在0-RAND_MAX(32767)之间;
rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在0~99之间;
使用rand()函数需添加头文件:#include <stdlib.h>


建个数组,产生随机数后调用数组里面的子函数处理随机语音或图片,
MCU控制串口语音模块
MCU调用EEPROM中图片显示到LCD。
作者: 巨人肩上看世界    时间: 2019-11-17 11:01
用stm32系列比较好,因为32系列的内存大,运算速度快,和语音播报模块和显示模块都可以很好的通信,我也正在研究stm32驱动语音模块的课设
作者: aaaa520    时间: 2019-11-17 15:04
来51学习1 发表于 2019-11-16 22:19
1、是什么样的图片
2、显示用什么?真彩还是黑白?

图片都可以,可以用12864,主要是用单片机控制显示模块随机显示16张图片
作者: hcfat51h    时间: 2019-11-17 15:15
对某个变化的电压进行ADC转换,每次取最后一位数,16次就凑成一个int 8次凑成 1个char,这样就很随机了
作者: aaaa520    时间: 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;  
    }
}  

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

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1