前段时间一时兴起和小伙伴准备搞个智能手机支架玩玩,然后把大学被遗忘的嵌入式拾起进行了一番学习,考虑产品功能和现有材料就选用了STC89C52作为控制芯片,利用蓝牙HC-06作为无线控制传输方式,采用9g舵机作为机械动力。手机上装上蓝牙串口助手就可控制,支架是我特意学习solidworks来设计打印的(3D打印还真贵)。废话有点多了哈,下面直接贴源码吧
C++
#include <reg52.h>
#include <intrins.h>
unsigned char tmp;
unsigned char count1;
unsigned char count2;
unsigned int jd1;//角度标识
unsigned int jd2;
unsigned int c=0;
bit flag_REC=0;
sbit led1=P0^0; //指示灯0
sbit led2=P0^1; //指示灯1
sbit led3=P0^3; //指示灯3
sbit pwm1=P1^3; //PWM信号输出
sbit pwm2=P1^5;
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void time0_init();
void main()
{
jd1=12;
count1=0;
jd2=9;
count2=0;
time0_init();
init();
while(1){
if(flag_REC==1)
{
flag_REC=0;
ctrl();
}
}
}
void time0_init()//定时器初始化
{
TMOD|=0x01;
TH0=0xff;
TL0=0x8d;
TR0=1;
EA=1;
ET0=1;
}
void time0_Int() interrupt 1 { //中断程序
TH0=0xff;
TL0=0x8d;
if(count1<jd1)//判断 0.125ms 次数是否小于角度标识
pwm1=1;//确实小于PWM输出高电平
else
pwm1=0;//大于则输出低电平
if(count2<jd2)
pwm2=1;
else
pwm2=0;
count1=(count1+1);//0.125ms次数加一
count1=count1%160;//次数始终保持为160 即保持周期为20ms
count2=(count2+1);
count2=count2%160;
}
void init() //串口初始化
{
ES=0;
SCON=0x50;
TMOD|=0x20; //定时器1工作于方式2,8位自动重载模式,用于产生波特率
TH1=TL1=0xFD; //波特率9600
PCON&=0x7f; //波特率不倍增
TR1 = 1;
TI=0;
RI=0;
ES=1;
led1=0; //初始化设置3个指示灯全亮
led2=0;
led3=0;
}
void sint() interrupt 4 //中断接收3个字节
{
if(RI) //是否接收中断
{
RI=0;
tmp=SBUF;
flag_REC=1;
}
}
void send(unsigned char a)
{
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替
led3=1;
else
led3=0;
c++;
}
void ctrl()
{
switch(tmp) {
case 0x0A:
led1=1; //收到字符0A,指示灯0灭 记得手机上勾选HEX发送
jd1++;//角度标识加1
count1=0; //按键按下 则20ms 周期重新开始
if(jd1==19)
jd1=18;//已经是180 则保持
send(tmp);
send(jd1);
break;
case 0x0B: //收到字符0B,指示灯1灭
led2=1;
jd1--;//角度标识减1
count1=0;
if(jd1==5)
jd1=6;
send(tmp);
send(jd1);
break;
case 0x0C:
led1=0;
led2=0;
jd2++;
count2=0;
if(jd2==19)
jd2=18;
send(tmp);
send(jd2);
break;
case 0x0D:
led1=1;
led2=1;
jd2--;
count2=0;
if(jd2==5)
jd2=6;
send(tmp);
send(jd2);
break;
default: //其他,灯全灭
led1=1;
led2=1;
led3=1;
send(tmp);
}
}
后面再准备装两轮子,控制轮子的代码我先整理整理
对了,关于接线我啰嗦几句,蓝牙RXD接单片机的TXD,蓝牙的TXD接单片机的RXD,还有特别重要的一点:蓝牙模块和单片机模块要共地(这个特别重要)
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
相关文章
妈妈再也不用担心我出门忘带钥匙了2016-01-16