⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jishi.c

📁 电子大赛循迹小车小车原理图1 可自动循迹、加速减速、和自动循迹。
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit black1=P2^0;
sbit black2=P2^1;
sbit left1=P2^2;
sbit right1=P2^3;
sbit left2=P2^4;
sbit right2=P2^5;
sbit rs=P2^7;
sbit lcden=P2^6;
sbit IN4=P1^0;
sbit ENB=P1^1;
sbit IN3=P1^2;
sbit IN2=P1^3;
sbit ENA=P1^4;
sbit IN1=P1^5;
uchar t,a,b,c,d,e,f;
uint s,t1,road,speed;
uchar code table[]="T:000s S:00.00m";
uchar code table1[]="v:00.00cm/s  00s";
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

void write_com(uchar com)
{
	rs=0;
	lcden=0;
	P0=com;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;	
}

void write_date(uchar date)
{
	rs=1;
	lcden=0;
	P0=date;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;	
}
void write_time(uchar dat)
{
	uchar bai,shi,ge;
	bai=dat/100;
	shi=dat%100/10;
	ge=dat%10;
	write_com(0x80+2);
	write_date(0x30+bai);
	write_date(0x30+shi);
	write_date(0x30+ge);
}
void write_rosp(uchar add,uint rosp)
{
	uchar qian,bai,shi,ge;
	qian=rosp/1000;
	bai=rosp%1000/100;
	shi=rosp%1000%100/10;
	ge=rosp%10;
	write_com(0x80+add);
	write_date(0x30+qian);
	write_date(0x30+bai);
	write_com(0x80+add+3);
	write_date(0x30+shi);
	write_date(0x30+ge);
}
void write_daoji(uint daoji)
{
	uchar shi,ge;
	shi=daoji/10;
	ge=daoji%10;
	write_com(0x80+0x40+13);
	write_date(0x30+shi);
	write_date(0x30+ge);
}
void init()
{
	uchar num;
	lcden=0;
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);
	write_com(0x80);
	for(num=0;num<15;num++)
		{
			write_date(table[num]);
			delay(5);
		}
	write_com(0x80+0x40);
	for(num=0;num<16;num++)
		{
			write_date(table1[num]);
			delay(5);
		}
	TMOD=0x11;
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	EA=1;//开总中
	EX0=1;//开外部中断0
	TCON=0x01;
	ET0=1;//开定时器0中断
	ET1=1;
	TR0=1;//启动定时器0
	t=0;
	a=0;
	b=0;
	c=0;
	d=0;
	e=0;
	t1=0;
	s=0;
	xunji();
}
void limit()
{
	black1=1;
	black2=1;
	if(black1==0&&black2==0)
	{
		delay(5);
		if(black1==1&&black2==1)c++;if(c==9)c=0;
	}
	if(c==2||c==6)
	{
		if(speed>=25)
		{
			ENA=0;
			ENB=0;
		}
		if(speed<=20)
		{
			ENA=1;
			ENB=1;
		}
		xunji();
	}
	if(c==4)
	{	
		ENA=1;
		ENB=1;
		IN1=1;
		IN2=1;
		IN3=1;
		IN4=1;
		TR1=1;
		f=10;
		write_daoji(f);
	}
	if(c==8)
	{
		ENA=1;
		ENB=1;
		IN1=1;
		IN2=1;
		IN3=1;
		IN4=1;
	}
	else 
	{
		ENA=1;
		IN1=1;
		IN2=0;
		ENB=1;
		IN3=1;
		IN4=0;
		xunji();
	}
}
void xunji()
{
		if(left1==0||(right1==1&&right2==0))			//左拐
		{
		 	ENA=0;
			ENB=1;
			IN3=1;
			IN4=0;
		}
		else if(right1==0||(left1==1&&left2==0))			//右拐
		{
			ENA=1;
			IN1=1;
			IN2=0;
			ENB=0;
		}
}
void main()
{
	init();
	while(1)
	{
		limit();
	}
}
void exter0() interrupt 0
{
	speed=60000/t1;
	t1=0;
	write_rosp(0x42,speed);
	s++;
	road=6*s;
		write_rosp(9,road);
}
void timer0() interrupt 1 
{
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	t1++;	b++;
	if(b==100)
	{
		b=0;
		t++;
		write_time(t);
	}
}
void timer1() interrupt 3
{
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	d++;
	if(d%20==0){f--;write_daoji(f);}
	if(d==200)
	{
		d=0;
		TR1=0;
		ENA=1;
		ENB=1;
		IN1=1;
		IN2=0;
		IN3=0;
		IN4=1;
		if(left1==0&&right2==0)
		{
			delay(5);
			if(left1==1&&right2==1)e++;
		}
		if(left2==0&&right1==0)
		{
			delay(5);
			if(left2==1&&right1==1)e++;
		}
		while(c==5&&e==2)
		{
			ENA=1;
			ENB=1;
			IN1=1;
			IN2=0;
			IN3=1;
			IN4=0;
			e=0;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -