|
遙控車是基于STC89C52RC單片機(jī)開發(fā),車體組成有底盤,直流電機(jī)33GB-520-18.7,L298N電機(jī)驅(qū)動(dòng)模塊,LM2596降壓模塊,12V DC電源,HC-05藍(lán)牙模塊。其中HC-05藍(lán)牙模塊與單片機(jī)是串口通信所以要注意連線,STC89C52RC中P3^0,P3^1為串口引腳,具體連線如下示意圖:
20200227140830.png (62.14 KB, 下載次數(shù): 28)
下載附件
2020-2-27 14:09 上傳
本次制作目的是:通過(guò)手機(jī)藍(lán)牙調(diào)試器發(fā)送信號(hào)控制車輛的前進(jìn),后退,原地左轉(zhuǎn),原地右轉(zhuǎn),單獨(dú)左轉(zhuǎn),單獨(dú)右轉(zhuǎn),舵機(jī)掃描以及尋跡模式的切換(在這里聲明一下,本次代碼的尋跡模式切換模式還不太完善,未達(dá)到理想效果,電子發(fā)燒友們可以多多指點(diǎn)。在下學(xué)藝不精,在接下來(lái)的解說(shuō)中如有錯(cuò)誤望大佬糾正。)手機(jī)采用藍(lán)牙調(diào)試器,需要自己進(jìn)行按鍵編輯以及字符發(fā)送。
程序編譯好后即可燒錄,對(duì)手機(jī)上的藍(lán)牙調(diào)試器進(jìn)行相應(yīng)字符編輯即可進(jìn)行操作。對(duì)于想基于此程序繼續(xù)開發(fā)的朋友們,如果加入更多功能函數(shù)時(shí)操作未響應(yīng),建議你們逐條加入排除問(wèn)題。
謝謝大家的認(rèn)真閱讀,有更好的邏輯可以留言。
IMG_20200227_142200.jpg (20.06 KB, 下載次數(shù): 25)
下載附件
2020-2-27 14:22 上傳
Screenshot_2019-12-22-00-04-22-343_xnj.lazydog.bt.png (98.37 KB, 下載次數(shù): 23)
下載附件
2020-2-27 14:25 上傳
將硬件設(shè)備搭建完成后,我們即將開始軟件的編程:
話不多說(shuō),單片機(jī)代碼走起!!!哈哈
- #include <reg52.h> //頭文件
- #include <intrins.h>
- sbit blackorwhite1=P2^5;//黑白傳感器定義引腳
- sbit blackorwhite2=P2^6;
- sbit blackorwhite3=P2^7;
- sbit motor1=P1^0;
- sbit motor2=P1^1;//電機(jī)1定義引腳
- sbit motor3=P1^3;
- sbit motor4=P1^4;//電機(jī)2定義引腳
- sbit PWM1=P2^0;//SG90信號(hào)定義引腳
- typedef unsigned char uc;
- typedef unsigned int ui; //復(fù)雜名稱函數(shù)的替代
- uc Com;
- int i;
- void Init(); //在這里一定要注意在main()函數(shù)后的子函數(shù)要進(jìn)行聲明,不聲明雖然不會(huì)報(bào)錯(cuò)但有可能會(huì)忽略子函數(shù)導(dǎo)致一些功能不能實(shí)現(xiàn)
- void Send(uc a);
- void Cont();
- void qianjin();
- void houtui();
- void youzhuan();
- void zuozhuan();
- void xunji();
- //void L2_0();
- void L2_45();
- void L2_90();
- void L2_135();
- //void L2_180();
- void delay(int t);
- void delayx1ms(int x);
- void delay1ms();
- void delay500us();
- void ZUO();
- void YOU();
-
- void delay(int t) //延遲函數(shù)
- {
- int a,b;
- for(a=0;a<t;a++)
- for(b=0;b<120;b++);
- }
- void delayx1ms(int x)
- {
- unsigned char a,b;
- for(x;x>0;x--)
- for(b=102;b>0;b--)
- for(a=3;a>0;a--);
- }
- void delay1ms()
- {
- unsigned char a,b;
- for(b=102;b>0;b--)
- for(a=3;a>0;a--);
- }
- void delay500us()
- {
- unsigned char a,b;
- for(b=1;b>0;b--)
- for(a=227;a>0;a--);
- }
- void main() // 主函數(shù)
- {
- Init(); // 串口初始化函數(shù)調(diào)用
- while (1)
- {
- if (RI==1) // 判斷是否有數(shù)據(jù)
- {
- RI = 0; // 置0
- Com = SBUF; // 暫時(shí)存放接收的數(shù)據(jù)
- Cont(); // 調(diào)用數(shù)據(jù)處理函數(shù)
- }
- }
- }
- void Init() //串口初始化
- {
- ES=0; //中斷關(guān)閉
- SCON = 0x50; // 串行控制寄存器 01010000串口工作方式1并允許中斷接收數(shù)據(jù)
- TMOD = 0x20; // 定時(shí)器/計(jì)[color=rgb(34, 34, 34)][backcolor=rgb(248, 248, 248)][font=PingFang SC,Arial,\5FAE軟雅黑,\5B8B體,simsun,sans-serif][size=0.48] [/font][/backcolor][/color]數(shù)器1設(shè)置為工作方式
- TH1=TL1=0xFD; // 設(shè)置波特率9600=110592*1000000/12/(0x100-0xfd)/32 本次實(shí)驗(yàn)晶振(11.0592)
- PCON &= 0x7f; // 波特率不倍增
- TR1 = 1; // 開啟定時(shí)器1
- TI=0; // 發(fā)送中斷位
- RI=0; // 接收中斷位
- ES=1; // 開啟串口中斷
- motor1=0;
- motor2=0; // 電機(jī)初始化
- motor3=0;
- motor4=0;
- }
-
- void Send(uc a) //單字節(jié)數(shù)據(jù)發(fā)送
- {
- TI=0; // TI是串口接收標(biāo)志位
- SBUF=a; //SBUF---即串口數(shù)據(jù)緩沖寄存器 將數(shù)據(jù)存入
- while (TI==0) ;//等待發(fā)送結(jié)束
- TI=0; //清零
- }
- void qianjin() //前進(jìn)功能函數(shù)
- {
- motor1=1;
- motor2=0;
- motor3=1;
- motor4=0;
- }
- void zuozhuan() //原地左轉(zhuǎn)功能函數(shù)
- {
- motor1=0;
- motor2=1;
- motor3=1;
- motor4=0;
- }
- void youzhuan() //原地右轉(zhuǎn)功能函數(shù)
- {
- motor1=1;
- motor2=0;
- motor3=0;
- motor4=1;
- }
- void houtui() //后退功能函數(shù)
- {
- motor1=0;
- motor2=1;
- motor3=0;
- motor4=1;
- }
- void ZUO() // 單獨(dú)左轉(zhuǎn)功能函數(shù)
- {
- motor1=0;
- motor2=0;
- motor3=1;
- motor4=0;
- }
- void YOU() // 單獨(dú)右轉(zhuǎn)功能函數(shù)
- {
- motor1=1;
- motor2=0;
- motor3=0;
- motor4=0;
- }
- void xunji() //尋跡模式切換 功能函數(shù)
- {
- // while(1)
- {
- if((blackorwhite1==1)&& (blackorwhite2==0)&&(blackorwhite3==1))
- qianjin();
- else if ((blackorwhite1==0&&blackorwhite2==0&&blackorwhite3==1)||(blackorwhite1==0&&blackorwhite2==1&&blackorwhite3==1))
- zuozhuan();
- else if((blackorwhite1==1&&blackorwhite2==1&&blackorwhite3==0)||(blackorwhite1==1&&blackorwhite2==0&&blackorwhite3==0))
- youzhuan();
- else if ((blackorwhite1==0)&&(blackorwhite2==0)&&(blackorwhite3==0))
- qianjin();
- else
- houtui();
-
- }
- }
- //void L2_0() SG90舵機(jī)0度函數(shù) 若需要可以解禁此功能
- /{
- // int i,j;
- // for(j=0;j<43;j++)
- // {
- // PWM1=1;
- // delay500us();
- // // delay1ms();
- // PWM1=0;
- // for(i=0;i<19;i++)
- // delay1ms();
- // delay500us();
- // PWM1=0;
- // for(i=0;i<20;i++)
- // delay1ms();
- // }
- //}
- void L2_45() //舵機(jī)45度旋轉(zhuǎn)函數(shù)
- {
- int i,j;
- for(j=0;j<43;j++)
- {
- PWM1=1;
- // delay500us();
- delay1ms();
- PWM1=0;
- for(i=0;i<20;i++)
- delay1ms();
- // delay500us();
- PWM1=0;
- for(i=0;i<21;i++)
- delay1ms();
- }
- }
- void L2_90() //舵機(jī)90度旋轉(zhuǎn)函數(shù)
- {
- int i,j;
- for(j=0;j<43;j++)
- {
- PWM1=1;
- delay1ms();
- delay500us();
- PWM1=0;
- for(i=0;i<18;i++)
- delay1ms();
- delay500us();
- PWM1=0;
- for(i=0;i<20;i++)
- delay1ms();
- }
- }
- void L2_135() //舵機(jī)135度旋轉(zhuǎn)函數(shù)
- {
- int i,j;
- for(j=0;j<43;j++)
- {
- PWM1=1;
- delay1ms();
- delay1ms();
- // delay500us();
- PWM1=0;
- for(i=0;i<18;i++)
- delay1ms();
- // delay500us();
- PWM1=0;
- for(i=0;i<20;i++)
- delay1ms();
- }
- }
- //void L2_180() //舵機(jī)180度旋轉(zhuǎn)函數(shù),有需要可解禁此功能
- //{
- // int i,j;
- // for(j=0;j<43;j++)
- // {
- // PWM1=1;
- // delay1ms();
- // delay1ms();
- // delay500us();
- // PWM1=0;
- // for(i=0;i<17;i++)
- // delay1ms();
- // delay500us();
- // PWM1=0;
- // for(i=0;i<20;i++)
- // delay1ms();
- // }
- //}
- void Cont() // 數(shù)據(jù)處理函數(shù)
- {
- switch(Com)
- {
- case '5':
- motor1=0;
- motor2=0;
- motor3=0;
- motor4=0;
- Send(Com);
- break;
- case '2':
- qianjin();
- Send(Com);
- break;
- case '4':
- zuozhuan();
- Send(Com);
- break;
- case '6':
- youzhuan();
- Send(Com);
- break;
- case '8':
- houtui();
- Send(Com);
- break;
- case '1':
- xunji();
- Send(Com);
- break;
- case '9':
- L2_45();
- delay(30);
- L2_90();
- delay(30);
- L2_135();
- delay(30);
- L2_45();
- delay(30);
- L2_90();
- delay(30);
- L2_135();
- delay(30);
- L2_90();
- Send(Com);
- break;
- case 'F':
- YOU();
- Send(Com);
- break;
- case 'E':
- ZUO();
- Send(Com);
- break;
- default:
-
- motor1=0;
- motor2=0;
- motor3=0;
- motor4=0;
- Send(Com);
- }
- }
復(fù)制代碼
51hei.png (5.53 KB, 下載次數(shù): 31)
下載附件
2020-2-27 16:49 上傳
以上程序打包下載:
藍(lán)牙.zip
(20.86 KB, 下載次數(shù): 38)
2020-2-27 14:19 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|