基于pic单片机的出租车计费系统.docx
- 文档编号:8492418
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:23
- 大小:603.08KB
基于pic单片机的出租车计费系统.docx
《基于pic单片机的出租车计费系统.docx》由会员分享,可在线阅读,更多相关《基于pic单片机的出租车计费系统.docx(23页珍藏版)》请在冰豆网上搜索。
基于pic单片机的出租车计费系统
摘要
随着经济的发展,带动汽车行业快速发展,出租车日益普遍,了解在出租车上应用的计费系统,对我们日常生活也有帮助。
而使用单片机实现该系统,是深化单片机应用的良好途径。
本系统由单片机PIC16F877A和一些外围原件组成,具有操作简单,显示明了,功能强大的特点。
整个系统只有两个按键,一个“启动/停止”,一个“复位”;
使用TG12864E液晶模组作为显示器,可以显示数字、字母、中文、图片等,使系统信息一目了然;
本系统除了里程统计和费用计算以外,还具有万年历和语音播报功能。
万年历由时钟芯片PCF8563实时提供时钟信号,再由单片机调用显示;
语音播报由语音芯片ISD1420提供语音信息,语音信息放在不同的地址里,由单片机从这些地址中调用合适的语音进行播放。
本方案充分发挥人性化的特点,利用ISD1420的语音功能,配合TG12864液晶模组,模拟实现带语音提示的出租车计价系统。
比较真实地模拟出租车的空车、载客、到站及对各状况的费率的计算、统计、显示和语音播报等功能。
本系统涉及到的理论知识有:
PIC单片机知识、LCD液晶显示器的工作原理和使用方法、可擦、写的语音芯片的工作原理及应用、实时时钟芯片的工作原理及应用、出租车计费系统的原理和实现方法、PROTEUS仿真原理及实际应用。
本系统提高同学们用C语言编写程序的能力、单片机应用系统设计综合能力的训练、培养同学们分析问题和解决问题的能力、对同学们的招聘以及参加工作均有帮助。
该系统稍加改进,可以成为一套真正的实用的计费系统。
关键词:
时钟芯片PCF8563语音芯片ISD1420TG12864液晶模组LCD液晶显示器
目录
摘要……………………………………………………………………1
第一章系统总体介绍………………………………………………2
1.系统组成及功能框图………………………………………………3
2.里程计量及费用计算功能…………………………………………3
3.语音播放功能………………………………………………………4
4.中文菜单显示功能…………………………………………………4
5.实时时钟功能………………………………………………………5
6.按键功能……………………………………………………………5
7.系统电路设计原理图………………………………………………6
第二章硬件设计………………………………………………………7
1.主程序/CPU模块……………………………………………………7
2.语音播放模块………………………………………………………8
3.液晶显示驱动模块…………………………………………………9
4.脉冲发生器模块……………………………………………………11
5.时钟模块……………………………………………………………12
6.按键扫描模块………………………………………………………14
第三章系统程序设计…………………………………………………12
1.系统主程序流程框图………………………………………………15
2.里程和费率计算程序流程图……………………………………………18
3.键盘处理程序流程图…………………………………………………………19
结束语……………………………………………………………………19
致谢………………………………………………………………………21
参考文献…………………………………………………………………21
附件………………………………………………………………………21
第一章系统总体介绍
1.系统组成
此出租车计费系统以单片机为系统核心,利用PIC16F877单片机配合TG12864液晶模组及ISD1420语音模块等,实现基本的出租车计价器功能。
本系统是由PIC单片机、液晶显示模块、计数脉冲发生器、系统实时时钟及语音等模块组成。
系统框图如图
(1)所示:
2.系统各部分功能:
⑴.里程计量功能
a)单片机对传感器输出脉冲进行计数,并将脉冲数换算成公里数;
b)每一个脉冲代表轮胎旋转一周,设轮胎的直径为520mm,轮胎的周长为:
(即每转一圈的距离)
520x3.14159=1634mm=1.634m
c)每公里的脉冲数:
PulsePerKM=1000m/1.634m=612(个脉冲)
⑵.费用计算功能(参照广州市出租车收费标准)
费用计算包括三部分:
起步费、行使费和燃油附加费:
a)起步费用(StartPrice)—
当行驶里程(RunMilege)在2.3Km(含2.3Km)以内按起步价(StartPrice)7元计费。
即行使费用(RunPrice)为:
RunPrice=StartPrice+1=8(元)
b)行使费用(RunPrice)--
行使费用分短途与长途两种情况:
①.当行驶里程(RunMilege)超出2.3Km时并且小于35Km时,按2.6元/Km收费,这时行驶费用为:
RunPrice=StartPrice+2.6×(RunMilege-StartMilege)+1
其中:
StartPrice为起步价=7元
StartMilege为起步里程=2.3Km
RunMilege为行使里程(总行使里程)
RunPrice为行使费用(总行使金额)
②.当行使里程超过35Km后,要加空驶费,即每公里升至3.50元,这时行驶费用为:
RunPrice=StartPrice+3.5×(RunMilege-StartMilege)+1
c)燃油附加费--每车次加收一元。
⑶.语音播放功能
①.当初次按下“start/stop”键,出租车开始启动,系统播放“您好!
欢迎乘坐本公司出租汽车,谢谢!
”播送完毕,计费器开始计费。
②.按下“SpeedUp”键,出租车加速行使,最高速为100Km。
③.按下“SpeedDown”键,出租车减速行使,最低速为0Km。
④.在行使状态下,按下“start/stop”键,表示出租车到站,结束行使。
这时候,系统播放“您好!
行使里程XXX公里,应付XXX元,请检查您的随身物品,欢迎再次乘坐,再见!
”的提示音。
⑤.按下“Reset”键,进入空车状态。
⑷.中文菜单显示功能
①.在空车状态下(启动前),LCD屏幕上显示如下的中文信息:
②.在空车状态下,按下“start/stop”键,系统播放“您好!
欢迎乘坐本公司出租汽车,谢谢!
”的提示音,同时在LCD屏幕上显示如下的中文信息:
③.播完提示音后,进入行使状态,LCD屏幕显示以下信息:
④.在行使状态,按下“SpeedUp”键,里程显示的公里数增加的速度会不断的变快,金额数值也在作相应的变化。
按下“SpeedDown”键,里程显示的公里数增加的速度会不断的变慢。
⑤.在行使状态,按下“start/stop”键,表示出租车到站,结束行程。
这时屏幕显示以下信息:
同时,系统播放“您好!
行使里程xxx.xx公里,应付xxx.xx元,请检查您的随身物品,欢迎再次乘坐,再见!
”的提示音。
⑸.实时时钟功能
本系统采用两种方法实现日历时钟:
(1)用实时时钟芯片-FC8563作为时钟电路,产生年/月/日/时/分/秒等信号,供系统调用。
(2)用单片机中断的方法产生年/月/日/时/分/秒等信号。
(3)两种方法由同学自行选择。
⑹.本系统设置4个按键,各个按键的功能如下:
(1)“start/stop”键—开始进入行使/结束行使(到站)。
(2)“SpeedUp”键—行使加速按键。
按下次按键,可使出租车的速度由0Km上升到100Km。
(3)“SpeedDown”键--行使减速按键。
按下次按键,可使出租车的速度由100K下降到0Km。
(4)“Reset”键--进入空车状态。
⑺电路设计原理图
第二章硬件设计:
⒈主程序/CPU模块
⑴主程序/CPU电路图及说明
该模块主要包括系统初始化、PWM计数脉冲的产生、里程的识别和费率的计算及各功能模块的的组织和管理等。
主程序模块在系统中起着重要的作用。
PIC16F877主要性能:
·具有高性能RISCCPU。
·具有25条单字指令。
·除程序分支指令为两个周期外,其余均为单周期指令。
·运行速度:
DC-20MHZ时钟输入
DC-200ns指令周期
·8K*14个FLASH程序存储器
368*8个数据存储器(RAM)字节
256*8EEPROM数据存储器字节
·引脚输出和PIC16C73B/74B/76/77兼容
·中断能力(达到14个中断源)
·8级深度的硬件堆栈
·直接,间接和相对寻址方式
·上电复位(POR)
·上电定时器(PWRT)和振荡启动定时器(OST)
·监视定时器(WDT),它带有片内可靠运行的RC振荡器
·可编程的全码保护
·低功耗睡眠方式
·可选择的振荡器
·低功耗、高速CMOSFLASH/EEPROM工艺
·全静态设计
·要线串行编程(ICSP)
·单独5V的内部电路串行编程(ICSP)能力,处理机读/写访问程序存储器
·运行电压范围2.0V到5.5V
·高吸入/拉出电流25mA
·商用,工业用温度范围
·低功耗:
在5V,4MHz时典型值小于2mA
在3V,32KHz时典型值小于20uA
典型的稳态电流值小于1uA
外围特征:
·Timer0:
带有预分频器的8位定时/计数器
·Timer1:
带有预分频的16位定时器/计数器,在使用外部晶体振荡时钟时,在Sleep期间仍能工作。
·Timer2:
带有8位分频寄存器,预分频器和后分频器的8位定时器/计数器
·2个捕捉器,比较器,PWM模块
其中:
捕捉器是16位,最大分辩率为12.5ns
比较器是16位,最大分辩率方200ns
PWM最大分辩率为是10位
·10位多通道模/数转换器
·带有SPI(主模式)和I2C(主/从)模式的SSP
·带有9位地址探测的通用同步异步接收/发送器(USART/SCI)
·带有RD,WR和CS控制(只40/44引脚)8位字宽的并行从端口
·带有降压复位的降压检测电路
⑵语音播放模块
①语音播放模块电路图及说明:
语音播放模块播放提示音,行驶里程、费用等。
ISD1420系列单片录放时间8至20秒,音质好。
芯片采用CMOS技术,内含震荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及EEPROM阵列。
最小的录放系统仅需麦克风、喇叭、两个按钮、电源及少数电阻电容。
在录放操作结束后,芯片自动进入低功耗节电模式、功耗仅0.5uA。
ISD1420系列有唯一的录音控制和边缘/电平触发两种放音控制。
不分段时外围线路最简,也可按最小段长为单位任意组合分段,芯片提供若干操作模式,大大提高了控制的灵活性。
芯片采用多电平直接模拟量存储专利技术,每个采样直接存储在片内单个EEPROM单元中,因此能够非常真实、自然地再现语音、音乐、音调各效果,避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。
采样频率从5.3,6.4到8.0KHz,对音质仅有轻微影响。
片内信息可保存100年(无需后备电源),EEPROM单片可反复录音十万次。
⑶液晶显示驱动模块
①.液晶显示驱动模块电路图及说明:
TG12864E是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶
显示器组成。
可完成图形显示,也可以8×4个(16×16点阵)汉字。
主要技术参数和性能:
·电源:
VDD:
+2.7~+5V;模块内自带-10V负压,用于LCD的驱动电压。
·显示内容:
128(列)×64(行)点
·全屏幕点阵
·七种指令
·与CPU接口采用8位数据总线并行输入输出和8条控制线
·占空比1/64
·工作温度:
-10℃~+60℃,储存温度:
-20℃~+70℃,可选择宽温:
-20℃~+70℃
②.外形尺寸图:
③.模块主要硬件构成说明:
④.模块的外部接口:
⑤.TG12864EL串口接线方式:
⑷脉冲发生器模块
①脉冲性生器模块电路图及说明:
(如下图)
②NE555定时器具有定时精度高、工作速度快、可靠性好、电源电压范围宽(3-18V)、输出电流大(可高达200mA)等优点,可组成各种波形的脉冲振荡电路、定时延时电路、是一种电路结构简单、使用方便灵活、用途广泛的多功能中规模集成电路。
只需在外部配接适当的阻容元件,便可组成施密特触发器、单稳态触发器和多谐振荡器等多种应用电路,在这个电路中是多谐振荡器,它电路简单、性能稳定,波形标准。
该模块完成传感器脉冲计量,然后转换为公里数,并根据规则计算对应的费用。
同时,监测行驶速度,统计低速时间,计算低速等待费用,提供液晶显示更新函数,以便主函数可以控制更新用户界面以及行驶里程、费用等信息的显示。
该模块包括PWM管理程序、里程计量程序、时间管理程序、费用管理程序、用户界面控制程序等部分。
⑸时钟模块
①时钟模块电路图及说明:
②PCF8563是低功耗的CMOS实时时钟/日历芯片,它提供一个可编程时钟输出,一个
中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递。
最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动产生增量。
③特性:
*低工作电流:
典型值为0.25μA(VDD=3.0V,Tamb=25℃时)。
*世纪标志
*大工作电压范围:
1.0~5.5
*低休眠电流;典型值为0.25μA(VDD=3.0V,Tamb=25℃)
*400KHz的I2C总线接口(VDD=1.8~5.5V时)。
*可编程时钟输出频率为:
32.768KHz,1024Hz,32Hz,1Hz。
*报警和定时器。
*掉电检测器。
*内部集成的振荡器电容。
*片内电源复位功能。
*I2C总线从地址:
读,0A3H;写,0A2H。
*开漏中断引脚。
④管脚配置
⑤功能描述:
PCF8563有16个8位寄存器:
一个可自动增量的地址寄存器,一个内置32.768KHz的
振荡器(带有一个内部集成的电容),一个分频器(用于给实时时钟RTC提供源时钟),一个可编程时钟输出,一个定时器,一个报警器,一个掉电检测器和一个400KHzI2C
总线接口。
所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。
前两个寄存器(内存地址00H,01H)用于控制寄存器和状态寄存器,内存地址02H~08H用于时钟计数器(秒~年计数器),地址09H~0CH用于报警寄存器(定义报警条件),地址0DH控制CLKOUT管脚的输出频率,地址0EH和0FH分别用于定时器控制寄存器和定时器寄存器。
秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为BCD,星期和星期报警寄存器不以BCD格式编码。
当一个RTC寄存器被读时,所有计数器的内容被锁存,因此,在传送条件下,可以禁止对时钟/日历芯片的错读。
PCF8563硬件时钟描写模块:
最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动
产生增量。
*400KHz的I2C总线接口(VDD=1.8~5.5V时)
*可编程时钟输出频率为:
32.768KHz,1024Hz,32Hz,1Hz。
*报警和定时器。
*开漏中断引脚。
*I2C总线从地址:
读0A3H;写0A2H。
地址寄存器名称
00H控制/状态寄存器
01H控制/状态寄存器
0DHCLKOUT频率寄存器
0EH定时器控制寄存器
0FH定时器倒计数数值寄存器
地址寄存器名称Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
02h秒VL00~59BCD码格式数
03h分钟-00~59BCD码格式数
04h小时--00~59BCD码格式数
05h日--01~31BCD码格式数
06h星期-----0~6
07h月/世纪C--01~12BCD码格式数
08h年00~99BCD码格式数
09h分钟报警AE00~59BCD码格式数
0Ah小时报警AE-00~23BCD码格式数
0BH日报警AE-01~31BCD码格式数
0CH星期报警AE----0~6
操作举例
*进入EXT_CLK测试模式;设置控制/状态寄存器1的位7(TEST=1)。
*设置控制/状态寄存器1的位5(STOP=1)。
*清除控制/状态寄存器1的位5(STOP=0)。
*设置时间寄存器(秒、分钟、小时、日、星期、月/世纪和年)为期望值。
*提供32个时钟脉冲给CLKOUT。
*读时间寄存器观察第一次变化。
*提供64个时钟脉冲给CLKOUT。
*读时间寄存器观察第二次变化;需要读时间寄存器的附加增量时,重复步骤7和8。
⑹按键扫描模块:
①按键扫描模块电路图及说明:
整个系统只有两个按键,一个“启动/停止”,一个“复位”;本模块功能:
扫描按键功能,返回扫描结果。
第三章系统程序设计
本系统程序由C语言编写,编译软件是MPLABIDE和一个外挂的PIC的C语言编译软件PICC。
1.系统主程序流程框图(含程序):
/**********************************************************
//主程序开始
//**********************************************************
voidmain()
{
initial();
init();
lcm_init();
InitI2C();
count=0;
RunMilege=0;
flag=0;
play_fg1=0;
play_fg2=0;
//*********************************************************
//转换为图形方式
//*********************************************************
write_inst(0x34);
write_inst(0x36);
clear_picture_fast();
display_picture1();//显示一幅个性化图片
delay(100);
//*********************************************************
//转换为文本方式
//*********************************************************
write_inst(0x30);
write_inst(0x0c);
write_inst(0x01);
write_inst(0x06);
//*********************************************************
//显示一幅个人信息
//*********************************************************
disp_log1();
delay(200);
write_inst(0x01);
//*********************************************************
//主程序循环开始
//*********************************************************
while
(1)
{
if(mode==0)//模式0:
显示空车状态
{
INTE=0;
count=0;
kongche();
}
elseif(mode==1)//模式1:
{
if(!
flag)//标志位为"0"时
{
INTE=0;//禁止中断产生
write_inst(0x01);
yingke();//显示欢迎界面
play(17,50);//播放“您好”
play(18,5);//播放“欢迎”
play(25,100);//播放“乘坐本公司出租汽车”
delay(200);
flag=1;
write_inst(0x01);
}
else//标志位为"1"时
{
INTE=1;//允许产生中断
price();//里程和费率计算
zaike();//进入载客界面
}
}
elseif(mode==2)//模式2:
{
INTE=0;//禁止中断产生
if(!
play_fg1)//标志位为"0"时
{
daozhan();//进入到站界面
play(21,60);//播放“车已到站”
delay(50);
playsound_km(RunMil);//播放"行使里程"
delay(50);
playsound_mn(Pricet);//播放"应付金额"
play_fg1=1;//置标志位为"1"
write_inst(0x01);
}
jieshu();//进入结束界面
if(!
play_fg2)//标志位为"0"时
{
play(24,100);//播放“请检查您的随身物品”
play(18,5);//播放“欢迎”
play(20,5);//播放“再次”
play(25,100);//播放“乘坐本公司出租汽车”
play(19,5);//播放“再见”
play_fg2=1;//置标志位为"1"
}
}
scankey();//键盘扫描模块
}
}
2.里程和费率计算程序流程图(含程序):
//*********************************************************
//费率计算函数
//*********************************************************
voidprice()
{
if(RunMilege<=2300)
//TotalPrice=700+100;
TotalPrice=800;
if((RunMilege>2300)&&(RunMilege<=35000))
//TotalPrice=700+(RunMilege-2300)*0.26+100;
TotalPrice=800+(RunMilege-2300)*0.26;
if(RunMilege>35000)
//TotalPrice=700+(35000-2300)*0.26+(RunMil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 pic 单片机 出租车 计费 系统