325 基于单片机汽车智能小车避障系统设计【毕设课设】

本设计采用AT89C52为主要控制芯片的智能车,HC-SR04为超声波测距传感器。该汽车避障系统拥有自动声光报警、超声波测距,自动避开障碍物等功能。当汽车与障碍物之间的距离小于安全距离35cm时,汽车能够及时避开障碍物,同时LCD1602液晶屏上会显示汽车与障碍物之间的距离以及蜂鸣器会声光报警。附件内容含有电路图、仿真图及程序。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1_ZJ-8VRG9AnMD8jcExkbsA?pwd=8888

部分代码展示

#include<reg52.h>    //包含单片机寄存器的头文件
#include<intrins.h>  //包含_nop_()函数定义的头文件
#include "LCD.h"     //包含LCD1602显示屏工作时序头文件
#include<math.h>     //包含数学运算的头文件
#include "I2C.h"     //包含I2C工作时序头文件
#include<stdio.h>    //包含Printf等标准输入输出头文件

unsigned char code digit[10]={"0123456789"};     //定义字符数组显示数字
unsigned char code Str[]={"Test by DS18B20"};    //说明显示的是温度
unsigned char code Error[]={"Error!Check!"};     //说明没有检测到DS18B20
unsigned char code Temp[]={"Temp:"};             //说明显示的是温度
unsigned char code Cent[]={"Cent"};              //温度单位

sbit safe=P1^0;
sbit danger=P1^1;
sbit sound=P1^2;
sbit anybody=P2^4;
/*****************************************************
函数功能:延时1ms
(2j+3)*i+5=(2×98+3)×5+5=1000(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
   unsigned char i,j;	
	 for(i=0;i<5;i++)
	  for(j=0;j<98;j++)
	   ;		 
 }
/*****************************************************
函数功能:延时10ms
((2k+3)*j+3)*5+5=(2×98+3)×5+5=10000(微秒),可以认为是10毫秒
***************************************************/
 void delay10ms(void) 
{  unsigned char i,j,k;      
   for(i=5;i>0;i--)        
   for(j=4;j>0;j--)      
   for(k=248;k>0;k--);
}
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
 void delaynms(unsigned char n)
 {
   unsigned char i;
	for(i=0;i<n;i++)
	   delay1ms();
 }
 /*****************************************************
函数功能:定时器中断输出方波,驱动蜂鸣器
频率:200Hz
***************************************************/
 void InitTimer0(void)//定时器初始化
{
    TMOD = 0x01;
    TH0 = 0x0EE;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    //TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1
{                   //定时器中断
    TH0 = 0x0EE;
    TL0 = 0x00;
    sound=~sound;
}

 /************************************************************************
以下是PCF的操作程序
 ************************************************************************/ 
unsigned char count = 0;
#define AddWr 0x90   //写数据地址 
#define AddRd 0x91   //读数据地址
unsigned char ReadADC(unsigned char Chl)
 {
   unsigned char Val;
   Start_I2c();                 //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40|Chl);          //发送器件子地址
     if(ack==0)return(0);
   Stop_I2c();
	 
   Start_I2c();
   SendByte(AddWr+1);
      if(ack==0)return(0);
   Val=RcvByte();
   Ack_I2c();                   //发送非应位
   Stop_I2c();                  //结束总线
  return(Val);
 }
 

/************************************************************************
以下是DS18B20的操作程序
 ************************************************************************/ 
sbit DQ=P2^3;
unsigned char time;   //设置全局变量,专门用于严格延时
/*****************************************************
函数功能:将DS18B20传感器初始化,读取应答信号
出口参数:flag 
***************************************************/
bit Init_DS18B20(void)	
{
 bit flag;         //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在
 DQ = 1;           //先将数据线拉高
 for(time=0;time<2;time++) //略微延时约6微秒
     ;
 DQ = 0;           //再将数据线从高拉低,要求保持480~960us
 for(time=0;time<200;time++)  //略微延时约600微秒
     ;         //以向DS18B20发出一持续480~960us的低电平复位脉冲 
 DQ = 1;           //释放数据线(将数据线拉高) 
  for(time=0;time<10;time++)
     ;  //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
 flag=DQ;          //让单片机检测是否输出了存在脉冲(DQ=0表示存在)      
 for(time=0;time<200;time++)  //延时足够长时间,等待存在脉冲输出完毕
      ;
 return (flag);    //返回检测成功标志
}
/*****************************************************
函数功能:从DS18B20读取一个字节数据
出口参数:dat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值