有幸申请到了武汉芯源公司的大学计划板开发板,本次结合历程探索学习,应一位小学教师朋友的需要,对孩子兴趣启蒙并对孩子们声音大小提醒,故使用cw32f030c8t6mcu开发这款多功能语音播报提醒装置

功能 如下:

1,开机播放一段开机音频,节奏灯跳动

2,检测环境分贝数

3,根据分贝大小播放触发音频,并升降电机升起

4,三个按键➕lcd屏可视画调节参数

(正片照:节奏灯,升降电机)

(反面照:lcd屏幕,三个按键)

(上面照:usb供电触发口,开关)

功能演示:(由于csdn无法上传视频,给出哔哩哔哩链接  https://b23.tv/3kR70Zf?share_medium=android&share_source=qq&bbid=XXE5484E23ECCA74654CCFCEB674878AF4B29&ts=1688880479575

所用模块:

声音检测模块x1

录音播放模块x2

升降步进电机x1

3w扬声器x1

惠普有源音箱x1

大学计划版套件(mcu lcd屏)

节奏阵列灯x1

PCB主板原理图:

主要代码:

include "main.h"
#include "OLED_I2C.h"
#include "LCD_calculate.h"
#include "Lcd_Driver.h"
#include "stdio.h"

#include "bujin.h"
#include "adc.h"
#include "key.h"
#include "led.h"

u8 flash_buff[20];
extern u8 mode; 
extern  u8 time_selset_status;
static float val;
static u8 count=0,tongji;
void Noise_Process(float dB_val);
void alarm_Tick(void);
void Lcd_Process(void);
void arm_Process();
u8   AT_flag=0;
u8   dB_flag=0;
s32  dB_time;
float Trag_dB=50.0;
u16   Trag_time=300;
u16   Fall_time=180;
u16  Delay_time=3;
u8 fall_flag;
extern u8 Speed_level;
int main()
{    
          
    Sys_64M_Init();               //系统时钟64M,后面将这个函数都放在cw_systick库文件里面
    SysTick_Init(64000000);

My_ADC_Init();
    BuJin_Init();
    LED_Init();

KEY_Init();   
    Lcd_Init();
    Lcd_Clear(WHITE);   
    JiDian_Music_Action(1);

REC_1_Trag();
    PA05_SETHIGH();
    S_Delay(2000);
    BoFan_1_Trag();
    JiDian_USB_Action(0);

while(1)
    {
 
        if(uwTick>30000&uwTick<35000)
        {
            JiDian_Music_Action(0);
        }
        Noise_Process(Trag_dB);
        arm_Process();
        Key_Process();
    }
}

void Noise_Process(float dB_val)
{

u8 buff[20],buff1[20];
     //25次统计如果有15次统计 大于设定值,仍然计时  如果50到150次之内,则不计算时间,<50 时间--
    for(count=0;count<25;count++)
    {
           if(CW_ADC->ISR_f.EOC==1)//CW_ADC->ISR_f.EOC为1标志AD转换完成
           {
        
                  val=((float)CW_ADC->RESULT0_f.RESULT*3.3/4095+0.6)*120/2.5;
                if(val>dB_val)    { tongji++;}        
           }
    
    }
    if(count==25)
    {
    
       count=0;
       if(tongji>=15)
       {
           dB_flag=1;
         
       }
       if(tongji<=5)
       {
           dB_flag=2;
          
       }
       if(tongji>5&&tongji<15)
       {
           dB_flag=0;
               
       } 
       tongji=0;
       if(mode==0)
       {
               Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"     主界面         ");
            Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"    参数设置     ");    
           sprintf((char*)buff,"    %3.2f(dB)     ",val);
           sprintf((char*)buff1," %2.1f",Trag_dB);
           Gui_DrawFont

按键处理代码:

#include "key.h"
#include "LCD_calculate.h"
#include "Lcd_Driver.h"
#include "bujin.h"
extern  float Trag_dB;
extern u16  Trag_time;
extern u16   Fall_time;
extern u16  Delay_time;
extern u16 BuJin_time;
u8 mode=0;  //0 主界面 1 修改触发分贝数 2 修改触发时间 3设置开机录音,设置触发录音
u8 Trag;
u8 Cont;
u8 Speed_level=5;
u8 time_selset_status=0;
u8 rec_status,bo_status;

u8 flash_data[20];
#define KB1 GPIO_ReadPin(CW_GPIOB,GPIO_PIN_13)
#define KB2 GPIO_ReadPin(CW_GPIOB,GPIO_PIN_14)
#define KB3 GPIO_ReadPin(CW_GPIOA,GPIO_PIN_4)
#define KB4  GPIO_ReadPin(CW_GPIOB,GPIO_PIN_2)
#define KEYPORT  KB1|(KB2<<1)|(KB3<<2)|(KB4<<3) |0xf0 
void KEY_Init(void)
{    
      RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOB,ENABLE);
    
      GPIO_InitTypeDef GPIO_InitStruct; 
//      GPIO_InitStruct.IT = GPIO_IT_FALLING;  //KEY_UP 
      GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;
      GPIO_InitStruct.Pins = GPIO_PIN_13|GPIO_PIN_14;
      GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
      GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
     
    
//      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
//      GPIO_InitStruct.Pins = GPIO_PIN_8|GPIO_PIN_9;
//      GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
//      GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
//        PB08_SETLOW();
//        PB09_SETLOW();
//      CW_GPIOB->FILTER_f.FLTCLK=6; //寄存器设置滤波器
//      
//      CW_GPIOB->ICR_f.PIN13=0;
//      __disable_irq();
//      NVIC_EnableIRQ(GPIOB_IRQn);
//      __enable_irq();
}

void POW_1_Trag()
{
   PA00_SETLOW();
   S_Delay(50);
   PA00_SETHIGH();
}
void POW_2_Trag()
{
   PA04_SETLOW();
   S_Delay(50);
   PA04_SETHIGH();
}

void REC_1_Trag()
{
   PA03_SETLOW();
   S_Delay(50);
   PA03_SETHIGH();
}

void REC_2_Trag()
{
   PA07_SETLOW();
   S_Delay(50);
   PA07_SETHIGH();
}

void BoFan_1_Trag()
{
   PA01_SETLOW();
   S_Delay(50);
   PA01_SETHIGH();
    
//    PA02_SETLOW();
//   S_Delay(50);
//   PA02_SETHIGH();
}

void BoFan_2_Trag()
{
   PA05_SETLOW();
   S_Delay(50);
   PA05_SETHIGH();
}

void JiDian_USB_Action(u8 Open_Off)
{
    if(Open_Off==1)
    {
          PA08_SETHIGH();
    }
        if(Open_Off==0)
    {
          PA08_SETLOW();
    }
}
void JiDian_Music_Action(u8 Open_Off)
{
    if(Open_Off==1)
    {
          PA09_SETHIGH();
    }
        if(Open_Off==0)
    {
          PA09_SETLOW();
    }
}
void Key_Read()
{
   u8 keyRead;
   keyRead=(KEYPORT)^0xFF;
   Trag=keyRead&(keyRead^Cont);
   Cont=keyRead;
}

void Key_Process()
{
    static u8 num=0,num1=0,num2=0,video_Trag=0,video_Open=0,status=0;
    static u16 Time=0;
    static u32 keyTick=0;
    if(uwTick-keyTick<10) return;
    __NVIC_DisableIRQ(SysTick_IRQn);
    keyTick=uwTick;
    Key_Read();
    if(mode==1)
    {
            
        if(Trag==0x01)
        {
           Trag_dB+=0.5;
        }
        if(Trag==0x04)
        {
            Trag_dB-=0.5;
        }
    }
    if(mode==2)
    {
        if(time_selset_status==0)
        {
         time_selset_status=1;
                     Lcd_Clear(WHITE);
                   Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  时间阈值设置  ");
                   Gui_DrawFont_GBK16(10,116,RED,GRAY1,"增加");
                   Gui_DrawFont_GBK16(85,116,RED,GRAY1,"减少");
            Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"点击绿键选中下个");
        }
        else if(time_selset_status==1)
        {
            if(Trag==0x01)
            {
               Trag_time+=5;
            
            }
            if(Trag==0x04)
            {
                Trag_time-=5;
        
            }
            if(Trag==0x02)
            {
                time_selset_status=2;
            
            } 
    
           
        }
        else if(time_selset_status==2)
        {
            if(Trag==0x01)
            {
               Fall_time+=5;
            
            }
            if(Trag==0x04)
            {
                Fall_time-=5;
            
            }
            if(Trag==0x02)
            {
                time_selset_status=3;
                    Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  开机音频设置  ");                
            }
        
        }
        else if(time_selset_status==3)
        {
            if(Trag==0x01)
            {
               Delay_time+=1;
            
            }
            if(Trag==0x04)
            {
                Delay_time-=1;
            
            }
            if(Trag==0x02)
            {
                time_selset_status=0;
            
            }
            
        }
        
    }
    if(mode==3)//开机音频设置
    {
        
        if(video_Open==0&&Trag==0x01)//按键一按下,录制页面
        {
                 
             S_Delay(30);            
             REC_1_Trag();//开机音频录制
            
             rec_status=1;
             Lcd_Clear(WHITE);
             Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  开机音频录制  ");
             Gui_DrawFont_GBK16(0,40,WHITE,BLACK," 录制中******  ");
             Gui_DrawFont_GBK16(0,100,WHITE,BLACK,"停止");
             Gui_DrawFont_GBK16(0,116,WHITE,BLACK,"录制");
             video_Open=1;
            return;
        }
        if(video_Open==1)
        {
           if(Trag==0x01)
           {
                 rec_status=0;
                 REC_1_Trag();//结束开机音频录制                    
                 Lcd_Clear(WHITE);
                 Gui_DrawFont_GBK16(0,40,WHITE,BLACK," 停止录制  ");
                 S_Delay(300);
                 Lcd_Clear(WHITE);
                 Gui_DrawFont_GBK16(0,0,WHITE,BLACK," 开机音频设置  ");
                 Gui_DrawFont_GBK16(10,116,RED,GRAY1,"录制");
                 Gui_DrawFont_GBK16(85,116,RED,GRAY1,"播放");
                 Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  触发音频设置    ");
               video_Open=0;
                 return;    
                            
           }

}
        if(Trag==0x04)//按键三按下,播放
        {
            if(rec_status==1)
            {
                bo_status=1;
            }
            else
            {
                bo_status=2;
            }
            Lcd_Clear(WHITE);
             JiDian_Music_Action(1);            
            BoFan_1_Trag();//开机音频播放
            S_Delay(30);
            Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  开机音频播放  ");
            Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  开机音频  ");
            Gui_DrawFont_GBK16(0,40,WHITE,BLACK," 播放中******  ");                 
            
            S_Delay(300);
            Lcd_Clear(WHITE);
            Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  开机音频设置   ");
            Gui_DrawFont_GBK16(10,116,RED,GRAY1,"录制");
            Gui_DrawFont_GBK16(85,116,RED,GRAY1,"播放");
            Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  触发音频设置    ");        
            
        }
    }
    if(mode==4)//触发音频设置
    {
        
        if(video_Trag==0&&Trag==0x01)//按键一按下,录制页面
        {
             Lcd_Clear(WHITE);            
             REC_2_Trag();//触发音频录制
             Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  触发音频录制  ");
             Gui_DrawFont_GBK16(0,40,WHITE,BLACK," 录制中******  ");
             Gui_DrawFont_GBK16(0,100,WHITE,BLACK,"停止");
             Gui_DrawFont_GBK16(0,116,WHITE,BLACK,"录制");
             video_Trag=1;
            return;
        }
        if(video_Trag==1)
        {
           if(Trag==0x01)
           {
                 REC_2_Trag();//结束触发音频录制                    
                 Lcd_Clear(WHITE);
                 Gui_DrawFont_GBK16(0,40,WHITE,BLACK," 停止录制  ");
                 S_Delay(300);
                 Lcd_Clear(WHITE);
                 Gui_DrawFont_GBK16(0,0,WHITE,BLACK," 触发音频设置  ");
                 Gui_DrawFont_GBK16(10,116,RED,GRAY1,"录制");
                 Gui_DrawFont_GBK16(85,116,RED,GRAY1,"播放");
                 Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  主界面   ");
                 video_Trag=0;
                 return;    
                            
           }

}
        if(Trag==0x04)//按键三按下,播放
        {
            Lcd_Clear(WHITE);        
            BoFan_2_Trag();//触发音频播放
            Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  触发音频播放  ");
            Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  触发音频  ");
            Gui_DrawFont_GBK16(0,40,WHITE,BLACK," 播放中******  ");                 
            
            S_Delay(300);
            Lcd_Clear(WHITE);
            Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  触发音频设置   ");
            Gui_DrawFont_GBK16(10,116,RED,GRAY1,"录制");
            Gui_DrawFont_GBK16(85,116,RED,GRAY1,"播放");
            Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"     主界面      ");        
            
        }
    }
    if(mode==5)
    {
        
        if(Trag==0x01)
        {
           Speed_level--;
           BuJin_time+=2;
           if(BuJin_time>=21)
           {
                BuJin_time=21;
                Speed_level=0;
           }
        }
        if(Trag==0x04)
        {
            Speed_level++;
            BuJin_time-=2;
            if(BuJin_time<2)
            {
               BuJin_time=2;
                Speed_level=10;
            }
        }
    }    
    if(mode==6)
    {
        
        if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_13)==0)
        {
           motoni();
        }
        if(KB3==0)
        {
             motoshun();
        }
        else
        {
             PB08_SETLOW();
             PB09_SETLOW();
             PB10_SETLOW() ;
             PB11_SETLOW();
        }
    }        
        
    if(time_selset_status==0)
    {
        if(Trag==0x02) 
        {
            
                if(mode==0)
                {
                    Lcd_Clear(WHITE); 
                    Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  分贝阈值设置   ");
                    Gui_DrawFont_GBK16(10,116,RED,GRAY1,"增加");
                    Gui_DrawFont_GBK16(85,116,RED,GRAY1,"减少");
                    Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  时间阈值设置   ");
                    mode=1;
                    status=0;
                }
                else if(mode==1)
                {
                  
        
        
                   mode=2;
                    status=0;
                    return;
                }
                
                else if(mode==2)
                {
                     Lcd_Clear(WHITE); 
                    Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  开机音频设置  ");
                    
                    Gui_DrawFont_GBK16(10,95,RED,GRAY1,"录制");
                    Gui_DrawFont_GBK16(80,95,RED,GRAY1,"播放");
                    Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  触发音频设置    ");
                    mode=3;    
                }
                else if(mode==3)
                {
                     Lcd_Clear(WHITE); 
                    Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  触发音频设置  ");
                    
                    Gui_DrawFont_GBK16(10,95,RED,GRAY1,"录制");
                    Gui_DrawFont_GBK16(80,95,RED,GRAY1,"播放");
                    Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  升降电机调速   ");
                    mode=4;    
                }

else if(mode==4)
                {
                    if(status==0)
                    {
                        Lcd_Clear(WHITE); 
                        Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  升降电机调速   ");
                        Gui_DrawFont_GBK16(10,116,RED,GRAY1,"增加");
                        Gui_DrawFont_GBK16(85,116,RED,GRAY1,"减少");
                        Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"  升降电机控制  ");
                        mode=5;
                        video_Open=0;
                        video_Trag=0;
                    }
                }
                else if(mode==5)
                {
                    if(status==0)
                    {
                        Lcd_Clear(WHITE); 
                        Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"  升降电机控制  ");
                        Gui_DrawFont_GBK16(10,116,RED,GRAY1,"升起");
                        Gui_DrawFont_GBK16(85,116,RED,GRAY1,"下降");
                        mode=6;
                        video_Open=0;
                        video_Trag=0;
                        Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"     主界面     ");
                    }
                }
                else if(mode==6)
                {
                    if(status==0)
                    {
                        Lcd_Clear(WHITE); 
                        Gui_DrawFont_GBK16(0,0,WHITE,BLACK,"       主界面         ");
                        Gui_DrawFont_GBK16(0,144,GREEN,BLACK,"   分贝阈值设置   ");
                        mode=0;
                        video_Open=0;
                        video_Trag=0;
                        
                    }
                }
            }
          }

