基于51单片机的智能家居的设计初级版本
项目简介:
该项目可以通过单片机烧写软件发送指令并实现大厅灯跟卧室灯的亮灭。该项目分为四个等级:
1.在单片机烧写软件上面发送指令实现灯的亮灭:
2.用语音模块来控制射灯的亮灭:
3.用语音来实现实景智能家居项目包括:大厅的灯,卧室灯,窗帘,电视的控制;
4.将项目移植到ARM板上面,用arm架构实现实景智能家居的设计(该项目可以达到本科毕业设计的水平);
今天我来叙述的是实现项目的初级功能。
所需软件:
keil4、STC-ISP.
所需硬件:
STC89C51单片机一块、USB串口驱动、射频模块。
(本次博客主要介绍代码的实现,如何连接线以及模块的图片还有演示效果将会另外写博客,敬请期待,也希望对您们有帮助,有什么好的意见或者建议,能告诉博主将会十分感激。)
代码实现:
1.主函数&头文件
main()
{
UART_init();
while (1)
{
//防止程序结束,等待中断的发生;
}
}
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 buf2;
sbit beepSig = P1^0;
2.串口初始化
/*波特率为9600*/
void UART_init(void)
{
SCON=0x50;//设定串口工作方式0101 0000
PCON=0x00;
TMOD=0x20;
EA=1;
ES=1;
TL1=0xfd;//波特率9600
TH1=0xfd;
TR1=1;
}
3.开中断
//串行中断服务函数
void serial() interrupt 4 //触发中断两种方式 :收到数据跟完成发送数据都会完成中断
{
ES=0; //暂时关闭串口中断
if(RI){ //RI等于1时是收到数据引发的中断
RI=0; //手动把软件清零
buf2=SBUF; //把收到的信息从SBUF放到buf中。 SBUF数据接收发送的寄存器
if(buf2 == 0x1){
beepSig = 0;
}
if(buf2 == 0x0){
beepSig = 1;
}
if(buf2 ==0x2) {
char kaiDeng[7] = {0xFD,0x03,0X55,0xF5,0x30,0x4D,0xDF};//该行代码注释待补充
sendData(kaiDeng); //封装一个函数
}
if(buf2 ==0x3) {
char guanDeng[7] = {0xFD,0x04,0X55,0xF5,0xC0,0x4D,0xDF};//该行代码注释待补充
sendData(guanDeng);
}
}
if(TI){
TI = 0; //发送数据完成后引发的中断;
}
ES=1; //重新开启串口中断
}
4.函数封装:
void sendData(char a[])
{
int i;
for(i=0;i<7;i++){
SBUF = a[i];
while(TI==0); //作用是等待数据发送完毕,发送的过程TI都是等于0 发完以后会被硬件置1;
TI = 0; //手动把软件清零;
}
}