久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
1602顯示碼盤測行走距離,所用時間小車
[打印本頁]
作者:
唯戀一人心
時間:
2017-11-23 14:32
標(biāo)題:
1602顯示碼盤測行走距離,所用時間小車
/****************************************************************************
硬件連接
P1_6 接驅(qū)動模塊ENA 使能端,輸入PWM信號調(diào)節(jié)速度
P1_7 接驅(qū)動模塊ENB 使能端,輸入PWM信號調(diào)節(jié)速度
P1_5 接驅(qū)動模塊ENA 使能端,輸入PWM信號調(diào)節(jié)速度
P1_4 接驅(qū)動模塊ENB 使能端,輸入PWM信號調(diào)節(jié)速度
P0_4 P0_5 接IN1 IN2 當(dāng) P0_4=1,P0_5=0; 時左電機正轉(zhuǎn) 驅(qū)動藍(lán)色輸出端OUT1 OUT2接左電機
P0_4 P0_5 接IN1 IN2 當(dāng) P0_4=0,P0_5=1; 時左電機反轉(zhuǎn)
P0_6 P0_7 接IN3 IN4 當(dāng) P0_6=1,P0_7=0; 時右電機正轉(zhuǎn) 驅(qū)動藍(lán)色輸出端OUT3 OUT4接右電機
P0_6 P0_7 接IN3 IN4 當(dāng) P0_6=0,P0_7=1; 時右電機反轉(zhuǎn)
P0_0 P0_1 接IN1 IN2 當(dāng) P0_0=1,P0_1=0; 時左電機正轉(zhuǎn) 驅(qū)動藍(lán)色輸出端OUT1 OUT2接左電機
P0_0 P0_1 接IN1 IN2 當(dāng) P0_0=0,P0_1=1; 時左電機反轉(zhuǎn)
P0_2 P0_3 接IN3 IN4 當(dāng) P0_2=1,P0_3=0; 時右電機正轉(zhuǎn) 驅(qū)動藍(lán)色輸出端OUT3 OUT4接右電機
P0_2 P0_3 接IN3 IN4 當(dāng) P0_2=0,P0_3=1; 時右電機反轉(zhuǎn)
INT0為P3.2 INT1為P3.3
****************************************************************************/
#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 P1_6 = P1^6;
sbit P1_7 = P1^7;
sbit P1_5 = P1^5;
sbit P1_4 = P1^4;
sbit rw=P2^5;
sbit rs=P2^6;
sbit en=P2^7;
uchar code table[]="Distance";
unsigned int motor1=0; //計左電機碼盤脈沖值 (碼盤值為20)
unsigned int motor2=0; //計右電機碼盤脈沖值
#define Left_moto_pwm P1_6 //接驅(qū)動模塊ENA 使能端,輸入PWM信號調(diào)節(jié)速度 (左馬達(dá)調(diào)節(jié)PWM) 前
#define Right_moto_pwm P1_7 //接驅(qū)動模塊ENB (右馬達(dá)調(diào)節(jié)PWM)
#define Left_moto_pwm2 P1_5 //接驅(qū)動模塊ENA 使能端,輸入PWM信號調(diào)節(jié)速度 (左馬達(dá)調(diào)節(jié)PWM) 后
#define Right_moto_pwm2 P1_4 //接驅(qū)動模塊ENB (右馬達(dá)調(diào)節(jié)PWM)
#define Left_moto_go {P0_4=0,P0_5=1;} // 左電機前進(jìn) 后 P0_4=0,P0_5=1;
#define Left_moto_back {P0_4=1,P0_5=0;} // 左電機后退 后 P0_4=1,P0_5=0
#define Right_moto_go {P0_6=1,P0_7=0;} //右電機前轉(zhuǎn) 后 P0_6=1,P0_7=0;
#define Right_moto_back {P0_6=0,P0_7=1;} //右電機后退 后 P0_6=0,P0_7=1
#define Left_moto_go2 {P0_2=0,P0_3=0;} //左電機前進(jìn) P0_2=0,P0_3=0
#define Left_moto_back2 {P0_2=1,P0_3=0;} //左電機后退 P0_2=1,P0_3=0
#define Right_moto_go2 {P0_0=1,P0_1=0;} //右電機前轉(zhuǎn) P0_0=1,P0_1=0
#define Right_moto_back2 {P0_0=0,P0_1=1;} //右電機后退 P0_0=0,P0_1=1
unsigned char pwm_val_left =0;//變量定義
unsigned char push_val_left =0;// 左電機占空比N/10 推動 //計算占空比時N的值(人工改變值)
unsigned char pwm_val_right =0; //通過它來實現(xiàn)PWM的改變(通過FOR循環(huán))
unsigned char push_val_right=0;// 右電機占空比N/10
unsigned char pwm_val_left2 =0;//變量定義
unsigned char push_val_left2 =0;// 左電機占空比N/10 推動 //計算占空比時N的值(人工改變值)
unsigned char pwm_val_right2 =0; //通過它來實現(xiàn)PWM的改變(通過FOR循環(huán))
unsigned char push_val_right2=0;// 右電機占空比N/10
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 num6,num2,shi=0,fen=0,miao=0; //num2用于時鐘部分
uint num,num1,num3,sum; //num,num1,num3用于距離處理部分
unsigned long S=0,S1,S2;
/**************************1602顯示**********************************************/
void delayms(uint xms)//延時函數(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;
P0=com;
delayms(5);
en=1;
delayms(5);
en=0;
}
void write_date(uchar date)
{
rs=1;
en=0;
P0=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+0x40+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+0x00+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);
write_com(0x80+0x40);
for(num6=0;num6<12;num6++)
{
write_date(table[num6]);
delayms(5);
}
write_com(0x80+0x00+0);
write_date('T');
delayms(5);
write_com(0x80+0x00+1);
write_date('i');
delayms(5);
write_com(0x80+0x00+2);
write_date('m');
delayms(5);
write_com(0x80+0x00+3);
write_date('e');
delayms(5);
write_com(0x80+0x00+3);
write_date(':');
delayms(5);
write_com(0x80+0x00+7);
write_date(':');
delayms(5);
write_com(0x80+0x00+10);
write_date(':');
delayms(5);
write_com(0x80+0x40+8);
write_date(':');
delayms(5);
write_com(0x80+0x40+14);
write_date('M');
delayms(5);
}
void timer1()interrupt 3
{
TH0=(65536-45872)/256;
TL0=(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;
}
write_sfm(11,miao);
write_sfm(8,fen);
write_sfm(5,shi);
}
void deal_juli() //測距函數(shù)
{
S=S1*100+S2;
// uint sum;
sum=motor1+motor2; // 求和
num=sum/2.0; // 求平均值
num1=num/20.0;//求輪子旋轉(zhuǎn)圈數(shù)
num3=num1*22.5;//輪子走過的距離 算出來的是cm
S2=num3;
write_juli(9,S1);
write_juli(12,S2);
}
/*********************************************************************************************
外部中斷INT0計算電機1的脈沖
/********************************************************************************************/
void intersvr1(void) interrupt 0 using 1
{
motor1++;
if(motor1>=9999)
motor1=0;
}
/*********************************************************************************************
外部中斷INT1計算電機2的脈沖
/********************************************************************************************/
void intersvr2(void) interrupt 2 using 3
{
motor2++;
if(motor2>=9999)
motor2=0;
}
/************************************************************************/
// void run(void) //前進(jìn)函數(shù)
//{
// push_val_left =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
// push_val_right =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
//
// push_val_left2 =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
// push_val_right2 =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
//
// Left_moto_go ; //左電機前進(jìn)
// Right_moto_go ; //右電機前進(jìn)
//
// Left_moto_go2 ; //左電機前進(jìn)
// Right_moto_go2 ; //右電機前進(jìn)
//}
void zuozhuan()
{
push_val_left =10; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
push_val_right =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
push_val_left2 =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
push_val_right2 =5; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
Right_moto_go;
Right_moto_go2;
Left_moto_back;
// Left_moto_back2;
}
// void youzhuan()
//{
// push_val_left =2; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
// push_val_right =2; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
//
// push_val_left2 =2; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
// push_val_right2 =2; //PWM 調(diào)節(jié)參數(shù)1-20 1為最慢,20是最快 改這個值可以改變其速度
// Right_moto_back;
//// Right_moto_back2;
// Left_moto_go;
// Left_moto_go2;
//}
/************************************************************************/
/* PWM調(diào)制電機轉(zhuǎn)速 */
/************************************************************************/
/* 左電機調(diào)速 */
/*調(diào)節(jié)push_val_left的值改變電機轉(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;
}
/******************************************************************/
/* 右電機調(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)制電機轉(zhuǎn)速2 */
/************************************************************************/
/* 左電機調(diào)速 */
/*調(diào)節(jié)push_val_left的值改變電機轉(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;
}
/******************************************************************/
/* 右電機調(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信號*/
void timer0()interrupt 1 using 2
{
TH0=0Xfe; //0.1Ms定時
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定時
TL0= 0Xa3;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA = 1; //中斷總開關(guān)
TR0= 1;
ET0= 1;
ET1=1;
TR1=1;
// EA = 1; //中斷總開關(guān)
EX0 = 1; //允許外部中斷0中斷
IT0 = 1; //1:下沿觸發(fā) 0:低電平觸發(fā)
EX1 = 1;
IT1 = 1;
led_1602_init();
while(1) /*無限循環(huán)*/
{
deal_juli();//距離處理函數(shù)
// run();
zuozhuan();
}
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一区二区三区久久
|
国产黄色精品视频
|
欧美一区二区三区成人
|
国产99页
|
伊人色综合网
|
中国少妇xxxxhd做受
|
婷久久
|
日韩视频在线观看免费
|
av手机在线免费观看
|
伊人久久影院
|
国产综合视频在线观看
|
天堂免费av
|
久久免费看视频
|
毛片网站视频
|
黄色在线播放
|
黄色天天影视
|
免费看的毛片
|
三级黄色网
|
特级西西444www大胆免费看
|
福利av在线
|
精品视频免费在线观看
|
久久精品6
|
久久久久久九九九九
|
少妇一级淫免费观看
|
天堂一区二区三区
|
一区二区免费在线观看
|
精品福利一区
|
亚洲性视频
|
日本在线视频一区
|
亚洲黄色影院
|
91久久国产综合久久91精品网站
|
亚洲欧美日本在线
|
爱福利视频
|
亚洲久热
|
国产成人精品一区二区三区视频
|
国产毛片毛片毛片
|
欧美日韩精品一区二区在线播放
|
波多野结衣之双调教hd
|
日韩欧美自拍
|
91成人精品
|
深夜福利av
|