久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
52單片機(jī)的避障小車代碼
[打印本頁]
作者:
小李子尾插
時(shí)間:
2021-8-3 15:44
標(biāo)題:
52單片機(jī)的避障小車代碼
利用52單片機(jī)做的一個(gè)避障小車,還有一些地方不足,供參考
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define obstructionDis 20 //到障礙物距離
sbit LED = P0^0; //距離小于20就亮
sbit Trig = P1^1; //TRIG用來發(fā)送方波
sbit Echo = P1^2; //ECHO用來接收方波
sbit Motor_1 = P2^1; //控制第一個(gè)電機(jī)正反轉(zhuǎn)
sbit Motor_2 = P2^2;
sbit Motor_3 = P2^3; //控制第二個(gè)電機(jī)正反轉(zhuǎn)
sbit Motor_4 = P2^4;
sbit servoMotors = P1^0; //PWM控制舵機(jī)引腳
float L = 0;
uchar sum;
uchar Motor_pwm = 0;
uchar Servor = 5; //設(shè)置舵機(jī)占空比
uchar servorTime = 0;
uchar ifLeft = 0; //左方向是否有障礙物
uchar ifRight = 0; //右方向是否有障礙物
void delay(uchar time) //延時(shí)函數(shù)
{
uchar i;
for(;time > 0;time--){
for(i = 0;i < 255;i++);
}
}
void turnLeft() //左
{
Motor_1 = 1;
Motor_2 = 0;
Motor_3 = 0;
Motor_4 = 0;
}
void turnRight() //右
{
Motor_1 = 0;
Motor_2 = 0;
Motor_3 = 1;
Motor_4 = 0;
}
void turnUp() //前
{
Motor_1 = 1;
Motor_2 = 0;
Motor_3 = 1;
Motor_4 = 0;
}
void turnDown() //后
{
Motor_1 = 0;
Motor_2 = 1;
Motor_3 = 0;
Motor_4 = 1;
}
//發(fā)射超聲波測距波形
void openHc()
{
Trig = 1;
_nop_(); //1us,一共20us
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();
Trig = 0;
}
//超聲波
uchar getDistance()
{
TH0 = 0;
TL0 = 0;
openHc(); //發(fā)送一個(gè)方波信號,
while(!Echo); //等于0一直循環(huán),直到Echo為高電平,信號反彈回來
TR0 = 1; //開啟定時(shí)器
while(Echo);
TR0 = 0;
sum = TH0*256 + TL0; //高八位加低八位組成16位
L = (sum*1.78)/100; //L為距離
if(L < obstructionDis){ //如果距離小于20
LED = 1;
return 0;
}else{
LED = 0;
return 1;
}
}
//控制舵機(jī)方向
void control()
{
Servor = 21; //舵機(jī)向左擺動
servorTime = 0; //從0開始計(jì)數(shù)
TR1 = 1; //開啟T1,舵機(jī)開始工作
delay(200); //等待
TR1 = 0;
delay(3000);
if(getDistance() == 0){
turnLeft();
delay(200);
delay(200);
}
Servor = 13; //超聲波正對前方
servorTime = 0;
TR1 = 1; //定時(shí)器T1開始工(T1用來控制舵機(jī))
delay(200); //等待中斷
TR1 = 0; //關(guān)閉定時(shí)器
delay(3000);
if(getDistance() == 0){
turnDown();
delay(200);
delay(200);
delay(100);
turnRight();
delay(200);
delay(200);
}
Servor = 5; //舵機(jī)向右
servorTime = 0;
TR1 = 1;
delay(200);
TR1 = 0;
delay(3000);
if(getDistance() == 0){
turnRight();
delay(200);
delay(200);
}
Servor = 13; //超聲波正對前方
servorTime = 0;
TR1 = 1; //定時(shí)器T1開始工(T1用來控制舵機(jī))
delay(200); //等待中斷
TR1 = 0; //關(guān)閉定時(shí)器
delay(3000);
if(getDistance() == 0){
turnDown();
delay(200);
delay(200);
delay(100);
turnRight();
delay(200);
delay(200);
}
}
//初始化
void Init()
{
LED = 1; //LED先亮
EA = 1;
ET1 = 1;
TMOD |= 0x10; //00000001,方式1
TH1 = (65536 - 100)/256; //65436,100us
TL1 = (65536 - 100)%256;
}
//主程序
void main()
{
Init();
servorTime = 0;
while(1){ //如果返回的是1,則說明沒有障礙物所以一直向前
turnUp();
if(getDistance() == 1){
control();
}else{
turnDown();
delay(200);
delay(200);
delay(100);
control();
break;
}
}
}
//T1中斷
void T1_int() interrupt 3 //產(chǎn)生舵機(jī)所用脈常(輸出PWM信號)
{
TH1 = 0xff; //重新賦值
TL1 = 0x9c;
servorTime++; //用來計(jì)數(shù)中斷次數(shù),加一次就代表100us
if(servorTime <= Servor){
servoMotors = 1; //舵機(jī)旋轉(zhuǎn)
}else{
servoMotors = 0; //舵機(jī)停止
}
if(servorTime >= 100){ //加到100舵機(jī)就停止
servorTime = 0; //舵機(jī)停
}
}
復(fù)制代碼
作者:
艾爾文
時(shí)間:
2021-9-4 17:29
博主,程序能運(yùn)行嗎?我看起來有點(diǎn)懵
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美日韩电影一区二区
|
亚洲协和影视
|
三级黄色片在线
|
av成人在线观看
|
在线看片网站
|
久久精品亚洲国产奇米99
|
日本人爽p大片免费看
|
99av成人精品国语自产拍
|
在线观看亚洲专区
|
中文字幕一区二区三区四区不卡
|
中文字幕 在线观看
|
特级黄色毛片
|
精品福利在线
|
国产丝袜人妖cd露出
|
欧美激情欧美激情在线五月
|
国产高清免费
|
免费欧美
|
国产一区二区三区免费观看视频
|
亚洲一二三区精品
|
羞羞视频在线观看网站
|
中文字幕日韩一区
|
久久久久久久电影
|
亚洲天堂一区
|
999www视频免费观看
|
日日干夜夜干
|
日韩一区二区视频
|
国产一区二区三区四区五区3d
|
日本手机在线
|
一级做a毛片
|
国产美女自拍视频
|
在线一级片
|
色五月激情五月
|
超碰成人在线观看
|
一级黄色片网站
|
国产精品精品久久久久久
|
81精品国产乱码久久久久久
|
一区精品国产欧美在线
|
伊人狠狠操
|
7799精品视频天天看
|
高清免费av
|
亚洲国产一区二区三区
|