|
程序是这样的,我就只能写到这了,不知道哪还有问题。亮度分为50级,蓝牙模块传输数据位8 位,停止位1 位,无校验位
#include
#define uint unsigned int
#define uchar unsigned char
sbit PWM=P1^0; //P10口输出PWM波
uchar tmp;
uint scale;
void init();
void init_USART();
uint TQ(uchar n);
void main()
{
tmp=0x32;
init();
init_USART();
PWM=1;
while(1)
{
scale=TQ(tmp);
}
}
void init()
{
TMOD=0X02;
TH0=0xa4; //定时初值设置为100us
TL0=0xa4;
EA=1;
ET0=1;
TR0=1;
}
void init_USART() //串口初始化
{
SCON=0x50; //设置串口通信数据位为8位
TMOD=0x20; //设置定时器1
TH1=0xFD; //设置波特率为9600
TL1=0xFD;
TR1=1;
EA=1;
ES=1;
}
void timer0() interrupt 1 //定时器0产生PWM波,周期5ms
{
static uint t;
if(t==50)
{
t=0;
PWM=1;
}
if(t==scale)
{
PWM=0;
}
t++;
}
void USART() interrupt 4
{
if(RI)
{
RI=0;
ES=0;
tmp=SBUF;
ES=1;
}
}
unsigned int TQ(uchar n)//将字符转换成数字
{
uint date,shu;
if(n==0x4F) //如果接收字符为'O',开灯
return 50;
else if(n==0x43) //如果接收字符为'C',关灯
return 0;
else if(n>=0x00 && n<=0x32) //如果接收的字符在指定的范围内
{
date=n/10;
shu=n%10;
shu=date*10+shu;
return shu;
}
else return scale; //否则保持之前状态
} |
|