久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
52單片機的避障小車代碼
[打印本頁]
作者:
小李子尾插
時間:
2021-8-3 15:44
標題:
52單片機的避障小車代碼
利用52單片機做的一個避障小車,還有一些地方不足,供參考
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define obstructionDis 20 //到障礙物距離
sbit LED = P0^0; //距離小于20就亮
sbit Trig = P1^1; //TRIG用來發送方波
sbit Echo = P1^2; //ECHO用來接收方波
sbit Motor_1 = P2^1; //控制第一個電機正反轉
sbit Motor_2 = P2^2;
sbit Motor_3 = P2^3; //控制第二個電機正反轉
sbit Motor_4 = P2^4;
sbit servoMotors = P1^0; //PWM控制舵機引腳
float L = 0;
uchar sum;
uchar Motor_pwm = 0;
uchar Servor = 5; //設置舵機占空比
uchar servorTime = 0;
uchar ifLeft = 0; //左方向是否有障礙物
uchar ifRight = 0; //右方向是否有障礙物
void delay(uchar time) //延時函數
{
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;
}
//發射超聲波測距波形
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(); //發送一個方波信號,
while(!Echo); //等于0一直循環,直到Echo為高電平,信號反彈回來
TR0 = 1; //開啟定時器
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;
}
}
//控制舵機方向
void control()
{
Servor = 21; //舵機向左擺動
servorTime = 0; //從0開始計數
TR1 = 1; //開啟T1,舵機開始工作
delay(200); //等待
TR1 = 0;
delay(3000);
if(getDistance() == 0){
turnLeft();
delay(200);
delay(200);
}
Servor = 13; //超聲波正對前方
servorTime = 0;
TR1 = 1; //定時器T1開始工(T1用來控制舵機)
delay(200); //等待中斷
TR1 = 0; //關閉定時器
delay(3000);
if(getDistance() == 0){
turnDown();
delay(200);
delay(200);
delay(100);
turnRight();
delay(200);
delay(200);
}
Servor = 5; //舵機向右
servorTime = 0;
TR1 = 1;
delay(200);
TR1 = 0;
delay(3000);
if(getDistance() == 0){
turnRight();
delay(200);
delay(200);
}
Servor = 13; //超聲波正對前方
servorTime = 0;
TR1 = 1; //定時器T1開始工(T1用來控制舵機)
delay(200); //等待中斷
TR1 = 0; //關閉定時器
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 //產生舵機所用脈常(輸出PWM信號)
{
TH1 = 0xff; //重新賦值
TL1 = 0x9c;
servorTime++; //用來計數中斷次數,加一次就代表100us
if(servorTime <= Servor){
servoMotors = 1; //舵機旋轉
}else{
servoMotors = 0; //舵機停止
}
if(servorTime >= 100){ //加到100舵機就停止
servorTime = 0; //舵機停
}
}
復制代碼
作者:
艾爾文
時間:
2021-9-4 17:29
博主,程序能運行嗎?我看起來有點懵
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人欧美一区二区三区黑人孕妇
|
中文字幕一区二区视频
|
九九亚洲
|
国产免费一区二区三区
|
免费一区在线观看
|
欧美日韩亚
|
欧美区在线
|
日日淫
|
精品久久久久久久久久
|
亚洲国产成人精品女人久久久
|
国产免费一区二区
|
日韩在线观看精品
|
亚洲精品视频在线看
|
国产成人精品一区二区三
|
99福利
|
亚洲精品在线看
|
中文字幕一区二区三区四区五区
|
一区二区视频在线
|
亚洲 欧美 日韩 在线
|
www.99re
|
欧美日韩在线观看一区
|
精品乱码一区二区
|
中文字幕在线视频免费观看
|
一区二区三区四区在线视频
|
成人免费网站
|
欧美成人一区二区三区
|
国产成人福利视频在线观看
|
日韩最新网址
|
亚洲欧美视频在线观看
|
国产精品日韩一区二区
|
四虎成人免费电影
|
国产女人与拘做视频免费
|
欧美一级毛片久久99精品蜜桃
|
久久手机视频
|
精品国产久
|
国产日韩精品一区二区
|
国产第一亚洲
|
欧美人妇做爰xxxⅹ性高电影
|
日韩精品视频在线观看一区二区三区
|
日韩欧美精品
|
91精品国产91久久久久青草
|