多功能小车的设计_第1页
多功能小车的设计_第2页
多功能小车的设计_第3页
多功能小车的设计_第4页
多功能小车的设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于探测用途多功能小车的设计摘要:这是一个基于80C52单片机 温度传感器 超声波测距模块的一个智能小车系统。该系统能准确无误的测出温度和距离障碍物的距离,并且可以自动避障,显示温度距离。具有方便,实用性价比高的特点,经过在实践中的应用,有一定的推广价值。关键字:80C52单片机 温度传感器 超声波测距模块 智能小车系统引言:随着电子技术的飞速发展,越来越多的单片机技术的广泛使用已经应用于人们的 社会生产实践,人类的生活发生了根本性的改变。由于在现代生产实践中,从事某些生产作业的人员会遇到各种各样的问题以及一些安全隐患,基于此,本设计初步构想,希望通过设计该小车的设计,以及通过其所实现的功能能

2、够在将来的生产实践中得到有效合理的利用,从而满足和实现社会的需求。一、方案的选择与器件的选用本设计是基于STC89C52单片机进行的,多功能小车基于STC89C52并且通过利用超声波测距模块用来实现绕开障碍物和通过温度传感器模块用以实现探测环境温度的功能,同时以1602液晶显示屏来达到探测距离和温度的精确测量,并且在距离以及温度在达到一定的范围时,还能通过蜂鸣发生器和指示灯发出报警信号,提醒我们来避开一些危险,从而有效解决了人们生产实践中所遇到的各种难题。譬如:在生产作业的工作中,通过距离的探测,能够提醒相关工作人员躲避风险,通过温度的测量,能够提醒人们何时进行相关操作等。总而言之,该设计的广

3、泛使用能够指导和解决人们的各种生产实践所遇到的问题。一、具体实现的的功能: 利用超声波探测器来测量距离障碍物的距离,同时并将测得的具体数值在液晶显示屏上精确的显示出来,当距离小于10cm时,蜂鸣器会发声,且会进行自动转向已实现避障。 基于温度传感器用以测量周围环境的温度,同时并将测得的具体数值在液晶显示屏上精确的显示出来,当环境温度高于25C,LED灯会发光。二、主要单元电路的设计l 单片机主控制模块的设计STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1

4、接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻够上电复位电路,20引脚为接地端,40引脚为电源端。l 应用电路模块的设计。1602显示模块的电路图: 蜂鸣器模块的电路图: 温度显示器模块的电路图:l 应用程序的设计接线:模块TRIG接 P2.6 ECH0 接P2.7 注:AT89x51使用12M或11.0592M晶振,实测使用11.0592M=*/#include /器件配置文件#include #include 18b20.h#define RX P2_7#defin

5、e TX P2_6sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;sbit feng=P11;sbit deng=P10;sbit P36=P36;sbit P35=P35;sbit P34=P34;sbit P33=P33;sbit P27=P27; #define LCD_Data P0/*函数功能:测试LCD忙碌状态入口参数:出口参数:result*/bit LCD_Busy()bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delay_ms(5);/此处延时特别重要 (必不可少)resu

