智能小车资料及源程序.docx
- 文档编号:11848968
- 上传时间:2023-04-06
- 格式:DOCX
- 页数:26
- 大小:270.75KB
智能小车资料及源程序.docx
《智能小车资料及源程序.docx》由会员分享,可在线阅读,更多相关《智能小车资料及源程序.docx(26页珍藏版)》请在冰豆网上搜索。
智能小车资料及源程序
智能小车主要部件及模块和源程序
一、直流电机驱动模块
所需元件及程序
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 #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++; } } /*-------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 资料 源程序