__NVIC_EnableIRQ(SysTick_IRQn);
        }

基于cw32f030c8t6的多功能语音播报提醒装置装置相关推荐

  1. JAVA小功能语音播报功能

    JAVA小功能实现----语音播报功能 来点关注吧 1.先创建一个staticTools类添加如下代码 2.导入jacob.jar包 然后进行window配置 3.复制如下代码到staticTools ...

  2. 多功能语音播报器使用手册!

    通信说明 数据发送间隔:必须大于10毫秒 指令测试 波特率默认115200 串口根据实际情况选择,串口选择下拉框会自动搜索系统当前可用的所有串口 系统参数

  3. 51单片机温度语音播报系统TTS播报DS18B20温度LCD1602显示

    实践制作DIY- GC0023-温度语音播报系统 一.功能说明: 基于51单片机设计-温度语音播报系统 功能介绍: 1.STC89C52单片机(STC89C51/52 AT89C51/52 任选其一) ...

  4. PLC语音播报器Modbus播报器485播报器

    多功能语音播报器 一.功能介绍: 支持语音合成(文字转语音):类真人发声,发音自然,非同类产一字一顿新的机械式语音: 支持音频文件播放:用户可以自定义任何mp3或wma格式音频: 支持语音合成与音频混 ...

  5. 基于Arduino的多功能智能交通信号灯的设计与实现 ---------对盲人语音播报,红灯结束时铃声提醒,信号灯倒计时和闯红灯语音劝阻

    ** 基于Arduino的多功能智能交通信号灯的设计与实现 ---------对盲人语音播报,红灯结束时铃声提醒,信号灯倒计时和闯红灯语音劝阻 ** 魏树鸿, 1.系统设计思路 a.: 满足基本信号灯 ...

  6. php加入语音播报功能_PHP实现语音播报功能

    大家估计都知道现在很多AI音响能够给你播报天气,叫你起床...甚至能够接受语音指令!所谓的人工智能音响,听起来很高大上,都说PHP是最好的编程语言,今天我就带大家来实现一个语音播报功能!先大体说一个思 ...

  7. 案例分享——智能手表(全套解决方案:生理监测、久坐提醒、来电提醒、OTA、无线通信、语音播报、长时间待机等)

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...

  8. iOS推送语音播报(类似支付宝收款提醒)

    需求分析 实现类似支付宝微信收款后的语音播报如:支付宝到账xx元.要求是APP在前台运行.锁屏.杀死进程后都会有语音播报.那想到的解决方案就是利用推送了. 功能实现思路分析 上面说了,要使用推送,也就 ...

  9. iOS 推送语音播报(类似支付宝微信的收款提醒)

    项目需求: 近期项目有个需求,实现类似支付宝微信收款后的语音播报如:支付宝到账xx元.要求是APP在前台运行.锁屏.杀死进程后都会有语音播报. 预想方案: 1.通过UIBackgroundTaskId ...

