久久久久久久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精品久久久久久狂牛
|
日韩免费1区二区电影
|
国产视频一区二区
|
日韩在线看片
|
成人做爰www免费看视频网站
|
中文字幕一区二区三区日韩精品
|
中文av在线播放
|
久久一二
|
91精品久久久久久久久久入口
|
亚洲精品丝袜日韩
|
国产午夜久久
|
国产 日韩 欧美 中文 在线播放
|
国产精品视频在线观看
|
欧美精品一区二区在线观看
|
日韩一区二区三区在线
|
91精品国产91久久综合桃花
|
亚洲成人精品视频
|
日韩精品无码一区二区三区
|
国产福利小视频
|
欧美精品中文字幕久久二区
|
久久不卡
|
亚洲91
|
欧美大片一区
|
国产精品久久国产精品99 gif
|
日日艹夜夜艹
|
玖草资源
|
激情婷婷成人
|
久久99精品久久
|
亚洲va欧美va天堂v国产综合
|
日韩精品一
|
欧美亚洲国产一区二区三区
|
一区二区三区视频免费看
|
免费午夜电影
|