📄 main.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 + -