内容发布更新时间 : 2024/11/5 11:37:39星期一 下面是文章的全部内容请认真阅读。
苏州经贸学院
参考文献
[1] AT89C51中文资料手册[EB]
[2] ISD 1700 系列数码语音电路使用手册[EB] [3] 多用途DF无线数据收发模块[EB] [4] LCD1602A中文资料手册[EB]
[5] PT2262/2272编解码集成电路介绍[EB]
[6] 孙育才.MCS-51系列单片机微型计算机及其应用[M].南京:东南大学出版
社,2004。
[7] 周波,冯顽童,胡建龙等.公交车自动报站系统的设计[J].四川理工学院学
报:自然科学版, 2008。 [8]张伟,孙颖,赵晶.Protel 99 SE高级应用[M].北京:人民邮电出版社,2007. [9]曹丙霞,赵艳华.Protel 99 SE原理图与PCB设计[M].北京:电子工业出版社,2007。
[10]朱定华,黄松,蔡苗.Protel 99 SE原理图与印制板设计[M].北京:清华大
学出版社,2007。
22
苏州经贸学院
附录
本附录主要分析设计了三个C语言程序,其中包含系统的主程序设计,液晶显示模块设计和语音模块程序设计。 附录一:主程序设计
公交车自动报站系统是利用GPS进行数据采集,实时解算车辆当时的经度、纬度等信息,获得公交车的实时坐标,将其与站台坐标相比较,公交车驶入站台一定距离范围内时,不用人工干预,系统自动进行报站、温磬提示等服务。如果公交车需要临时改变运营线路或更换一些语音广告信息,车载系统将方便、快捷地下载更新语音信息。若是在自动报站状态,则检测GPS信息,确定公交车当前的地理位置,决定是否播放语音信息,播放哪段语音信息。主程序的流程实现如下所示:
主程序代码:
#include \#include \
#define uchar unsigned char
sbit P31=P3^1; //无线信号接收端 sbit P24=P2^4; //控制快进 sbit P25=P2^5; //控制播放 sbit led=P1^0; //到站指示灯 sbit re=P3^0; //GPS发射端
sbit reset=P3^4; //语音芯片复位 char i;
uchar code dis1[]=\站点内容可更新或增加 uchar code dis2[]=%uchar code dis3[]=%uchar code dis4[]=%uchar code dis5[]=%uchar *p;
void Delay1ms(unsigned int count) //延时1ms {
unsigned int i,j; for(i=0;i void delay() { int i,j; for(i=0;i<255;i++) for(j=0;j<120;j++); } void send() //GPS发送 { 23 苏州经贸学院 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(\显示站名 GotoXY(0,1); Print(\i=0; p=dis1; //初始化界面 GotoXY(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) { case 0:{p=dis1;} break; case 1:{p=dis2;} break; 24 苏州经贸学院 case 2:{p=dis3;} break; case 3:{p=dis4;} break; case 4:{p=dis5;} break; }; GotoXY(6,1); //数据指针定位 Print(p); //显示 while(!P31) //判断P31口是否为0,如果为0则执行led=0否则led=1 { delay(); led=0; } led=1; delay(); } } void ttl(void)interrupt 1 // 定时器/计数器0(TF0) { re=~re; } // re值取反产生TTL电平 附录二:液晶显示模块程序设计 1、内部等待函数LCD_Wait(void) unsigned char LCD_Wait(void) { LcdRs=0; //读状态 LcdRw=1; _nop_(); LcdEn=1; _nop_(); while(DBPort&0x80); //判断读写状态使能标志 LcdEn=0; return DBPort; } 2、向LCD写入命令或数据子函数LCD_Write() void LCD_Write(bit style, unsigned char input) { LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();//注意顺序 LcdEn=1; _nop_();//注意顺序 给En一个高脉冲 LcdEn=0; _nop_(); LCD_Wait(); } 3、设置显示模式子函数LCD_SetDisplay() void LCD_SetDisplay(unsigned char DisplayMode) { LCD_Write(LCD_COMMAND, 0x08|DisplayMode); } 25