标题:
求助:hc05控制rgb的颜色变化
[打印本页]
作者:
zha
时间:
2017-4-20 14:49
标题:
求助:hc05控制rgb的颜色变化
我做了一个app控制的rgb小灯颜色,是用蓝牙hc05,能够控制几种颜色了,问题是只能够通过延时来实现灯的亮,延时一到就灭了,请问怎么改才能变成只要发送了命令就一直亮,只有接收到下一个
命令才改变颜色,很急,求思路
#include <reg52.h>
#include <intrins.h>
unsigned char tmp;
unsigned int c=0;
sbit RR = P1^0;
sbit GG = P1^1;
sbit BB = P1^2;
sbit led = P1^3;
unsigned char PWM_0 = 0;
unsigned char PWM_1 = 0;
unsigned char PWM_2 = 0;
unsigned char counter = 0;//jishu
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void delay (unsigned char t) //延时
{
unsigned char i;
while(t--)
{
for(i=0; i<114; i++);
}
}
void main()
{
EA = 1;
TMOD = 0x01;
TL0 = 0xC9; //设置定时初值
TH0 = 0xFF;
ET0 = 1;
TR0 = 1;
init();
while(1)
{
if(RI==1) // 是否有数据到来
{
RI = 0;
tmp = SBUF; // 暂存接收到的数据
ctrl();
}
}
}
void init() //串口初始化
{
ES=0; //关中断
SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,
//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变
TMOD = 0x20; // 定时器1工作于方式2,8位自动重载模式, 用于产生波特率
TH1=TL1=0xFD; // 波特率9600 (本次测试采用晶振为11.0592)
PCON &= 0x7f; // 波特率不倍增
TR1 = 1; //定时器1开始工作,产生波特率
//发送标志位置0
TI=0; //接收标志位置0
RI=0;
//EA=0;
ES=1;
RR = 1;
GG = 1;
BB = 1;
}
void send(unsigned char a) //单字节数据发送
{
//注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替
led=1;
else
led=0;
c++;
}
void ctrl() //接收处理函数
{
switch(tmp)
{
case '1': //hong
PWM_0 = 220;
PWM_1 = 20;
PWM_2 = 60;
delay(3000);
send(tmp);
break;
case '2':
PWM_0 = 128; //zi
PWM_1 = 0;
PWM_2 = 128;
delay(3000);
send(tmp);
break;
case '3':
PWM_0 = 0; //lan
PWM_1 = 0;
PWM_2 = 255;
delay(3000);
send(tmp);
break;
case '4':
PWM_0 = 30; // qian lan
PWM_1 = 144;
PWM_2 = 255;
delay(3000);
send(tmp);
break;
case '5':
PWM_0 = 49; //hui
PWM_1 = 79;
PWM_2 = 79;
delay(3000);
send(tmp);
break;
default: //其他,灯全灭
PWM_0 = 0; //hei
PWM_1 = 0;
PWM_2 = 0;
send(tmp);
}
}
void InterruptTimer0() interrupt 1
{
TL0 = 0xC9; //设置定时初值
TH0 = 0xFF;
counter++;
if(counter >= 255) counter = 0;
if(counter >= PWM_0) RR = 0; else RR = 1;
if(counter >= PWM_1) GG = 0; else GG = 1;
if(counter >= PWM_2) BB = 0; else BB = 1;
}
复制代码
作者:
zha
时间:
2017-4-20 15:02
求教啊,大神在哪里
作者:
小51hei56565
时间:
2017-7-21 23:13
hc 05 模块里面state 端口与en 端口可以不接是吧,那这两个端口有什么用呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1