安卓蓝牙控制RGBLED调光调色,遇到问题,求大神帮助。。

heavenyunyou 2015-04-16 02:14:47
在做一个手机通过蓝牙发送数据控制RGBLED变色的东西,单片机用的stc89c52rc,蓝牙模块用的HC05,LED是共阳4管脚的RGBLED,调色使用PWM调制。自己从网上找了一段代码,然后自己改了一下,但是发现用手机蓝牙串口助手发送3个十六进制数据后,led可以实现混色,但是无法继续接受数据。想要实现能够不断接受3位数据并实现动态调色的功能。我希望实现这样一种死循环“接收3位数据--数据赋值--进入中断进行PWM处理--处理完毕显示颜色--接收3位数据……”。我是初学者,可能代码里面问题很多,中断服务函数那块实在搞得焦头烂额。代码如下,请各位不吝赐教。
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit pwm1=P2^0; //红色管脚
sbit pwm2=P2^1;//绿色管脚
sbit pwm3=P2^2;//蓝色管脚
unsigned char tmp[3];//数据接收数组
unsigned char m=0;
unsigned char n;
uchar count;
uchar p1,p2,p3;
void delay(uint x)//延时函数
{
​unsigned char i,j;
​for(i=x;i>0;i--)
​for(j=125;j>0;j--);
}
void Timer0_Init()//定时器设定(这块代码不太清楚,如何设置定时器?
{
​TMOD=0x01;
​IE=0x82;
​TH0=0xff;
​TL0=0x9c;
​TR0=1;
}
void Timer0_Int() interrupt 1 //中断服务函数(PWM调色,代码基本懂了,但中断函数的处理过程不懂
{
​TH0=0xff;
​TL0=0x9c;
​count++;
​if (count <= p1) { pwm1=0;delay(10000); }
​else { pwm1=1;}
​if (count <= p2) { pwm2=0; delay(10000);}
​else { pwm2=1;}
​if (count <= p3) { pwm3=0; delay(10000);}
​else { pwm3=1;}
​if (count > 100 ) { count=0; }
}
void main()
{
​pwm1=1; pwm2=1; pwm3=1;//初始化灯灭
​count=0;
​ES=0;
​SCON = 0x50;
​TMOD = 0x20;
TH1=TL1=0xFD; // 波特率9600 (本次测试采用晶振为11.0592)
PCON &= 0x7f; //此处对串口的初始化也不是很懂……
TR1 = 1;
​TI=0;
​RI=0;
​ES=1; ​
​while(1)
{
if(RI==1) // 是否有数据到来
{
RI = 0;
tmp[m] = SBUF;
​ ​ ​ TI=0;
​ ​ ​ SBUF=tmp[m];
​ ​ m++;
​ ​ if(m>=3) //收到3组数据处理一次
​ ​ ​ ​ {
​ ​ ​ ​p1=tmp[0]; p2=tmp[1];p3=tmp[2];
​ ​ ​ ​ ​ Timer0_Init(); //这个函数具体放在哪里对整个过程有影响么?
​ ​ ​ ​ m=0;
​ ​ ​ }
​}
}
}
如果这个问题解决了,后面的就不难了,之后做出来会在这里和大家分享。

...全文
306 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6,127

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