久久久久久久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
主站蜘蛛池模板:
av大全在线观看
|
久久久久无码国产精品一区
|
亚洲精品久久久久久久久久久久久
|
日韩精品一区二区三区在线观看
|
婷婷丁香综合网
|
日韩免费一区
|
国产在线一区二区三区
|
婷婷福利
|
亚洲精品一区av在线播放
|
久久另类视频
|
国产综合视频
|
成人精品网
|
欧美性一级
|
欧美精品乱码久久久久久按摩
|
日韩av高清
|
91精品国产综合久久精品
|
精品中文字幕一区
|
国产区高清
|
免费一级黄
|
另类专区亚洲
|
日韩精品一区二区三区四区
|
成年人在线观看
|
欧美日韩一区二区三区四区五区
|
91在线精品视频
|
免费人成在线观看网站
|
亚洲一区二区免费看
|
欧美色a v
|
美女一区二区在线观看
|
999久久久
|
国产一级片一区二区三区
|
伊人网在线看
|
福利社午夜影院
|
2021天天干夜夜爽
|
欧美操操操
|
国产福利在线播放麻豆
|
99久久精品国产麻豆演员表
|
亚洲精品日韩综合观看成人91
|
免费毛片www com cn
|
国内精品一区二区三区
|
国色天香成人网
|
一区二区不卡高清
|