最新文章

  1. 嘿,是时候重新认识下海淘了
  2. 写python的c扩展简介
  3. 洛谷P4322 最佳团伙(树上dp)
  4. xenserver6.2 内存leak故障处理
  5. IDLDrawWidaget Activex
  6. 我的世界java导出皮肤_我的世界Alex1.8夕立poi皮肤
  7. 斐波那契数列连续十项的和
  8. python数据分析-python数据统计分析
  9. Toad for Oracle Authorization key
  10. Oracle11g客户端client的下载与安装
  11. Global Shutter(全局快门)与Rolling Shutter(卷帘快门)的区别与比较
  12. 真西游记java,原来《西游记》原著真的很吓人,我们都被86版西游记骗了?
  13. RuoYi(若依) 微服务分离版 启动及常见问题总结
  14. float 精度探究
  15. 【Qt Quick】零基础入门系列之安装与卸载(一)
  16. Python通过fake_useragent实现生成随机UserAgent
  17. swift转场动画_Swift游乐场的演变
  18. 怎么去掉input textarea 选中后的边线框,textarea 不可以拉
  19. 9款好看又实用的手机APP UI模板
  20. 智能手机PDR和VDR思考

热门文章

  1. 简单介绍JS与JSP的区别
  2. epson爱普生喷头开发知识
  3. hive 启动服务命令及连接
  4. centos7 安装 apollo
  5. mysql 算时间戳_mysql 时间戳
  6. fetchall oracle,连接fetchall数据库
  7. 东北林业大学第15届校赛(大二组) 题解
  8. ChatGPT无限卡Cloudflare 验证你是真人
  9. 【电子学会】2021年12月Python二级 -- 编程题37
  10. 小米8android p慢,小米8更新MIUI10.1稳定版:基于安卓P+超级夜景+960帧慢动作