还是用最简单的语言,粗暴记录制作的过程,三种模式控制一个灯。
准备材料:
51单片机 | STC89C52RC | 1个 |
蓝牙模块 | HC-05 | 1个 |
语音控制模块 | MR320 | 1个 |
继电器模块 | 两路继电器 | 1个 |
LED灯 | 3mm灯珠 | 1个 |
电阻 | 330Ω | 1个 |
杜邦线 | 公对母+公对公 | n条 |
语音模块购买地址:
https://detail.tmall.com/item.htm?id=620989335511&spm=a1z09.2.0.0.6a0a2e8dvYlEdP&_u=j1rgp58kd5ae
实现功能:
蓝牙模式:手机端采用蓝牙调试串口软件,发送相应指令,实现控制灯的亮灭。
语音模式:直接对和语音模块的麦克风喊出识别词条的内容,即可发送出相应指令,控制灯的亮灭。
代码:
#include "reg52.h"sbit floor_led1 = P2^0; sbit mode = P0^1; //蓝牙和语音模式选择端口void delay(uchar i){ uchar j,k; for(j=i;j>0;j--) for(k=125;k>0;k--);} void init(){ TMOD=0x20; //设定T1定时器工作方式2 TH1=0xfd; //T1定时器装初值 TL1=0xfd; // TR1=1; //启动T1定时器 REN=1; //允许串口接收 SM0=0; //设定串口工作方式1 SM1=1; //设定串口工作方式1 EA=1; //开总中断 ES=1; //开串口中断 } void main(){ init(); while(1) { }} void ser() interrupt 4 { unsigned char receiveData; receiveData=SBUF; RI = 0; SBUF=receiveData; while(!TI); TI=0; if(mode == 0) { switch(receiveData) { case 'a': floor_led1 = ~floor_led1; //地板灯 break; default : break; } } else { switch(receiveData) { case 'a': floor_led1 = 0; // 地板灯 开 break; case 'A': floor_led1 = 1; // 地板灯 关 break; default : break; } } }
接线:
扩展:
1、一定要将语音模块和蓝牙模块的电源线分别供电,否则串口会受到干扰。
2、51单片机只有一个串口,所以不能同时接受语音模块和蓝牙模块的数据,同时连接,一个串口数据也接收不到,分开则可以。
3、单片机自己串口收发时,TXD和RXD是可以接在一起的(在这地方脑子曾经短路过)。