您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 基于单片机的智能公交报站系统
1基于单片机的智能公交报站系统本系统要实现根据公交车通过不同路段,然后经过GPS系统定位报出站名的功能。系统主要有两大部分,主控制程序单片机和语音芯片部分。每个部分都有不同的方案可供选择。1.系统整体框架结构图本设计的整体思路是:通过按键电路和GPS定位系统输入地段信息,直接输出数字信号给单片机AT89C51进行处理,在LCD液晶频上显示当前站名信息。同时通过语音芯片输出放大后的语音信息。其结构框图如图所示:图1:整体框架结构图2.单片机和语音芯片的选择基于AT89C51单片机设计语音芯片ISD1700S3.系统的硬件设计系统硬件电路主要包括按键电路,JHD162A液晶显示电路,ISD1700S音频输出电路和GPS模块接口电路。每块电路通过与单片机的连接组合,实现其各自的功能。(1)单片机的最小系统AT89C51单片机的时钟电路可以由三种方式构成,即内部时钟方式、有源晶振方式和外部时钟信号方式。本自动报站系统为内部时钟方式,即采用外接晶振和电容组成的并联谐振电路,AT89C51可以工作在20MHz频率下。电路如图3-1所示复位电路主要完成系统的上电自动复位和系统在运行时用户的手动按键复位功能。在本系统中采用较简单的RC复位电路,单片机在上电瞬间,RST引脚端出现正脉冲,实现自动复位。经实践使用证明,其复位逻辑稳定、可靠。电路图如图3-1所示。GPS模块音频输出音频放大AT89C51扬声器LCD按键电路2(2)JHD162A液晶显示电路为了能方便直观的了解到当前地段的站名和信息,显示的内容主要为16字符x2行,字符点阵为5x8点,采用的驱动方式为1/16D。基本操作时序为读状态:RS=L,RW=H,E=H;写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲;读数据:RS=H,E=H;写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲,数码管的4,5,6分别与单片机的P2.0—P2.2相连;7~14分别与P0.0~P0.7相连,通过单片机的信息处理,从而在液晶显示频上显示各段信息。设计电路图如图3-2所示。3(3)ISD1700S音频输出电路及按键电路ISD1700S通过按键系统和GPS模块的信息输入,在按键模式工作时,芯片可以通过/LED管脚给出信号来提示芯片的工作状态,并且伴随有提示音,ISD1700S芯片具有语音录放功能,通过不同的数字信息输入,系统将会把先前收录好的语音通过音频放大器进行处理,最后经过扬声器喇叭播报出来。本系统兼有按键操作功能:按下REC键,/REC管脚电平变低后开始录音,直到松开按键使电平拉高或者芯片录满时结束。(1)录音结束后,录音指针自动移向下一个有效地址,而放音指针则指向刚刚录完的那段语音地址。(2)放音操作:放音操作有两种模式,分别是边沿触发和电平触发,都由/PLAY管脚触发。(3)快进操作:点按一下FWD按钮将/FWD端拉低,会启动快进操作。快进操作用来将播放指针移向下一段语音信息。设计电路图如图3-3所示。4(4)GPS模块接口电路由于电源电压要求为+5.0V±5%(即+4.75V~+5.25V),因此模块引脚1、引脚2,引脚3均接系统的+5V电源。由于该模块无需初始化,上电后模块即可自动接收和发送定位数据,故不需要对其进行控制操作,即系统不必向GPS模块发出控制指令。另外,GPS模块工作电源是+5V,而AT89C51单片机的I/O电压为+3.3V,所以在GPS模块与AT89C51单片机之间串接27K的保护电阻。具体硬件接口电路如图3-4所示:5(5)系统整体电路图系统主要通过单片机AT89C51处理:GPS模块接口电路,按键电路,ISD1700S音频输出电路以及JHD162A液晶显示电路。单片机主芯片通过对按键电路和GPS模块的信息处理,将信息发送到音频输出电路和LCD液晶显示电路,从而可以明确的获知该地段的站名和准确播报信息。系统总体硬件设计电路如图3-5所示。64.程序设计(1)主程序流程图主程序主要涉及各个部分子程序的调用。程序初始化后,系统出现开机界面,液晶显示频显示下一站站名。本程序主要兼有两种控制方式:按键控制和GPS接收控制。程序接收到信息后语音将自动播报到站信息,液晶显示频显示下一站,下车的指示灯亮。选择NO,则是继续行车报站,选择YES,则停止行车,终止系统。主程序流程图4-1所示。7(2)语音模块子程序ISD1700S语音模块子程序主要是接收主芯片发送过来的音频信号,然后由P25端输出一个负脉冲信号,语音芯片内部指针指向本站点的语音段头,再由P26端输出一个负脉冲信号,经过音频放大,通过扬声器播放当前指针指向的语音段。流程图如图4-2所示开机界面液晶显示下一站是否选择GPS模式?GPS接口电路按键扫描语音播报当前到站信息液晶更新显示下一站下车指示灯亮接收GPS?按键按下?是否停止行车?NNYYYNYN结束8(3)JHD162A液晶显示子程序JHD162A液晶显示子程序主要通过接收主程序发出的信号,将其设置输入为模式子函数形式,并初始化LCD子函数,显示定位子函数,显示字符子函数,站点信息设置及调用,最后显示站名信息。流程图如图4-3所示。开机界面P25输出一个负脉冲,语音芯片内部指针指向本站点语音段头P26输出一个负脉冲,播放当前指针指向的语音段结束收到信号开始是否接收信号?是否播报语音信息?NYY9(4)主程序设计公交车自动报站系统是利用GPS进行数据采集,实时解算车辆当时的经度、纬度等信息,获得公交车的实时坐标,将其与站台坐标相比较,公交车驶入站台一定距离范围内时,不用人工干预,系统自动进行报站、温磬提示等服务。如果公交车需要临时改变运营线路或更换一些语音广告信息,车载系统将方便、快捷地下载更新语音信息。若是在自动报站状态,则检测GPS信息,确定公交车当前的地理位置,决定是否播放语音信息,播放哪段语音信息。主程序的流程实现如下所示:主程序代码:#includeREGX52.H#includeLCD1602.h开机界面显示站名信息接收信号设置输入模式子函数LCD_SetInput()初始化LCD子函数LCD_Initial()显示定位子函数GotoXY()站点信息设置及调用结束显示字符子函数开始是否初始化LCD?YN10#defineucharunsignedcharsbitP31=P3^1;//无线信号接收端sbitP24=P2^4;//控制快进sbitP25=P2^5;//控制播放sbitled=P1^0;//到站指示灯sbitre=P3^0;//GPS发射端sbitreset=P3^4;//语音芯片复位chari;ucharcodedis1[]=ZhaoHuZ;//站点内容可更新或增加ucharcodedis2[]=JuYuanZ;ucharcodedis3[]=JinShan;ucharcodedis4[]=ShangDu;ucharcodedis5[]=ShiDa;uchar*p;voidDelay1ms(unsignedintcount)//延时1ms{unsignedinti,j;for(i=0;icount;i++)for(j=0;j120;j++);}voiddelay(){inti,j;for(i=0;i255;i++)for(j=0;j120;j++);}voidsend()//GPS发送{re=0;TMOD=0x02;//计数器工作模式:方式2自动再装入的8位计数器EA=1;//允许全部中断TH0=0xf3;//高8位计数器作为初值寄存器TL0=0xf3;//低8位计数器初值ET0=1;//允许计数器0的中断响应}main(){LCD_Initial();//lcd初始化GotoXY(7,0);//显示定位Print(43);//显示站名GotoXY(0,1);Print(Next:);i=0;p=dis1;//初始化界面11GotoXY(6,1);//初始定位Print(p);//初始显示delay();reset=0;//语音芯片复位delay();delay();delay();reset=1;P31=1;send();//GPS发射TR0=1;//启动计数器while(1){Delay1ms(300);while(P31);//判断P31口是否为1,如果是则循环直到是0后往下执行delay();P24=0;//从P24口输出一个负脉冲使FWD有效,指针指向下一段delay();P24=1;delay();P25=0;//PLAY有效,播放当前段delay();P25=1;if(i==5){i=0;}else{i++;}switch(i){case0:{p=dis1;}break;case1:{p=dis2;}break;case2:{p=dis3;}break;case3:{p=dis4;}break;case4:{p=dis5;}break;};GotoXY(6,1);//数据指针定位Print(p);//显示while(!P31)//判断P31口是否为0,如果为0则执行led=0否则led=1{delay();led=0;}led=1;delay();}}voidttl(void)interrupt1//定时器/计数器0(TF0)12{re=~re;}//re值取反产生TTL电平(5)液晶显示模块程序设计1、内部等待函数LCD_Wait(void)unsignedcharLCD_Wait(void){LcdRs=0;//读状态LcdRw=1;_nop_();LcdEn=1;_nop_();while(DBPort&0x80);//判断读写状态使能标志LcdEn=0;returnDBPort;}2、向LCD写入命令或数据子函数LCD_Write()voidLCD_Write(bitstyle,unsignedcharinput){LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意顺序LcdEn=1;_nop_();//注意顺序给En一个高脉冲LcdEn=0;_nop_();LCD_Wait();}3、设置显示模式子函数LCD_SetDisplay()voidLCD_SetDisplay(unsignedcharDisplayMode){LCD_Write(LCD_COMMAND,0x08|DisplayMode);}4、设置输入模式子函数LCD_SetInput()voidLCD_SetInput(unsignedcharInputMode){LCD_Write(LCD_COMMAND,0x04|InputMode);}5、初始化LCD子函数LCD_Initial()voidLCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38);//8位数据端口,16×2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}136、显示定位子函数GotoXY()voidGotoXY(unsignedcharx,unsignedchary){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);//第一行设置数据指针地址if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}7、显示字符子函数Print()voidPrint(unsignedchar*str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;delay1();}}站点信息设置及调用用数组定义站点信息字符串:ucharcodedis1
本文标题:基于单片机的智能公交报站系统
链接地址:https://www.777doc.com/doc-5004281 .html