前段时间一时兴起和小伙伴准备搞个智能手机支架玩玩,然后把大学被遗忘的嵌入式拾起进行了一番学习,考虑产品功能和现有材料就选用了STC89C52作为控制芯片,利用蓝牙HC-06作为无线控制传输方式,采用9g舵机作为机械动力。手机上装上蓝牙串口助手就可控制,支架是我特意学习solidworks来设计打印的(3D打印还真贵)。废话有点多了哈,下面直接贴源码吧
#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