6、lt = (bit)(LCD_Data & 0x80);delay_ms(5);LCD_EN = 0;return result;/*函数功能:写指令数据到LCD子程序入口参数:要写入的指令出口参数:*/void LCD_Write_Command(unsigned char cmd)while(LCD_Busy(); /判断LCD是否忙碌LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_Data = cmd;delay_ms(5);LCD_EN = 0;/*函数功能:写入显示数据到LCD子程序入口参数:要写入的数据出口参数:*/void LCD_Write_Data(

7、unsigned char dat)while(LCD_Busy(); /判断LCD是否忙碌LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_Data = dat;delay_ms(5);LCD_EN = 0;/*函数功能:设定显示位置子程序入口参数:pos出口参数:*/void LCD_Position(unsigned char pos)LCD_Write_Command(pos|0x80);/*函数功能:LCD初始化子程序入口参数:出口参数:*/void LCD_Init()delay_ms(15);LCD_Write_Command(0x38); /显示模式设置

8、delay_ms(5);LCD_Write_Command(0x38); /显示模式设置delay_ms(5);LCD_Write_Command(0x38); /显示模式设置delay_ms(5);LCD_Write_Command(0x0c); /显示光标设置,开显示delay_ms(5);LCD_Write_Command(0x06); /显示光标移动(右移) delay_ms(5);LCD_Write_Command(0x01); /清屏delay_ms(5);/*函数功能:显示自定义字符入口参数:x坐标值,y坐标值,显示的字符数据出口参数:*/void LCD_Display_Bmp

9、(unsigned char x,unsigned char y,unsigned char *mytab)unsigned char i=0;LCD_Write_Command(0x40); /写CGRAMfor (i=0;i8;i+)LCD_Write_Data(mytabi); if(y=0) LCD_Position(x); else LCD_Position(x+0x40);/设置显示位置LCD_Write_Data(0);/*函数功能:显示字符串程序备注1:0=x=15备注2:0=y= 1*/void LCD_Display(unsigned char x,unsigned cha

10、r y,unsigned char *words)unsigned char i=0;if(y=0)LCD_Position(x); /设置显示位置else LCD_Position(x+0x40);while(wordsi != 0)LCD_Write_Data(wordsi); /显示字符i+;/*函数功能:显示一个ASCII码程序备注1:0=x=15备注2:0=y=700)|flag=1) /超出测量范围显示“-” flag=0; LCD_Display_Char(0, 1, ASCII11); LCD_Display_Char(1, 1, ASCII10);/显示点 LCD_Displ

11、ay_Char(2, 1, ASCII11); LCD_Display_Char(3, 1, ASCII11); LCD_Display_Char(4, 1, ASCII12);/显示M else disbuff0=S%1000/100; disbuff1=S%1000%100/10; disbuff2=S%1000%10 %10; LCD_Display_Char(0, 1, ASCIIdisbuff0); LCD_Display_Char(1, 1, ASCII10);/显示点 LCD_Display_Char(2, 1, ASCIIdisbuff1); LCD_Display_Char(

12、3, 1, ASCIIdisbuff2); LCD_Display_Char(4, 1, ASCII12);/显示M /*/ void zd0() interrupt 1 /T0中断用来计数器溢出,超过测距范围 TL0=0; TH0=0;flag=1; /中断溢出标志 /*/ void StartModule() /启动模块 TX=1; /启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_

13、(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; void main(void)unsigned int j,k;LCD_Init(); / 初始化LCDLCD_Display(0,0,51090210 Jlu);LCD_Display_Char(15,1,0x43);/0x43对应ASCII码为CLCD_Display_Bmp(14,1,tab);while(1)TMOD=0x01; /设T0为方式1,GATE=1; TH0=0; TL0=0; ET0=1; /允许T0中断 EA=1; /开启总中

14、断while(1) StartModule(); while(!RX);/当RX为零时等待 TR0=1; /开启计数 while(RX);/当RX为1计数并等待 TR0=0;/关闭计数 Conut();/计算Read_Temperature();j=temp_data0; k=temp_data1;k=k250)deng=0;else deng=1;if(S10)feng=0;else feng=1;/P27=1; / P33=0;P34=1;P35=0;P36=1;/ while(1) if(S=10) P33=1;P34=0; elseP33=0;P34=1; 三、总结我们制作这次设计一切都是从零开始,从最简单的画流程图起步。在整个过程当中,遇到很多困难,由于时间紧迫,起步时间较晚,还有其他一些财力方面的原因,本来打算实现的烟雾探测和小车的寻迹等其他功能未能实现,虽然有些遗憾,但是在整个设计过程中,我们充分发挥人的主观能动性,学会了自主学习,学到了许多课本上学不到的知识。较好的完成了设计,初步达到了预期的目的,部分实现了最初的设想。我们由此得出:对电路的设计、布局要先有一个好的构思,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论