标题:
循迹小车代码
[打印本页]
作者:
走廊歌手
时间:
2016-6-22 08:55
标题:
循迹小车代码
循迹小车代码
0.png
(67.6 KB, 下载次数: 45)
下载附件
2016-6-23 23:55 上传
#include "1602.h"
#include <reg52.h>
sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit H1=P0^6;
sbit H2=P0^7;
/*sbit L1=P0^0;
sbit L3=P0^7;
sbit L2=P2^0;
sbit L4=P2^1;
sbit H1=P0^2;
sbit H2=P0^4;
*/
uchar s1[2];
uchar d1[2];
uchar t1[2];
uint speed;
uint maxd;
uint i;
uint tt;
uint f;
long unsigned int distance1;
long unsigned int ti;
void scan();
void Pwm(uint distance,uint x);
void init();
void distancedisplay();
void speeddisplay();
void chuli();
void welcome();
void PWM(uint pw,uint a);
void Pathfinding();
void timedisplay();
void timedisplay()
{
if(f>999)
f=0;
t1[0]=f/100+'0';
t1[1]=(f%100)/10+'0';
t1[2]=f%10+'0';
LCD_Write_Char(11,0,t1[0]) ;
LCD_Write_Char(12,0,t1[1]) ;
LCD_Write_Char(13,0,t1[2]) ;
}
void PWM(uint pw,uint a)
{
switch(a)
{
case 1:
if(pw>i)
L1=1;
else if(pw<=i && i<100)
L1=0;
else if(i>100)
i=0;
break;//左轮一个脉冲50ms,占空比pw%
case 2:
if(pw>i)
L3=1;
else if(pw<=i && i<100)
L3=0;
else if(i>100)
i=0;
break;//右轮一个脉冲50ms,占空比pw%
}
}
void Pathfinding()
{
if(H1==0 && H2==0 )
{
PWM(65,1);
PWM(65,2);//直行
}
else if(H1==0 && H2==1)
{
PWM(50,1);
L3=0;// 右转
}
else if(H1==1 && H2==0)
{
PWM(50,2);
L1=0;// 左转
}
else
{
L1=0;
L3=0;
speed=0;// 停止
}
}
void welcome()
{
uint k,j;
uchar *pa;
pa="Welcome to my car!";
k=0;
while(*pa)
{
LCD_Write_Char(k,0,*pa);
pa++;
k++;
if(*pa==0)
LCD_Write_Com(0x18);
DelayMs(250);
}
for(j=0;j<8;j++)
DelayMs(250);
k=0;
}
void chuli()
{
distance1=distance1+22;
if(distance1>999)
{
distance1=0;
maxd++;
if(maxd>9)
maxd==0;
LCD_Write_Char(10,1,maxd+'0') ;
}
L1=1;
speeddisplay();
//L1=0;
distancedisplay();
}
void distancedisplay()
{
d1[0]=distance1/100+'0';
d1[1]=(distance1%100)/10+'0';
d1[2]=distance1%10+'0';
LCD_Write_Char(3,0,d1[0]) ;
LCD_Write_Char(4,0,d1[1]) ;
LCD_Write_Char(5,0,d1[2]) ;
}
void speeddisplay()
{
s1[0]=speed/100+'0';
s1[1]=(speed%100)/10+'0';
s1[2]=speed%10+'0';
LCD_Write_Char(3,1,s1[0]) ;
LCD_Write_Char(4,1,s1[1]) ;
LCD_Write_Char(5,1,s1[2]) ;
}
void init()
{
TMOD = 0x61; //t1计数模式,方式2自动重装 t0定时器模式,方式1,500us触发一次
TH0 =(65536-500)/256;
TL0 =(65536-500)%256;
TH1 =256-1;
TL1 =256-1;
EA = 1;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1=1;
}
void main()
{
i=0;
L2=0;
L4=0;
distance1=0;
ti=0;
speed=0;
LCD_Init();
DelayMs(10);
LCD_Clear();//清屏
init();
//welcome();
LCD_Clear();
LCD_Write_String(1,1,"v:");
LCD_Write_String(3,1,"000");
LCD_Write_String(6,1,"cm/s");
LCD_Write_String(1,0,"d:");
LCD_Write_String(3,0,"000");
LCD_Write_String(6,0,"cm");
//LCD_Write_String(9,0,"t:");
//LCD_Write_Char(14,0,'s');
while(1)
{
Pathfinding();
}
}
void Timer() interrupt 1 //定时器中断
{
TH0 =(65536-500)/256;
TL0 =(65536-500)%256;
ti++;
i++;
tt++;
if(tt==2000)
{
f++;
tt=0;
//timedisplay();
}
}
void cesu() interrupt 3 //定时器中断计数测速 1 P3.5输入计数脉冲
{
speed = 22/(ti*0.0005);
chuli();
ti=0;
}
复制代码
全部资料下载:
循迹小车.7z
(49.23 KB, 下载次数: 8)
2016-6-22 08:55 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1