這是我上個月做的一個小項目
用時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, 下載次數: 122)
2018-2-4 15:26 上傳
點擊文件名下載附件
|