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

📄 main.c

📁 具有寻黑带、趋光、避障功能
💻 C
字号:
#include<stdio.h>
#include<reg52.h>
#include <absacc.h>
#include"tdp.h"

/*******************全局变量*************************/
uchar DACdata[3];						//1,2,3路DAC转换值
uchar dbuf[8];									//显示缓冲区 
uint ShiJian=0,LuChen=0;				//小车走过的时间和路程
uint Clk;							
uint Alm1;							
bit  Alm1_b;							
bit  ZhangAiWu=0;
/************************************主函数**********************************/
void main(void)
{
	int i;
	for (i=0;i<1000;i++);
	TMOD=0X21;
	LOAD_T0;
	TH1=200;
	TR0=1;
	TR1=1;
	ET0=1;
	ET1=1;
	IT0=1;
//	EX0=1;
	EA=1;
	while(1)//选择运行方式
	{	
		if(!key1)goto bi_zhang;
		if(!key2)goto xun_gui;
		if(!key3)goto qu_guang;
	}
/************************************
                 避障
*************************************/
bi_zhang:
	while(1)
	{
		if(ZhangLED==0&Alm1_b)ZhangAiWu=1;
		BiZhang();
		JiShi();
	}
/************************************
                 寻轨
*************************************/

xun_gui:
	while(1)
	{
		XunGui();
		JiShi();
	}
/************************************
                 趋光
*************************************/
qu_guang:
	while(1)
	{	
		if(Clk%10==0)DAC0809();
		JiShi();
		QuGuang();
	}
}
/**********************************外部中断0*********************************/
void Int0() interrupt 0 using 1
//捕捉障碍物信号
{
	ZhangAiWu=1;

}
/**********************************定时0中断***********************************/
void Timer0() interrupt 1 using 1
{
	LOAD_T0;
	Clk++;
	Display();
	if(Alm1--==0){Alm1_b=1;}	
}
/*****************************************外部中断1****************************/
void Int1() interrupt 2 using 1
//捕捉黑带信号
{
}
/*****************************定时1中断******************************************/
void Timer1() interrupt 3 using 1
{
	HongWai=!HongWai;//产生红外脉冲信号
}
/*****************************************显示*************************************/
void Display()
{
	static char i=0;
	static uint t;
	if(Clk!=t)
	{
		t=Clk;
		P0=dbuf[i]|(i<<4);
		if(i++==7)i=0;
	 }
}
/***************************************DAC0809***************************************/
void DAC0809()
{
	char i,t;
	uchar tmp;
	uchar pdata *dac;
	P2&=0xfe;
	for(i=0;i<3;i++)
	{
		dac=i;
		tmp=P0;
		P0=0xff;
		*dac=0xff;
		P0=tmp;
		for(t=0;t<10;t++);
		while(EOC);
		DACdata[i]=*dac;
		P0=tmp;
	 }
	 P2|=0xfe;	
}
/***************************************计时函数***************************************/
void JiShi(void)
{
	static uint t=0;
	char i;
	uint sj;
	if(Clk-t>=1000)
	{
		t=Clk;
		ShiJian++;
		sj=ShiJian;
		for(i=3;i>=0;i--)
		{
			dbuf[i]=sj%10;
			sj=sj/10;
		 }
	}
}
/**************************************计算路程****************************************/
void JiLuChen(void)
{
	
}

⌨️ 快捷键说明

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