久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
智能尋鐵絲尋跡小車單片機(jī)程序 電感式接近開關(guān)做的
[打印本頁]
作者:
yyb00
時(shí)間:
2017-12-4 19:54
標(biāo)題:
智能尋鐵絲尋跡小車單片機(jī)程序 電感式接近開關(guān)做的
用電感式接近開關(guān)做的尋鐵絲小車
單片機(jī)源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P0_4 = P0^4; //后輪輸入口
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;
sbit P0_0 = P0^0; //前輪輸入口
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit Left_moto_pwm = P3^6; //電機(jī)使能
sbit Right_moto_pwm = P3^7;
sbit Left_moto_pwm2 = P3^5;
sbit Right_moto_pwm2 = P3^4;
sbit P20 = P2^0; //金屬檢測(cè)器I/O口 //左
sbit P21 = P2^1; // 中
sbit P22 = P2^2; //右
sbit rw=P2^5; //1602
sbit rs=P2^6;
sbit en=P2^7;
sbit beep=P2^4;//蜂鳴器
uchar code table[]="Distance";
uchar code table1[]="Time";
unsigned int motor1=0; //計(jì)左電機(jī)碼盤脈沖值 (碼盤值為20)
unsigned int motor2=0; //計(jì)右電機(jī)碼盤脈沖值
// #define Left_moto_pwm P3_6 //接驅(qū)動(dòng)模塊ENA 使能端,輸入PWM信號(hào)調(diào)節(jié)速度 (左馬達(dá)調(diào)節(jié)PWM) 前
// #define Right_moto_pwm P3_7 //接驅(qū)動(dòng)模塊ENB (右馬達(dá)調(diào)節(jié)PWM)
// #define Left_moto_pwm2 P3_5 //接驅(qū)動(dòng)模塊ENA 使能端,輸入PWM信號(hào)調(diào)節(jié)速度 (左馬達(dá)調(diào)節(jié)PWM) 后
// #define Right_moto_pwm2 P3_4 //接驅(qū)動(dòng)模塊ENB (右馬達(dá)調(diào)節(jié)PWM)
#define Left_moto_go {P0_4=0,P0_5=1;} // 左電機(jī)前進(jìn) 前 P0_4=0,P0_5=1;
#define Left_moto_back {P0_4=1,P0_5=0;} // 左電機(jī)后退 前 P0_4=1,P0_5=0
#define Right_moto_go {P0_6=1,P0_7=0;} //右電機(jī)前轉(zhuǎn) 后 P0_6=1,P0_7=0;
#define Right_moto_back {P0_6=0,P0_7=1;} //右電機(jī)后退 后 P0_6=0,P0_7=1
#define Left_moto_go2 {P0_2=0,P0_3=1;} //左電機(jī)前進(jìn) P0_2=0,P0_3=1
#define Left_moto_back2 {P0_2=1,P0_3=0;} //左電機(jī)后退 P0_2=1,P0_3=0 前左
#define Right_moto_go2 {P0_0=1,P0_1=0;} //右電機(jī)前轉(zhuǎn) P0_0=1,P0_1=0 前右
#define Right_moto_back2 {P0_0=0,P0_1=1;} //右電機(jī)后退 P0_0=0,P0_1=1
#define Left_moto_stop22 {P0_2=0,P0_3=0;} //左電機(jī)后退 P0_2=0,P0_3=0
#define Right_moto_stop22 {P0_0=0,P0_1=0;} //右電機(jī)前轉(zhuǎn) P0_0=0,P0_1=0
#define Left_moto_stop21 {P0_4=0,P0_5=0;} // 左電機(jī)后退 后 P0_4=0,P0_5=0
#define Right_moto_stop21 {P0_6=0,P0_7=0;} //右電機(jī)前轉(zhuǎn) 后 P0_6=0,P0_7=0;
unsigned char pwm_val_left =0;//變量定義
unsigned char push_val_left =0;// 左電機(jī)占空比N/20 推動(dòng) //計(jì)算占空比時(shí)N的值(人工改變值)
unsigned char pwm_val_right =0; //通過它來實(shí)現(xiàn)PWM的改變(通過FOR循環(huán))
unsigned char push_val_right=0;// 右電機(jī)占空比N/20
unsigned char pwm_val_left2 =0;//變量定義
unsigned char push_val_left2 =0;// 左電機(jī)占空比N/20 推動(dòng) //計(jì)算占空比時(shí)N的值(人工改變值)
unsigned char pwm_val_right2 =0; //通過它來實(shí)現(xiàn)PWM的改變(通過FOR循環(huán))
unsigned char push_val_right2=0;// 右電機(jī)占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
bit Right_moto_stop2=1;
bit Left_moto_stop2 =1;
unsigned int time=0;
uchar num2,shi=0,fen=0,miao=0; //num2用于時(shí)鐘部分
uint num,num1,num3,sum,num7; //num,num1,num3用于距離處理部分
unsigned long num6,S=0,S1=0,S2=0;
uchar jc; //檢測(cè)
/**************************1602顯示**********************************************/
void delayms(uint xms)//延時(shí)函數(shù)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
rs=0;
en=0;
P1=com;
delayms(5);
en=1;
delayms(5);
en=0;
}
void write_date(uchar date)
{
rs=1;
en=0;
P1=date;
delayms(5);
en=1;
delayms(5);
en=0;
}
void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x00+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_juli(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void led_1602_init() //1602初始化函數(shù)
{
rw=0;
en=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void timer1()interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num2++;
if(num2==20)
{
num2=0;
miao++;
}
if(miao==60)
{
miao=0;
fen++;
}
if(fen==60)
{
fen=0;
shi++;
}
if(shi==24)
{
shi=0;
}
}
void deal_juli() //測(cè)距函數(shù)
{
// S=S1*100+S2;
// uint sum;
sum=motor1+motor2; // 求和
num=sum/2.0; // 求平均值
num1=num/160.0;//求輪子旋轉(zhuǎn)圈數(shù)
num3=num1*22.5;//輪子走過的距離 算出來的是cm
S2=num3;
S=S2/100;
S1=S2%100;
// write_juli(9,S);
// write_juli(12,S1);
}
/*********************************************************************************************
蜂鳴器
/********************************************************************************************/
//void sound()
//{
// uint i;
// for(i=4;i>0;i--)
// {
// beep=~beep;
// delayms(100); //控制蜂鳴器的頻率
// }
//}
/*********************************************************************************************
外部中斷INT0計(jì)算電機(jī)1的脈沖
/********************************************************************************************/
void intersvr1(void) interrupt 0 using 1
{
motor1++;
if(motor1>=9999)
motor1=0;
}
/*********************************************************************************************
外部中斷INT1計(jì)算電機(jī)2的脈沖
/********************************************************************************************/
void intersvr2(void) interrupt 2 using 3
{
motor2++;
if(motor2>=9999)
motor2=0;
}
/************************************************************************/
void run(void) //前進(jìn)函數(shù)
{
//// TR1=1;
// push_val_left =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
// push_val_right =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
//
// push_val_left2 =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
// push_val_right2 =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
if(P20==0&&P21==0&&P22==0) //全測(cè)到
{
TR1=0;
Left_moto_stop21 ; //左電機(jī)
Right_moto_stop21 ; //右電機(jī)
Left_moto_stop22 ; //左電機(jī)
Right_moto_stop22 ; //右電機(jī)
}
else if(P20==1&&P21==0&&P22==1) //中間測(cè)到 //前進(jìn)函數(shù)
{
TR1=1;
push_val_left =9; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =9; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =9; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =9; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Left_moto_go ; //停止
Right_moto_go ;
Left_moto_go2 ;
Right_moto_go2 ;
push_val_left =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =4; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Left_moto_go ; //停止
Right_moto_go ;
Left_moto_go2 ;
Right_moto_go2 ;
}
else if(P20==0&&P21==1&&P22==1) //左邊測(cè)到
{
TR1=1;
push_val_left =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Right_moto_go;
Right_moto_go2;
Left_moto_back;
Left_moto_back2;
}
else if(P20==1&&P21==1&&P22==0) //右邊測(cè)到
{
TR1=1;
push_val_left =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =7; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Right_moto_back;
Right_moto_back2;
Left_moto_go;
Left_moto_go2;
}
else if(P20==0&&P21==0&&P22==1) //左兩測(cè)到
{
TR1=1;
push_val_left =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Left_moto_go ; //停止
Right_moto_go ;
Left_moto_go2 ;
Right_moto_go2 ;
push_val_left =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Left_moto_go ; //停止
Right_moto_go ;
Left_moto_go2 ;
Right_moto_go2 ;
}
else if(P20==1&&P21==0&&P22==0) //右兩測(cè)到
{
TR1=1;
push_val_left =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =8; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Left_moto_go ; //停止
Right_moto_go ;
Left_moto_go2 ;
Right_moto_go2 ;
push_val_left =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_left2 =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
push_val_right2 =3; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個(gè)值可以改變其速度
Left_moto_go ; //停止
Right_moto_go ;
Left_moto_go2 ;
Right_moto_go2 ;
}
}
/************************************************************************/
/* PWM調(diào)制電機(jī)轉(zhuǎn)速 */
/************************************************************************/
/* 左電機(jī)調(diào)速 */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
Left_moto_pwm=1;
else
Left_moto_pwm=0;
if(pwm_val_left>=20)
pwm_val_left=0;
}
else Left_moto_pwm=0;
}
/******************************************************************/
/* 右電機(jī)調(diào)速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
Right_moto_pwm=1;
else
Right_moto_pwm=0;
if(pwm_val_right>=20)
pwm_val_right=0;
}
else Right_moto_pwm=0;
}
/************************************************************************/
/* 222222 2PWM調(diào)制電機(jī)轉(zhuǎn)速2 */
/************************************************************************/
/* 左電機(jī)調(diào)速 */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */
void pwm_out_left_moto2(void)
{
if(Left_moto_stop2)
{
if(pwm_val_left2<=push_val_left2)
Left_moto_pwm2=1;
else
Left_moto_pwm2=0;
if(pwm_val_left2>=20)
pwm_val_left2=0;
}
else Left_moto_pwm2=0;
}
/******************************************************************/
/* 右電機(jī)調(diào)速 */
void pwm_out_right_moto2(void)
{
if(Right_moto_stop2)
{
if(pwm_val_right2<=push_val_right2)
Right_moto_pwm2=1;
else
Right_moto_pwm2=0;
if(pwm_val_right2>=20)
pwm_val_right2=0;
}
else Right_moto_pwm2=0;
}
/***************************************************/
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
void timer0()interrupt 1 using 2
{
TH0=0Xfe; //0.1Ms定時(shí)
TL0=0Xa3;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
pwm_val_left2++;
pwm_val_right2++;
pwm_out_left_moto2();
pwm_out_right_moto2();
}
/***************************************************/
/**********************循跡程序*****************************/
void main(void)
{
TMOD=0X11;
TH0= 0Xfe; //0.1ms定時(shí)
TL0= 0Xa3;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA = 1; //中斷總開關(guān)
TR0= 1;
ET0= 1;
// TR1=1;
ET1=1;
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
yyb.zip
(3.08 KB, 下載次數(shù): 88)
2017-12-4 19:51 上傳
點(diǎn)擊文件名下載附件
用到測(cè)速,電感式接近開關(guān),pwm調(diào)速
下載積分: 黑幣 -5
作者:
guanguandde
時(shí)間:
2018-6-19 11:00
好資料,51黑有你更精彩!!!
作者:
guanguandde
時(shí)間:
2018-6-19 11:01
想問一下樓主有小車的照片嗎?還有這個(gè)模塊用的是那種的啊?》
作者:
liuyanga
時(shí)間:
2018-6-23 10:36
我們之前做電子產(chǎn)品設(shè)計(jì)大賽的時(shí)候做的就是這個(gè)
作者:
走馬一生
時(shí)間:
2018-7-26 20:19
這是用的ldc1000和52實(shí)現(xiàn)的么???
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
天天插天天射天天干
|
成人欧美一区二区三区在线播放
|
91精品一区
|
精品91
|
久久精品女人天堂av
|
色橹橹欧美在线观看视频高清
|
97精品超碰一区二区三区
|
午夜精品视频在线观看
|
嫩草视频在线看
|
中文字字幕在线中文乱码范文
|
久久久久国产精品一区二区
|
中文字幕亚洲精品
|
精品视频一区二区三区在线观看
|
欧美日本一区二区
|
一区二区在线不卡
|
精品一区二区三区中文字幕
|
免费午夜剧场
|
国产精品九九九
|
午夜精品一区二区三区在线观看
|
久久久久久久夜
|
欧美综合视频
|
日韩一区二区在线视频
|
美国av毛片
|
91视频大全
|
欧美激情欧美激情在线五月
|
福利久久
|
成人在线免费网站
|
国产精品99久久久久久宅男
|
亚洲第一免费播放区
|
久久久成人网
|
免费在线观看av的网站
|
亚洲高清在线观看
|
99精品99
|
九九亚洲
|
三级视频国产
|
亚洲欧美网站
|
精品一级毛片
|
成人婷婷
|
一级毛片在线播放
|
99久久国产综合精品麻豆
|
精品国产青草久久久久96
|