蓝牙控制单片机小灯亮灭(51)
我是一个初学的,在学51。板子用的是清祥电子51AVR单片机最小系统那个板子,然后做的是蓝牙控制小灯亮灭。因为是初学,一开始有很多的困惑都没解决,不多说了,先说说我的经历。 我用的是hc-06的蓝牙模块,然后就是用的普中科技的PZ-ISP这个串口调试助手,首先蓝牙模块的VCC,GND与单片机的相连,然后就是蓝牙模块的RXD连接单片机的RXD,蓝牙模块的TXD连接单片机的TXD,然后就打开串口调试助手,把波特率调到9600,然后打开串口,在发送区输入AT然后加上换行,再点击发送,如果接收区收到ok就表示🉑了。然后输入AT+BAUD4(将波特率改成9600),这里我想跟大家讲一下,串口调的是蓝牙的波特率,我们在keil上面写的文件里面的内容才是去修改单片机波特率的。输入完之后,显示OK,就表示可以了。接下来就是文件部分了。 我用的是keil5然后具体就如下
#include <reg51.h>
unsigned char k;
typedef unsigned int u16;
sbit led1=P1^0;
sbit led2=P1^1;
void InitUART(void)
{ TMOD = 0x20;
SCON = 0x50;
TH1 = 0xF3;
TL1 = 0xF3;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;}
void delay(u16 i)
{ unsigned char j;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);}
void main(void)
{ k=0;
InitUART();
while(1)
{
if(k==0)
{
led1=0;
led2=1;
} else if (k==1)
{
led1=1;
led2=0;; }
else if (k==2)
{ led1=1; led2=1; }
else { led1=1; led2=1; }
}
}
void UARTInterrupt(void) interrupt 4
{ if(RI)
{ RI = 0;
k++;
if(k>2)
k=0; }
else TI = 0;}
这个图我是根据发送数据的次数去控制小灯的亮灭的,我也是看了很多博主的文章去琢磨的(我才学不是很会)。
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 receivedata;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XFA; //计数器初始值设置,注意波特率是9600的
TL1=0XFA;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器}
void main()
{
UsartInit(); // 串口初始化
while(1); }
void contrl()
{ if(receivedata=='1')
{ led1=0; }
if(receivedata=='2') { led2=0; }
if(receivedata=='3') { led3=0; }
if(receivedata=='4') { led1=~led1; } if(receivedata=='5') { led2=~led2; } if(receivedata=='6') { led3=~led3; } if(receivedata=='7') { P1=0xf0; } if(receivedata=='8') { P1=0xff; }
}
void Usart() interrupt 4
{ receivedata=SBUF;//出去接收到的数据
RI = 0;
SBUF=receivedata;//将接收到的数据放入到发送寄存器 contrl();
while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位}
这一个程序是根据发送的具体的数字去判断小灯的亮灭,要写这个程序可以先去把串口通信那些学了,之前我一直都没搞懂怎么样才可以收到具体数值然后去让小灯亮灭,其实最主要就是里面的接受数据那里,我在这里定义了一个全局变量receivedata,然后让中断函数里面SBUF接受的数据和receivedata相等,最后控制函数里面引用的时候就是你发送的数据。(我表述可能不太清楚,但大概是这个样子,多多指教。)
|