找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32单片机通过语音控制led灯的颜色源程序

[复制链接]
跳转到指定楼层
楼主
这是我上个月做的一个小项目
用时15天
附件包含stm32单片机的源代码
主要是通过语音模块控制小灯的颜色改变
都是自己编写的,请大家指教

语音控制LED灯单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "WS2812B.h"
  7. #define Buf2_Max 200                                           //串口2缓存长度
  8. /************************************************
  9. ************************************************/
  10. uint8_t aa[3]={0x0000,0x0000,0x0000};                //关
  11. uint8_t bb[3]={0x00ff,0x0000,0x0000};                //红k=1
  12. uint8_t cc[3]={0x0000,0x00ff,0x0000};                //绿k=2
  13. uint8_t dd[3]={0x0000,0x0000,0x00ff};                //蓝k=3
  14. uint8_t ee[3]={0x00ff,0x00ff,0x00ff};                //白k=4
  15. uint8_t ff[3]={0x00ff,0x00ff,0x0000};                //黄k=5
  16. uint8_t gg[3]={0x0000,0x00ff,0x00ff};                //浅蓝
  17. uint8_t hh[3]={0x00ff,0x0000,0x00ff};                //紫k=6
  18. uint8_t ii[3]={0x0099,0x00d5,0x0012};                //变
  19. uint8_t jj[3]={0x00ff,0x00aa,0x001f};                //
  20. uint8_t kk[3]={0x0088,0x0025,0x001f};                //粉k=7              
  21. uint8_t ll[3]={0x00ff,0x0088,0x00ab};
  22. uint8_t mm[3]={0x0088,0x00ff,0x0023};
  23. uint8_t nn[3]={0x00ab,0x0059,0x0023};
  24. u8 k=0;
  25. void CLR_Buf2(void);
  26. //u8 Fi=0;
  27. int main(void)
  28. {               
  29.         u16 t;  
  30.         u16 len;       

  31.         u16 times=0;
  32.         delay_init();                     //延时函数初始化       
  33.   Timer3_init()        ;
  34.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  35.         uart1_init(115200);         //串口初始化为115200
  36.         uart2_init(115200);         //串口初始化为115200
  37.         LED_Init();                             //LED端口初始化
  38.         KEY_Init();          //初始化与按键连接的硬件接口
  39. CLR_Buf2();
  40.         while(1)
  41.         {
  42.                                 //WS2812_send( aa, 24);
  43.                                 if(USART_RX_STA&0x8000)
  44.                                 {               
  45.                                 //GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高                       
  46.                                 len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
  47. //                                        USART_SendData(USART1, USART_RX_BUF[0]);//向串口1发送数据
  48. //                                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  49.                                         if(USART_RX_BUF[0]=='0')
  50.                                         {
  51.                                                 k=0;
  52.                                         }
  53.                                         if(USART_RX_BUF[0]=='1')
  54.                                         {
  55.                                                 k=1;
  56.                                         }
  57.                                         if(USART_RX_BUF[0]=='2')
  58.                                         {
  59.                                                 k=2;
  60.                                         }
  61.                                         if(USART_RX_BUF[0]=='3')
  62.                                         {
  63.                                                 k=3;
  64.                                         }
  65.                                         if(USART_RX_BUF[0]=='4')
  66.                                         {
  67.                                                 k=4;
  68.                                         }
  69.                                         if(USART_RX_BUF[0]=='5')
  70.                                         {
  71.                                                 k=5;
  72.                                         }
  73.                                         if(USART_RX_BUF[0]=='6')
  74.                                         {
  75.                                                 k=6;
  76.                                         }
  77.                                         if(USART_RX_BUF[0]=='7')
  78.                                         {
  79.                                                 k=7;
  80.                                         }
  81.                                         if(USART_RX_BUF[0]=='8')
  82.                                         {
  83.                                                 k=8;
  84.                                         }
  85.                                                 if(USART_RX_BUF[0]=='9')
  86.                                         {
  87.                                                 k=9;
  88.                                         }
  89.                                                 if(USART_RX_BUF[0]=='a')
  90.                                         {
  91.                                                 k=10;
  92.                                         }
  93.                                                 if(USART_RX_BUF[0]=='b')
  94.                                         {
  95.                                                 k=11;
  96.                                         }
  97.                                                 if(USART_RX_BUF[0]=='c')
  98.                                         {
  99.                                                 k=12;
  100.                                         }
  101.                                                 if(USART_RX_BUF[0]=='d')
  102.                                         {
  103.                                                 k=13;
  104.                                         }
  105.                                         printf("\r\n您发送的消息为:\r\n\r\n");
  106.                                         for(t=0;t<len;t++)
  107.                                         {
  108.                                                 USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
  109.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  110.                                         }
  111.                                         printf("\r\n\r\n");//插入换行
  112.                                         USART_RX_STA=0;
  113.                                 }
  114.                                         if(k==0)
  115.                                                 {
  116.                                                  // WS2812_send( aa, 24);
  117.                                                 }
  118.                                         if(k==1)
  119.                                         {
  120.                                          WS2812_send( bb, 24);
  121.                                         }
  122.                                         if(k==2)
  123.                                         {
  124.                                          WS2812_send( cc, 24);
  125.                                         }
  126.                                         if(k==3)
  127.                                         {
  128.                                          WS2812_send( dd, 24);
  129.                                         }
  130.                                         if(k==4)
  131.                                         {
  132.                                          WS2812_send( ee, 24);
  133.                                         }
  134.                                         if(k==5)
  135.                                         {
  136.                                          WS2812_send( ff, 24);
  137.                                         }
  138.                                         if(k==6)
  139.                                         {
  140.                                          WS2812_send( gg, 24);
  141.                                         }
  142.                                         if(k==7)
  143.                                         {
  144.                                          WS2812_send( hh, 24);
  145.                                         }
  146.                                         if(k==8)
  147.                                         {
  148.                                          WS2812_send( ii, 24);
  149.                                         }
  150.                                         if(k==9)
  151.                                         {
  152.                                          WS2812_send( jj, 24);
  153.                                         }
  154.                                         if(k==10)//粉
  155.                                         {
  156.                                          WS2812_send( kk, 24);
  157.                                         }
  158.                                         if(k==11)//
  159.                                         {
  160.                                          WS2812_send( ll, 24);
  161.                                         }
  162.                                         if(k==12)
  163.                                         {
  164.                                          WS2812_send( mm, 24);
  165.                                         }
  166.                                         if(k==13)
  167.                                         {
  168.                                          WS2812_send( nn, 24);
  169.                                         }
  170.                                        
  171.                
  172.                
  173.                
  174. //  if(USART2_RX_STA&0x8000)
  175. //        {               
  176. //GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高               
  177. //                        len=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
  178. //                delay_ms(20);
  179. ////                        if(USART2_RX_BUF[0]=='0')
  180. ////                        {
  181. ////                                k=0;
  182. ////                        }
  183. ////                        if(USART2_RX_BUF[0]=='1')
  184. ////                        {
  185. ////                                k=1;
  186. ////                        }
  187. ////                        if(USART2_RX_BUF[0]=='2')
  188. ////                        {
  189. ////                                k=2;
  190. ////                        }
  191. ////                        if(USART2_RX_BUF[0]=='3')
  192. ////                        {
  193. ////                                k=3;
  194. ////                        }
  195. ////                        USART_SendData(USART2, USART2_RX_BUF[0]);//向串口1发送数据
  196. ////                                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
  197. ////                        printf("\r\n您发送的消息为:\r\n\r\n");
  198. ////                        for(t=0;t<len;t++)
  199. ////                        {
  200. ////                                USART_SendData(USART2, USART2_RX_BUF[t]);//向串口1发送数据
  201. ////                                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
  202. ////                        }
  203. //                        for(t=0;t<len;t++)
  204. //                        {
  205. //                                USART_SendData(USART1, USART2_RX_BUF[t]);//向串口1发送数据
  206. //                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  207. //                        }
  208. //                                delay_ms(20);
  209. ////                        printf("\r\n\r\n");//插入换行
  210. //                        USART2_RX_STA=0;
  211. //        }
  212.          while(tt)
  213.                                  {
  214.                                          GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高
  215. //                                         for(t=0;t<3;t++)
  216. //                                                        {
  217. //                                                                USART_SendData(USART1, USART2_RX_BUF[t]);//向串口1发送数据
  218. //                                                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  219. //                                                        }
  220.                                                         USART_SendData(USART1, USART2_RX_BUF[0]);//向串口1发送数据
  221.                                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
  222. //                                         delay_ms(20);
  223.                                    if(USART2_RX_BUF[0]==0x01)
  224.                                                 {
  225.                                                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高
  226.                                                 k=1;
  227.                                                 }
  228.                                                  if(USART2_RX_BUF[0]==0x02)
  229.                                                 {
  230.                                                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高
  231.                                                 k=2;
  232.                                                 }
  233.                                                  if(USART2_RX_BUF[0]==0x03)
  234.                                                 {
  235.                                                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高
  236.                                                 k=3;
  237.                                                 }
  238.                                                  if(USART2_RX_BUF[0]==0x04)
  239.                                                 {
  240.                                                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高
  241.                                                 k=4;
  242.                                                 }
  243.                                                 if(USART2_RX_BUF[0]==0x05)
  244.                                                 {
  245.                                                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);                                                 //PB.5 输出高
  246.                                                 k=5;
  247. ……………………

  248. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
语音控制LED灯.rar (284.54 KB, 下载次数: 116)


Screenshot_2018-02-04-11-14-35-909_com.miui.video.png (1.13 MB, 下载次数: 121)

Screenshot_2018-02-04-11-14-35-909_com.miui.video.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:193104 发表于 2018-10-4 21:02 | 只看该作者
很好,我很需要。
回复

使用道具 举报

板凳
ID:368001 发表于 2019-4-1 16:43 | 只看该作者
可以留一下您的联系方式吗?我有问题想请教您一下
回复

使用道具 举报

地板
ID:622166 发表于 2019-10-11 14:25 | 只看该作者
很好很好
回复

使用道具 举报

5#
ID:939672 发表于 2023-4-2 10:51 | 只看该作者
哇 ,高手
回复

使用道具 举报

6#
ID:291668 发表于 2023-4-2 21:05 | 只看该作者
赞了,语音使用串口模块转换吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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