智能小车资料及源程序.docx

上传人:b****2 文档编号:2685282 上传时间:2023-05-04 格式:DOCX 页数:26 大小:270.75KB
下载 相关 举报
智能小车资料及源程序.docx_第1页
第1页 / 共26页
智能小车资料及源程序.docx_第2页
第2页 / 共26页
智能小车资料及源程序.docx_第3页
第3页 / 共26页
智能小车资料及源程序.docx_第4页
第4页 / 共26页
智能小车资料及源程序.docx_第5页
第5页 / 共26页
智能小车资料及源程序.docx_第6页
第6页 / 共26页
智能小车资料及源程序.docx_第7页
第7页 / 共26页
智能小车资料及源程序.docx_第8页
第8页 / 共26页
智能小车资料及源程序.docx_第9页
第9页 / 共26页
智能小车资料及源程序.docx_第10页
第10页 / 共26页
智能小车资料及源程序.docx_第11页
第11页 / 共26页
智能小车资料及源程序.docx_第12页
第12页 / 共26页
智能小车资料及源程序.docx_第13页
第13页 / 共26页
智能小车资料及源程序.docx_第14页
第14页 / 共26页
智能小车资料及源程序.docx_第15页
第15页 / 共26页
智能小车资料及源程序.docx_第16页
第16页 / 共26页
智能小车资料及源程序.docx_第17页
第17页 / 共26页
智能小车资料及源程序.docx_第18页
第18页 / 共26页
智能小车资料及源程序.docx_第19页
第19页 / 共26页
智能小车资料及源程序.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

智能小车资料及源程序.docx

《智能小车资料及源程序.docx》由会员分享,可在线阅读,更多相关《智能小车资料及源程序.docx(26页珍藏版)》请在冰点文库上搜索。

智能小车资料及源程序.docx

智能小车资料及源程序

智能小车主要部件及模块和源程序

一、直流电机驱动模块

所需元件及程序

1、L298N、二极管、直流电机、PWM方波程序

二、电源模块

可充电电池、稳压芯片、大功率接线器、排针、稳压二极管

三、寻迹模块

红外探测模块、AD转换芯片、单片机

四、小车测速模块

编码盘、红外对接模块

五、超声波测距模块

超声波测距模块

六、信息显示模块

Lcd显示模块--诺基亚5110

红外避障传感器

一、实验原理:

红外避障传感器基本原理,和循迹传感器工作原理基本相同,利用物体的反射性质。

在一定范围内,如果没有障碍物,发射出去的红外线,因为传播距离越远而逐渐减弱,最后消失。

如果有障碍物,红外线遇到障碍物,被反射到达传感器接收头。

传感器检测到这一信号,就可以确认正前方有障碍物,并送给单片机,单片机进行一系列的处理分析,协调小车两轮工作,完成一个漂亮的躲避障碍物动作,传感器原理图如图6。

图6红外避障传感器原理图

二、实验接线:

实验时只需把信号输出端(signal)与单片机的P1^0口相连。

VCC端接5V电源,GND接电源负极或单片机上的逻辑地。

注意:

如果对红外避障传感器的使能感兴趣,可以把传感器的TC端接单片机的I/O口,通过控制TC实现是否开启红外避障传感器,当TC为高电平时传感器工作,为低电平时,传感器关闭,参照图7。

三、实验任务:

1、把红外避障传感器固定在小车的正前方,接好线。

注意:

红外传感器的避障距离也是可调,调节滑动变阻器可以调节避障距离。

2、编制程序,实现小车检测到前方有障碍物时,向左转弯,再检测,没有障碍物,继续前进,有障碍物,继续左转弯。

诺基亚5110液晶显示屏模块

该模块具有以下特点:

●84x48的点阵LCD,可以显示4行汉字,

●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9条。

支持多种串行通信协议(如AVR单片机的SPI、MCS51的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。

●LCD控制器/驱动器芯片已绑定到LCD晶片上,模块的体积很小。

●采用低电压供电,正常显示时的工作电流在200μA以下,且具有掉电模式。

LPH7366的这些特点非常适合于电池供电的便携式通信设备和测试设备中

 

 

Nokia5110驱动

Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。

使用Nokia5110液晶的四大理由

1)    性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。

Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD12864一般50~70元。

