这是我上个月做的一个小项目
用时15天
附件包含stm32单片机的源代码
主要是通过语音模块控制小灯的颜色改变
都是自己编写的,请大家指教
语音控制LED灯单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "WS2812B.h"
- #define Buf2_Max 200 //串口2缓存长度
- /************************************************
- ************************************************/
- uint8_t aa[3]={0x0000,0x0000,0x0000}; //关
- uint8_t bb[3]={0x00ff,0x0000,0x0000}; //红k=1
- uint8_t cc[3]={0x0000,0x00ff,0x0000}; //绿k=2
- uint8_t dd[3]={0x0000,0x0000,0x00ff}; //蓝k=3
- uint8_t ee[3]={0x00ff,0x00ff,0x00ff}; //白k=4
- uint8_t ff[3]={0x00ff,0x00ff,0x0000}; //黄k=5
- uint8_t gg[3]={0x0000,0x00ff,0x00ff}; //浅蓝
- uint8_t hh[3]={0x00ff,0x0000,0x00ff}; //紫k=6
- uint8_t ii[3]={0x0099,0x00d5,0x0012}; //变
- uint8_t jj[3]={0x00ff,0x00aa,0x001f}; //
- uint8_t kk[3]={0x0088,0x0025,0x001f}; //粉k=7
- uint8_t ll[3]={0x00ff,0x0088,0x00ab};
- uint8_t mm[3]={0x0088,0x00ff,0x0023};
- uint8_t nn[3]={0x00ab,0x0059,0x0023};
- u8 k=0;
- void CLR_Buf2(void);
- //u8 Fi=0;
- int main(void)
- {
- u16 t;
- u16 len;
- u16 times=0;
- delay_init(); //延时函数初始化
- Timer3_init() ;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart1_init(115200); //串口初始化为115200
- uart2_init(115200); //串口初始化为115200
- LED_Init(); //LED端口初始化
- KEY_Init(); //初始化与按键连接的硬件接口
- CLR_Buf2();
- while(1)
- {
- //WS2812_send( aa, 24);
- if(USART_RX_STA&0x8000)
- {
- //GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
- // USART_SendData(USART1, USART_RX_BUF[0]);//向串口1发送数据
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
- if(USART_RX_BUF[0]=='0')
- {
- k=0;
- }
- if(USART_RX_BUF[0]=='1')
- {
- k=1;
- }
- if(USART_RX_BUF[0]=='2')
- {
- k=2;
- }
- if(USART_RX_BUF[0]=='3')
- {
- k=3;
- }
- if(USART_RX_BUF[0]=='4')
- {
- k=4;
- }
- if(USART_RX_BUF[0]=='5')
- {
- k=5;
- }
- if(USART_RX_BUF[0]=='6')
- {
- k=6;
- }
- if(USART_RX_BUF[0]=='7')
- {
- k=7;
- }
- if(USART_RX_BUF[0]=='8')
- {
- k=8;
- }
- if(USART_RX_BUF[0]=='9')
- {
- k=9;
- }
- if(USART_RX_BUF[0]=='a')
- {
- k=10;
- }
- if(USART_RX_BUF[0]=='b')
- {
- k=11;
- }
- if(USART_RX_BUF[0]=='c')
- {
- k=12;
- }
- if(USART_RX_BUF[0]=='d')
- {
- k=13;
- }
- printf("\r\n您发送的消息为:\r\n\r\n");
- for(t=0;t<len;t++)
- {
- USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
- }
- printf("\r\n\r\n");//插入换行
- USART_RX_STA=0;
- }
- if(k==0)
- {
- // WS2812_send( aa, 24);
- }
- if(k==1)
- {
- WS2812_send( bb, 24);
- }
- if(k==2)
- {
- WS2812_send( cc, 24);
- }
- if(k==3)
- {
- WS2812_send( dd, 24);
- }
- if(k==4)
- {
- WS2812_send( ee, 24);
- }
- if(k==5)
- {
- WS2812_send( ff, 24);
- }
- if(k==6)
- {
- WS2812_send( gg, 24);
- }
- if(k==7)
- {
- WS2812_send( hh, 24);
- }
- if(k==8)
- {
- WS2812_send( ii, 24);
- }
- if(k==9)
- {
- WS2812_send( jj, 24);
- }
- if(k==10)//粉
- {
- WS2812_send( kk, 24);
- }
- if(k==11)//
- {
- WS2812_send( ll, 24);
- }
- if(k==12)
- {
- WS2812_send( mm, 24);
- }
- if(k==13)
- {
- WS2812_send( nn, 24);
- }
-
-
-
-
- // if(USART2_RX_STA&0x8000)
- // {
- //GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- // len=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
- // delay_ms(20);
- //// if(USART2_RX_BUF[0]=='0')
- //// {
- //// k=0;
- //// }
- //// if(USART2_RX_BUF[0]=='1')
- //// {
- //// k=1;
- //// }
- //// if(USART2_RX_BUF[0]=='2')
- //// {
- //// k=2;
- //// }
- //// if(USART2_RX_BUF[0]=='3')
- //// {
- //// k=3;
- //// }
- //// USART_SendData(USART2, USART2_RX_BUF[0]);//向串口1发送数据
- //// while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
- //// printf("\r\n您发送的消息为:\r\n\r\n");
- //// for(t=0;t<len;t++)
- //// {
- //// USART_SendData(USART2, USART2_RX_BUF[t]);//向串口1发送数据
- //// while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
- //// }
- // for(t=0;t<len;t++)
- // {
- // USART_SendData(USART1, USART2_RX_BUF[t]);//向串口1发送数据
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
- // }
- // delay_ms(20);
- //// printf("\r\n\r\n");//插入换行
- // USART2_RX_STA=0;
- // }
- while(tt)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- // for(t=0;t<3;t++)
- // {
- // USART_SendData(USART1, USART2_RX_BUF[t]);//向串口1发送数据
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
- // }
- USART_SendData(USART1, USART2_RX_BUF[0]);//向串口1发送数据
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
- // delay_ms(20);
- if(USART2_RX_BUF[0]==0x01)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- k=1;
- }
- if(USART2_RX_BUF[0]==0x02)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- k=2;
- }
- if(USART2_RX_BUF[0]==0x03)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- k=3;
- }
- if(USART2_RX_BUF[0]==0x04)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- k=4;
- }
- if(USART2_RX_BUF[0]==0x05)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
- k=5;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
语音控制LED灯.rar
(284.54 KB, 下载次数: 116)
|