2)    接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。

3)    速度快,是LCD12864的20倍,是LCD1602的40倍。

4)    Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。

Nokia5110原理图:

 

商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。

Nokia5110和Nokia3110是兼容的,用的都是同一款驱动芯片PHILIPSPCD8544。

(1)  SPI接口时序写数据/命令

Nokia5110(PCD8544)的通信协议是一个没有MISO只有MOSI的SPI协议,如果单片机有富裕的SPI接口,也可以利用硬件SPI,但通常没有必要,只需要软件程序模拟即可。

 

智能避障小车原理图

一下是小车各个模块原理图逐一展示

1.12v及5v直流稳压电源

2.L298电机驱动模块

3.51单片机控制模块

4.。

声光信号产生模块

以下是

二、电机驱动模块,超声波测距避障,声光信号产生,PWM调速源程序

/*

用T0计时器中断进行对小车方向的调节

用INT0外部中断进行声光报警

用INT1外部中断进行超声避障

用T1计时器进行对时间的测量

*/

#include

#include

sbitP00=P1^0;//循迹口

sbitP01=P1^1;

sbitP02=P1^2;

sbitP03=P0^3;//声光信号P03接蜂鸣器,P04接LED

sbitP04=P0^4;

sbitP20=P2^0;//电机1左轮

sbitP21=P2^1;

sbitP22=P2^2;//电机2

sbitP23=P2^3;

voidzhuanxiang(char,char,char);

voiddelay1ms(void);

voiddelaynms(int);

unsignedinti=0,j=0;//特殊情况旗标

voidkongzhi(void)interrupt1//PWM信号进行电机控制

{

if(P00==0&&P01==1&&P02==0)//小车直线快走定时0.02ms

{

TH0=0X1F;

TL0=0XEC;

P20=0;//电机1左轮

P21=1;

P22=1;//电机2右转

P23=0;

}

if(P00==0&&P01==0&&P02==1)//小车右转定时0.05ms

{

TH0=0X1F;

TL0=0XCE;

P20=1;//电机1左轮

P21=1;

P22=1;//电机2

P23=0;

i=1;

}

if(P00==0&&P01==0&&P02==0&&i==1)//特别

{

TH0=0X1F;

TL0=0XCE;

P20=1;

P21=1;

P22=1;

P23=0;

j=0;

}

if(P00==1&&P01==0&&P02==0)//小车左转定时0.05ms

{

TH0=0X1F;

TL0=0XCE;

P20=0;//电机1

P21=1;

P22=1;//电机2

P23=1;

j=1;

}

if(P00==0&&P01==0&&P02==0&&j==1)//特别

{

TH0=0X1F;

TL0=0XCE;

P20=0;

P21=1;

P22=1;

P23=1;

i=0;

}

if(P00==1&&P01==1&&P02==1)

{//全部检测到黑线时车停

TH0=0X1F;

TL0=0XCE;

P20=1;

P21=1;

P22=1;

P23=1;

}

}

voidshengguang(void)interrupt0//停车并产生声光2s

{

unsignedinti,j;

P20=1;

P21=1;

P22=1;

P23=1;

delaynms(500);

for(i=0;i<20;i++)

{

P04=0;

for(j=0;j<100;j++)

{

P03=0;

delay1ms();

P03=~P03;

}

}

P03=1;//关闭声光

P04=1;

delaynms(500);

P20=0;//继续行车

P21=1;

P22=1;

P23=0;

}

voidchaoshengbo(void)interrupt2//超声波测距避障程序

{

}

voidmain()

{

while

(1)

{

P20=1;P21=1;P22=1;P23=1;//小车停

P03=1;P04=1;

PX0=1;

TMOD=0X10;//T0用方式0,T1用方式1

EA=1;//开启中断总开关

EX0=1;//T0中断

EX1=1;//T1中断

ET0=1;//INT0中断

ET1=1;//INT1中断

TR1=1;//开启T1计时器

zhuanxiang(P00,P01,P02);

}

}

voidzhuanxiang(charP00,charP01,charP02)

{

if(P00==0&&P01==1&&P02==0)//小车直走

{//0.01ms

TH0=0X1F;

TL0=0XF6;;

TR0=1;

}

if(P00==0&&P01==0&&P02==1)//小车右转定时0.05ms

{

TH0=0X1F;

TL0=0XCE;

TR0=1;

}

if(P00==1&&P01==0&&P02==0)//小车左转定时0.05ms

{

TH0=0X1F;

TL0=0XCE;

TR0=1;

}

if(P00==1&&P01==1&&P02==1)//全部检测到黑线时车停

{

TH0=0X1F;

TL0=0XCE;

TR0=1;

}

}

voiddelay1ms(void)

{

inti;

for(i=0;i<120;i++);

}

voiddelaynms(intn)

{

inti,j;

for(i=0;i

for(j=0;j<120;j++);

}

三、诺基亚5110液晶显示时间路程源程序

/*

Nokia5110LCDtest

芯片型号:

AT89S52

by:

ysit1990@

data:

2012.06.20

描述:

基于网上参考例子修改测试于杭州电子科技大学集训期间

*/

/***********************************************************************

pindescriptioni/o

;VCC(3.3V)+3.3v供电电源

;CLK:

LCD_CLKP2.0时钟

;DA:

SDINP2.1数据输入

;D/C:

LCD_DCP2.21写数据0写命令

;SCE:

LCD_SCEP2.3片选信号

;RSET:

LCD_RESTP2.4复位信号

;GND--接地

;LED+5v背光

***********************************************************************/

#include

#include//包含_nop_();一机器周期延时空指令

#defineucharunsignedchar

#defineuintunsignedint

sbitLCD_CLK=P1^5;//时钟

sbitSDIN=P1^4;//数据

sbitLCD_DC=P1^3;//1写数据,0写指令

sbitLCD_SCE=P1^2;//片选

sbitLCD_REST=P1^1;//复位,0复位

/*function

************************/

///////////SPI写操作

voidLCD_write_byte(unsignedchardat,unsignedcharcommand);

///////////5110初始化

voidLCD_init(void);

///////////清屏

voidLCD_clear(void);

//////////显示一个字符

voidLCD_write_char(unsignedcharc);

//////////显示字符串

voidLCD_write_String(unsignedcharX,unsignedcharY,unsignedchar*s);

//////////显示一个汉字

voidLCD_WRITE_ZH(unsignedcharX,unsignedcharY,unsignedcharZH[][32],unsignedcharindex);

///////////显示汉字串

voidLCD_WRITE_ZH_STRING(ucharX,ucharY,//起始坐标

ucharZHS[][32],//汉字字符串

ucharwidth,//每个字符边长

ucharindex,//起始索引号

ucharnum,//显示个数

ucharspace);//间距

/////////////////////////画图

voidLCD_draw_bmp_pixel(ucharX,ucharY,uchar*map,ucharwidth,ucharheight);

//ASCII码的字库

ucharcodeASCII_6_8[][6]=

{

{0x00,0x3e,0x51,0x49,0x45,0x3e}//0

{0x00,0x00,0x42,0x7f,0x40,0x00}//1

{0x00,0x42,0x61,0x51,0x49,0x46}//2

{0x00,0x21,0x41,0x45,0x4b,0x31}//3

{0x00,0x18,0x14,0x12,0x7f,0x10}//4

{0x00,0x27,0x45,0x45,0x45,0x39}//5

{0x00,0x3c,0x4a,0x49,0x49,0x30}//6

{0x00,0x01,0x71,0x09,0x05,0x03}//7

{0x00,0x36,0x49,0x49,0x49,0x36}//8

{0x00,0x06,0x49,0x49,0x29,0x1e}//9

{0x00,0x00,0x36,0x36,0x00,0x00}//:

{0x00,0x38,0x44,0x44,0x44,0x20}//c

{0x00,0x7c,0x04,0x18,0x04,0x78}//m

{0x00,0x48,0x54,0x54,0x54,0x20}//s

};

/*///////////////////////////////////////////////////////////汉字字模参考*/

staticconstcharHanzi[][24]={

/*--文字:

支--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=16x16*/

{0xFE,0x22,0x22,0xFE,0x00,0x08,0x48,0x88,0x08,0xFF,0x08,0x00,

0x07,0x02,0x02,0x07,0x00,0x00,0x00,0x09,0x08,0x0F,0x00,0x00},//时0

{0x00,0xF9,0x02,0xF8,0x49,0x49,0x49,0x49,0xF9,0x01,0xFF,0x00,

0x00,0x0F,0x00,0x03,0x02,0x02,0x02,0x02,0x0B,0x08,0x0F,0x00},//间1

{0x9E,0x12,0xF2,0x9E,0x48,0xC4,0xAB,0x92,0xAA,0xC6,0x40,0x00,

0x0F,0x08,0x07,0x04,0x00,0x0F,0x04,0x04,0x04,0x0F,0x00,0x00},//路0

{0x12,0xD2,0xFE,0x51,0x80,0x2F,0x29,0xE9,0x29,0x2F,0x00,0x00,

0x01,0x00,0x0F,0x00,0x08,0x09,0x09,0x0F,0x09,0x09,0x08,0x00},//程1

};

/*--文字:

持--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=16x16--

/***********************************************************

函数名称:

LCD_write_byte

函数功能:

模拟SPI接口时序写数据/命令LCD

入口参数:

data:

写入的数据;

command:

写数据/命令选择;

出口参数:

备注:

***********************************************************/

voidLCD_write_byte(unsignedchardat,unsignedcharcommand)

{

unsignedchari;

LCD_SCE=0;//5110片选有效,允许输入数据

if(command==0)//写命令

LCD_DC=0;

elseLCD_DC=1;//写数据

for(i=0;i<8;i++)//传送8bit数据

{

if(dat&0x80)

SDIN=1;

else

SDIN=0;

dat=dat<<1;

LCD_CLK=0;

LCD_CLK=1;//时钟上升沿写

}

LCD_SCE=1;//禁止5110

}

/***********************************************************

函数名称:

LCD_init

函数功能:

5110初始化

入口参数:

出口参数:

备注:

***********************************************************/

voidLCD_init(void)

{

LCD_SCE=0;//片选LCD

LCD_REST=0;//产生一个让LCD复位的低电平脉冲

_nop_();

LCD_REST=1;

LCD_write_byte(0x21,0);//LCD模式设置:

芯片活动,水平寻址,使用扩展指令

LCD_write_byte(0xc8,0);//设置液晶偏置电压

LCD_write_byte(0x06,0);//温度校正

LCD_write_byte(0x13,0);//1:

48

LCD_write_byte(0x20,0);//使用基本命令,V=0,水平寻址

LCD_clear();//清屏

LCD_write_byte(0x0c,0);//设定显示模式,正常显示

LCD_SCE=1;//禁止LCD

}

/***********************************************************

函数名称:

LCD_set_XY

函数功能:

设置LCD坐标函数

入口参数:

X:

0-83横坐标

Y:

0-5纵坐标

出口参数:

备注:

***********************************************************/

voidLCD_set_XY(unsignedcharX,unsignedcharY)

{

LCD_write_byte(0x80|X,0);//X行(横坐标)

LCD_write_byte(0x40|Y,0);//column列(纵坐标)

}

/*------------------------------------------

LCD_clear:

LCD清屏函数

--------------------------------------------*/

voidLCD_clear(void)

{

unsignedchart;

unsignedchark;

LCD_set_XY(0,0);

for(t=0;t<6;t++)

{

for(k=0;k<84;k++)

{

LCD_write_byte(0x00,1);

}

}

}

/***********************************************************

函数名称:

LCD_write_char

函数功能:

显示英文字符

入口参数:

c:

显示的字符

出口参数:

备注:

***********************************************************/

voidLCD_write_char(unsignedcharc)

{

unsignedchari;

c-=0x20;//ASCII码减去0x20

for(i=0;i<6;i++)

LCD_write_byte(ASCII_6_8[c][i],1);

}

/*-------------------------------------------

;名称:

英文字符串显示函数

;参数:

*s:

英文字符串指针

---------------------------------------------*/

voidLCD_write_String(unsignedcharX,unsignedcharY,unsignedchar*s)

{

LCD_set_XY(X,Y);

while(*s)//等效*s!

='\0'

{

LCD_write_char(*s);

s++;

}

}

/*-------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2