




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的出租车计价器设计目录TOC\o"1-3"\h\u16322摘要 .绪论1.1课题研究背景出租车这个行业发展至今差不多50年了,它的整个系统从刚刚起步到现在已经很完善了,现在的出租车行业已经有一个完善的体系。虽然家用车在增加但是社会对出租车的需求一直都没有下降,现在的年轻人、大学生出门几乎都是打车出行,所以出租车计价器的设计前景还是很好的。因此,设计一款计价明确、提示清晰的出租车计价系统是十分必要的[1]。1.2课题主要内容关于本次的出租车计价器设计,将利用现阶段正飞速发展的集成电路资源。现在芯片已经成为几乎各行各业都需要的东西了,也是因为芯片的存在让原来极其复杂的电路变得简单化。单片机的存在使得一个系统可以通过编程实现各种复杂的功能,尤其是在控制、智能化等方面。单片机的高度集成化也让各个产品体积缩小,让电路简单、稳定,而且功耗也低。本次设计的出租车计价器主要能实现以下几个功能:首先,作为出租车计价器其具有最基本的计程计价的功能,三公里以内按起步价收取,三公里以外超出部分按每公里单价收取;第二,根据实际情况设置了白天和夜晚两种收费方式,采用一键切换的方式,司机根据时间手动切换这两种计价方式,夜晚计价模式起步价与白天相同,但是单价比白天高;第三,考虑到乘客可能中途有事需要司机等待的情况设置了停车等待模式,在乘客需要等待时司机按下等待按钮,计价器切换至按等待时间计费的方式,等乘客上车出发时司机可以按等待按钮切回正常计价模式;第四,看到现实中出租车的计价器屏幕都很小,乘客坐后排不仔细可能就看不见屏幕上显示的内容,所以设置了语音播报的功能,在乘客到达目的地后司机按结算按钮,系统会对行驶里程以及总的费用进行播报;第五,为了增加计价器的实用性,做了一个实时时钟的功能,没有乘客时可以切屏显示实时的年月日、时间和星期;另外,计价器的单价可以根据具体情况调整,时间也可以调整,单价调整完会实时存储,重新开机不需要再次调整,时间也是采用的实时时钟调整后重新上电不需要再次调整。1.3预期目标研究过现有的计价器后,我发现计价器最重要的部分就是行驶里程的测量,现有的里程测量装置有纯机械式的,也有电子式的。在学过传感器后我觉得使用一个合适的传感器做出来的里程测量装置肯定比机械式的计量精准,而且结构简单稳定,所以我所设计的出租车计价器将采用传感器作为里程测量的装置。而单单有一个传感器也无法实现里程测量的功能,所以这里及还需要一个单片机,单片机可以通过程序对传感器获得的数据加以处理最后得到里程的数据。完成里程测量后还需要对这些数据进行显示,所以需要选择一块液晶屏幕用于相关数据的显示,再加上几个按键用于调整,整个计价器就完成了基本设计。我觉得我设计的计价器应该测量行驶里程的精度能达到0.1千米,在三公里内按起步价收取乘车费,超出三公里时超出部分按单价计费此时计费也能实现按0.1千米的精度计费0,能实现白天和夜晚按不同单价计费,能在堵车或者乘客半路有事需要等待时按等待计费,结算时能对行驶里程和金额进行语音播报,空车时可以当作时钟使用。
2.总体方案设计本章节主要讲述出租车计价器系统的总体设计方案,工作原理以及主要的器件模块。第一节给出了总体方案,工作原理以及系统框图,第二节讲了主要的几大模块和各个模块的主要器件选型。2.1系统总体方案设计本设计是以单片机为核心,由单片机收集和控制各个模块的信息和功能。首先里程测量模块会在计价器开启后实时检测车辆的行驶里程,并将信号送到单片机中由单片机对信号加以处理从而获得车辆的行驶里程信息。数据存储模块用于单价的储存,每次调整单价时单价信息都会实时存入数据存储模块中,用于重新上电的数据恢复。按键模块是用来控制计价器的,通过它司机才能对单片机进行人为控制,比如启动计价器和调整时间等等。时钟模块用于闲时的实时时钟显示和等待计价的计时。显示模块就是用来显示时间、行驶里程、单价、总价等等一些总要的信息,司机和乘客都可以通过它了解计价器的工作状态。语音播报模块就是为了方便司机和乘客的一个人性化设计,当乘客到达目的地时语音播报会报出该行程中出租车测总行驶里程和总的价格,方便司机计算也方便乘客知晓行程信息。本设计的出租车计价器系统框图如图2.1所示。图2.1出租车计价器系统框图2.2主要器件选型2.2.1单片机选型本设计采用单片机作为核心控制器件,因为单片机可以通过编程完成对各种传感器、芯片等器件的控制以及算术运算,编程自由灵活,功能强大并且稳定可靠。考虑在51系列的STC89C52单片机和STM32单片机选择其一。备选一:STM32单片机,由名字可知其为32位的单片机,查阅资料可知其引脚数远多于51系列单片机,RAM容量也远大于51单片机。它的功能非常强大但是价格偏高,编程也较为复杂。备选二:STC89C52单片机,为8位单片机,价格便宜、编程简单,共有32个引脚,8KRAM。综合考虑,本设计并不是特别复杂,51单片机已经可以完全胜任,而且上课我们学习的也是51单片机,对该单片机的编程和使用都比较熟悉。并且其I/O口足够使用,所以选择51单片机作为本设计的核心控制器。2.2.2里程测量传感器选型里程测量模块是计价器系统中除主控器件外一个非常重要的模块,以前的车辆时速表和里程表全部都是采用纯机械结构的测量装置,结构简单但是易损坏,测量精度也不是很高。而在传感器飞速发展的今天,计量不准等问题很好的被解决了,庞大的机械测量装置被一个小小的传感器所取代,所以本设计的里程测量模块采用传感器测量行驶路程。车速里程表不但可以应用于汽车,还可以应用于放电机、电动机、卷扬机、加工机床等,测量电机的转速[2]。为了测量行驶路程,考虑使用以下两种类型的传感器之一:光学传感器和霍尔效应传感器。备选一:接近式光学传感器,通常接近式光学传感器用于检测由不透明材料制成的物体的存在。它们的特点是高开关频率和小尺寸,但是光学系统对环境要求很高。备选二:霍尔传感器,对被测物体几乎没有要求,其利用的对磁场变化的感应而输出不同的信号,体积小,动作灵敏,对环境的要求不高。而汽车一般都在灰尘泥土很多地方,所以最终选择用霍尔效应传感器作为汽车的行驶路程测量传感器。2.2.3数据存储芯片选型单片机虽自带内存但是容量有限,且单片机每次开机均需复位,这就使得一些数据无法直接存储在单片机内,所以需要另外选择一块存储芯片用作数据的存储。本设计中选择了AT24C02作为片外数据存储的存储芯片,其断电数据不丢失,它还支持IIC总线的传输协议这样可以节省很多IO口。2.2.4按键选型本设计共设计了一共6个按键用于整个系统的控制。按键模块有一个按键连接一个单片机引脚的单独式键盘和像高数行列式一样的按行列排列的行列式键盘两种。备选一:单独按键,按键连接简单,每个按键连接一个单片机引脚,编程较为简单,但是会占用很多单片机的引脚。备选二:行列式键盘,连接时要区分行列采用行线与列线分开连接的形式,编程也相对复杂需要查询行线与列线来定位哪个键按下,但是较单独式键盘而言更加节省单片机引脚。出于对按键个数以及整体设计的考虑最后还是采用了连接及编程较为简单的单独式键盘。2.2.5时钟芯片选型时钟模块用于等待计时,为了方便选择了基于DS1302的时钟模块,可以显示实时时钟,并且掉电也不用调时(前提是电池有电,所以在使用一定时间后需要检查电池是否有电,没电需要及时更换)。2.2.6显示模块选型显示部分因为数码管太不符合现代车载仪表的发展理念且功耗较大,所以直接选择液晶屏作为显示模块,液晶屏考虑了LCD12864和LCD1602两块屏幕。备选一:LCD12864,屏幕尺寸较大能显示更多的内容,自带汉字字库可以显示汉字,但是其价格偏高,其屏幕大背光亮度也高会对驾驶带来不安全因素,备选二:LCD1602,屏幕较小,能显示16×2共32个字符,要显示汉字比较麻烦需自己设计汉字点阵,但是其价格便宜。考虑到本设计不用显示很多很复杂的内容,所以选择了较为便宜的LCD1602液晶显示屏。2.2.7语音播报芯片选型为了收钱方便,也为了乘客能更清楚的知道自己的乘车费用,所以选择了基于WT588D的语音播报电路作为语音播报模块。WT588D芯片拥有一线串口的功能,在很大程度上节约了单片机的引脚占用数量。
3.硬件设计本章节介绍了本设计的出租车计价器硬件设计内容,包含几大模块的主要器件介绍以及电路设计原理。相比普通模拟电路控制,采用单片机设计出租车计价器的功能更强大,而且用较少的硬件和适当的软件的配合就可容易实现[3]。3.1单片机最小系统设计3.1.1单片机简介本设计采用的51单片机STC89C52芯片,如图3.1所示,是STC89C51的升级版本,STC89C52是8位微处理器,有8K的ROM。图3.1STC89C52芯片示意图整个单片机有32个I/O口,分别分为四组P0、P1、P2、P3。P0口是STC89C52单片机中可以做数据总线和地址总线使用的接口,一般用于扩展片外资源所使用。这里用于接上4.7KΩ的排阻后接液晶显示屏,作为液晶显示屏的数据传输控制液晶显示屏显示内容。P1口前六个I/O口连接按键,用于对整个系统的调整和操控,因为采用单独的按键所以一个按键需要连接一个I/O口。P1.7引脚接语音模块,用于向语音模块发送语音调用信息和命令。P2口后3个I/O口用于控制液晶显示屏前3个I/O口用于于实时时钟模块相连,分别控制实时时钟模块的复位、时钟信号和数据传输。P3口是STC89C52单片机中串口和中断的所在,P3.0和P3.1是单片机的串口用于下载程序用,这两个空高低电平不好确定所以一般不用于接连外部电路,P3.2是一个外部中断接口这里用来连接霍尔传感器模块接受传感器信号进行中断处理计算行驶路程。P3口的其他引脚还连接了存储芯片用来储存单价等信息。3.1.2最小系统最小系统电路是单片机系统的最基本的电路,它的存在是为了保证单片机能在一个正常的状态工作持续工作。单片机的最小系统电路包括了晶振电路和复位电路,在其基础上可以扩展其他的功能电路,使单片机实现一些想要的功能。图3.2STC89C52最小系统图(1)时基电路STC89C52单片机有两种产生时间信号的方法分别是外部时钟和内部时钟。如图3.3所示电路,就是一种经常使用的单片机的外部时钟电路,单片机内部自带有一个振荡电路,只有当外部时钟引脚XTAL1与XTAL2和晶体振荡器连接时,单片机的内部才能通过自激振荡产生时钟信号。C1和C2电容器使用22pf,用于稳定石英晶体谐振器的快速启动频率,通常使用6MHz和12MHz的晶体振荡器,本设计中采用12MHz的晶振,但是为了保证波特率是整数所以选用了11.0592MHz的晶振。图3.3时基电路(2)复位电路为了使单片机能正确的工作就需要在合适的时候对其进行复位,就比如本设计中司机每完成一单都需要对计价器进行复位。STC89C52单片机需要在两个机器周期中保持复位引脚的高电平才能完成复位。复位电路有两种,一种是按键复位,另一种是接通电源复位。本设计为接通电源复位,R1采用10K,C1采用10uF。电路图如图3.4所示。图3.4复位电路(3)电源电路系统供电,可供选择的方式有:电池盒供电、USB供电、电源接口供电外部供电[4]。在本设计中采用USB+5V供电电路图如图3-5所示,外部电源通过电源接口pow与电源开关switch连接,电源开关3脚向单片机P40脚vcc供电。图3.5电源电路3.2里程测量模块3.2.1霍尔传感器工作原理霍尔效应是一个物理现象,在磁传感器中地位非凡。它是在1879年,由美国物理学家霍尔发现,将外加稳恒电流的导体放入磁场中,固体中的载流子在磁场作用下因受到磁场洛伦兹力的影响而发生轨迹偏转,最终在稳恒电流I与磁感应强度B的叉乘方向上测得一个霍尔电势差,这一现象称为霍尔效应[5]。本设计中里程测量传感器采用就是依据霍尔效应制成的3144霍尔传感器,它也是一个集成电路。它的内部包括电压调整电路、反相电源保护电路、霍尔元件、温度补偿电路、微信号放大器施密特触发器和OC门输出级[6]。霍尔传感器具备很多优点,它们体积小、结构紧凑、性能稳定、重量轻、使用寿命长、功耗低、精度高、可以在灰尘以及污染较严重的地方使用。由于其在污染环境中的稳定运行,这种类型的传感器被选择用于构建链轮转速测量装置的原型[7]。我们所能够买到的一般都是集成式霍尔传感器,像3144集成霍尔传感器是采用三个引脚的封装如图3.6所示,1脚位电源正极,2脚为电源负极,3脚为信号输出端。图3.6霍尔传感器引脚示意图1脚2脚接好电源后,当有磁铁靠近霍尔传感器的标记面时,3脚就会输出导通电平降低,当磁铁移走后3脚输出关断电平升高。每次磁铁靠近都会产生一次电平变化,而且霍尔传感器敏感性很高,这样传感器输出的就是脉冲信号。根据设计,我们需要的是传感器输出数字开关量(0和1),而霍尔传感器输出的是非开关量,这里需要一个利用电压比较器芯片的电路对传感器信号进行处理,使之输出开关量信号,如图3.7所示。图3.7霍尔传感器3144信号示意图3.2.2里程测量电路设计里程测量电路如图3.8所示,传感器输出的脉冲信号先输入74CH14芯片再由芯片输出经过处理的电平。74CH14是一款可以对波形整形的芯片,可以让缓慢输入的信号变得干脆清晰。上电后OUT1输出高电平,只有磁铁靠近霍尔传感器OUT1才输出低电平。OUT1接单片机P3.2引脚,磁铁每次经过霍尔传感器都会产生高低电平变化,而单片机可以对此脉冲进行计数。根据这个原理,如果将磁铁安在车轮上就可以实现对车轮转动圈数计数,而轮胎尺寸是固定的,就可以算出行驶里程。图3.8霍尔传感器接线图3.2.3霍尔传感器的安装霍尔传感器模块设计完成后需要安装在合适的位置,目的是为了测量车辆的行驶里程,则我选择在汽车轮毂上安装磁铁,然后将传感器安装在合适的位置。安装方法如图3.9所示,磁铁装在轮毂上要能够激发传感器,传感器信号输出端与单片机相连。图3.9霍尔传感器安装示意图传感器在车轮合适位置安装好后,当车辆开始行驶时,每次只要磁铁接近或经过传感器一次,传感器电路都会被激活一次并且产生一次电平变化,也就是产生了脉冲信号,同时产生的脉冲信号会输入单片机。单片机利用中断对脉冲信号进行计数,这样就将车轮所转的圈数记录到单片机内了,然后测量车辆的车轮周长,将计数次数乘以车轮周长就得出了车辆的行驶里程。3.3数据存储模块3.3.1AT24C02简介为了方便使用,本设计采用AT24C02作为外部存储,用于存储设定好的单价,使其重新上电后不用重新设置价格。AT24C02是来自美国Atmel公司的一款COMS低功耗EEPROM,其内存有2K,基本特征主要表现在体积小、数据难丢失、抗干扰能力强、10ms以内的写入速度、10000次以上的擦写次数、2.5~5.5V的宽工作电压等方面[8]。芯片封装及引脚如图3-9所示。该芯片传输信息可以采用IIC总线的方式,就是它只要一根信号线和一根数据线就可以和与它相连接的芯片进行数据交换,这种方式既简单方便又减少I/O口的占用。IIC总线是由Philips公司开发的一种简单、双向二线制同步串行总线[9]。图3.10AT24C02引脚示意图(1)A0、A1、A2引脚是用于AT24C01和AT24C02进行连接所用。(2)WP引脚的作用是当它接VCC(电源正极)时就不可以向芯片写数据了,只有把它接GND(电源负极)上它才能完成正常的读写工作。(3)SCL引脚是IIC总线两条线中的信号线,有它负责控制芯片是读取数据还是存储数据。(4)SDA引脚就是IIC总线的另一条线了,它是用于数据的传输并且它是双向的,通过它完成读和写两个功能。3.3.2数据储存电路设计在本设计中该芯片的电路如图3.11所示,因为只采用一片该芯片所以A0、A1、A2均接地。该芯片在设计中只用于存储设置的单价也不需要写保护,正常读写就可以所以WP引脚直接接地。SCL和SDA引脚分别与单片机P3.3引脚和P3.4引脚连接,单片机通过编程控制芯片的读写操作。使用时由SCL引脚传输器件内数据的发送和接收的时钟信号,由SDA引脚完成双向的数据与地址的发送和接收的工作。传输数据时当SCL为高电平时,数据线不能有电平的变化,否则将被视为停止或开始的信号。图3.11AT24C02接线图3.4时钟模块为了增加本设计的实用性,;利用DS1302芯片的做了一个实时时钟模块。DS1302芯片的时钟模块不仅仅可以用于显示实时时钟,并且有双电源供电以保证单片机掉电后时钟继续走时,单片机关机或断电后重新开机时不需要再调时。3.4.1DS1302芯片DS1302是由美国DALLAS公司生产的涓流时钟芯片[10]。是一款低功耗时钟/日历芯片,在目前的市场上它是最为普及的一款时钟/日历芯片,已经广泛地运用于各类电子产品[11]。它可以对2100年之前的年、月、日、星期、时、分、秒进行准确计时,还有调整闰年的能力。其内部有7个跟时间有关的寄存器,分别是年、月、日、星期、时、分、秒,这些寄存器内的信息都是以BCD码的形式存储的。还有写保护寄存器、慢充电寄存器和时钟突发寄存器。芯片引脚如图3-12所示:图3-12DS1302芯片引脚示意图该芯片采用8脚封装,X1、X2为接32.768KHz晶振引脚;Vcc1和Vcc2为芯片的两个不同的供电电源,主电源是Vcc2,Vcc1是备用电源,就是依靠备用电源在断电时对芯片供电以保证芯片内部时钟能正常走时。主电源电压大于备用电源时(一般主电源+5V,备用电源是电池供电一般3.3V)是采用主电源供电,只有当主电源断电或者故障时才采用备用电源供电,二者分开不同时对芯片供电。是芯片的复位引脚;I/O引脚是一个双向的数据传输引脚;SCLK是用来传输时钟信号的引脚。3.4.2实时时钟电路设计实时时钟模块电路如图3.13所示,芯片主电源与单片机供电相连,备份电源则用3V纽扣电池加二极管供电,SCLK连接P2.2引脚、I/O连接P2.1引脚、CE连接P2.0引脚,接上按键后便可以利用单片机对实时时钟进行调时,单片机实时从DS1302中读取时间信息。图3.13DS1302接线图使用中我们需要利用单片机通过I/O引脚向芯片写地址写数据或者写地址读数据,读出来的时间数据是BCD码的形式所以写数据也应该按BCD码的形式写进去。只有当秒寄存器的最高位为0时时钟才会正常走时。小时寄存器的最高位则是控制24小时制和12小时制的切换,为1时是12小时制。写保护寄存器的最高位是写保护控制位,当其为1是芯片写保护所有寄存器和RAM不能写数据防止其他程序篡改时间,所以在写数据之前必须将写保护拉低。3.5显示模块3.5.1LCD1602简介本设计的显示模块选择了一块功能强大的液晶显示屏LCD1602,这是一块比较常见的显示屏。该显示器操作方便,耗电量低,显示质量高,是目前工控系统中最为广泛使用的一种液晶屏[12]。LCD1602有带背光和不带背光两种,这里考虑到车内一般不开灯所以选用的是带背光的。LCD1602液晶显示屏一共可以显示两行字符,每一行是可以显示16个字符一起是32个字符,如图3.14所示。它可以采用+5V供电,并且对比度还可以调,直接接地对比度最高。 图3-14LCD1602结构图3.5.2显示模块电路设计液晶显示屏的连接图如图3.15所示,因为选择的是有背光的LCD1602所以一共有16个引脚,A和K引脚就是背光的供电正负极引脚,VCC和GND是芯片的供电一脚,VO(也有称VL)的引脚就是用来调节对比度的,D0至D7引脚通过4.7K的排阻于单片机的P0口相连,用于于单片机之间数据的传输。Rs引脚是高电平时选择数据和低电平时选择命令的寄存器选择引脚。R/W是高电平时读数据,低电平时写数据读写控制终端,E引脚是一个信号控制启用的端子,需要下降沿触发模块才可以向模块写入数据。图3-15LCD1602连线图3.6语音播报模块3.6.1WT588D简介本设计为了方便而增加了一个基于WT588D的语音播报模块,其封装结构如图3.16所示。图3.16WT588D引脚示意图WT588D是一个自带内存的语音芯片,我们可以用跟它匹配的上位机来更换它的使用方式。它有诸多使用方式,本设计里只采用一线串口的方式,并且该芯片只有一个P03引脚是用来传输数据的,所以一线串口只能用该引脚。使用时,我们需要把所需要的语音存入芯片,每一个地址一个语音,比如:1存在00H地址,那2可以存在01H地址。本设计里的语音模块主要是为了播报行驶路程和价格所以我只需要存入0-9、点、元、十、百、公里等语音即可,使用时按地址调出来使用,可以组合使用。这个芯片直接就可以驱动一个0.5W/8Ω的扬声器,不要用再外加放大电路,这也降低了使用难度。一线串口顾名思义就是只有一个串口线,只用一根串口线就可以完成对芯片功能的控制。其原理就是用不同的占空比来分别表示0或1,而一串八位二进制数就表示一个地址,每个地址就存储着所需要的信息有语音也有命令,都是通过地址进行调用的。发送数据的时序图如图3.17所示:图3.17WT588D发送数据时序图RESET是复位信号,不是特殊场合发送数据前可以不需要复位。发送数据时,先拉下数据信号5ms,再发送数据,发送后等待20ms,同时将忙信号发送到语音广播。D0-D7表示语音地址或命令数据,地址中只有00H-DBH为语音地址,而E0H-E7H则是音量调整的命令,默认音量为每次复位后的最大音量,循环命令是倒数第二个地址F2H,停止命令最后一个地址FEH。3.6.2语音播报模块电路设计实际应用中的WT5888D连接电路如图3.18所示,利用芯片的一线串口功能将芯片的P03引脚与单片机的P1.7引脚相连。WT588D自带一个PWM输出可以直接驱动0.5W/8Ω的扬声器,所以这里不需要另外外加功放驱动电路。使用时,由单片机向芯片发送语音地址,芯片接收一个地址即播放该地址的语音,按顺序播放几个地址语音听起来就是一句话。图3.18WT588D接线图3.7按键模块本设计中采用了6个独立式按键,它们分别与P1.0-P1.5相连。按键K1连接P1.0用于时间调整的切换,按键K2连接P1.1用来把时间往上调整,按键K3连接P1.2用来时间往下调整,按键K4连接P1.3用于切屏,按键K5连接P1.4用于启动计价器,按键K6连接P1.5用于等待/正常切换和语音播报,按键连接图如图3.19所示。图3.19按键模块接线图
4.软件设计出租车计价器的软件设计包括5个主要部分,分别是主程序、DS1302子程序、LCD1602子程序、WT588D子程序、里程测量子程序。4.1主程序程序流程图整个系统的主程序流程图如图4.1所示。开机通电后,首先单片机会去片外存储器内读取上次设置的单价,然后完成实时时钟的初始化和时间读取,语音模块初始化和霍尔传感器模块初始化之后,在LCD1602上显示现在的实时时间信息,接下来单片机就不断的扫描整个程序,只有当有按键按下才会进入按键设置的程序内,判断出是哪个按键按下后执行对应的功能,完成后跳出按键程序继续扫描。图4.1主程序流程图主程序部分程序如下:voidmain(){READS();//读初值intt();init();//初始化xsj(0x8e,0x00);xsj(0xca,0);xsj(0x8e,0x80);while(1){if(biao==0)//正常走时进入{du();//从1302读出数据xs();//时间刷新}anj();//时钟调整anj2();//计费与时钟切换if(ding==1)chushihua();//计费初始化while(ding){aq();//数据处理key();//白天/夜晚切换,等待/正常切换anj2();//计费与时钟切换}}}4.2DS1302程序流程图DS1302实时时钟子程序开机后先完成各个变量的初始化,然后关闭写保护和复位,调整时间时会向芯片写数据,在向芯片写数据时先写地址,然后延时等待再写数据,如此循环直到数据写完。读取数据时也要先关闭复位,然后先写地址,然后延时等待在读取数据,如此循环直到数据全部读出然后送屏幕显示,之后返回主程序。DS1302程序流程图如图4.2所示。图4.2DS1302流程图部分程序如下:voidxzj(ucharat)//写字节{uchari,map;map=at;sck=0;for(i=0;i<8;i++){map=map>>1;//右移d=CY;sck=0;_nop_();_nop_();sck=1;_nop_();_nop_();}}uchardzj()//读字节{uchari;for(i=0;i<8;i++){ACC=ACC>>1;sck=1;_nop_();_nop_();sck=0;_nop_();_nop_();s=d;}returnACC;}voidxsj(uchars,uchard)//写数据或指令{rst=0;//禁止读和写sck=0;rst=1;//允许读和写xzj(s);//写地址或指令xzj(d);//写数据rst=0;//禁止读和写}uchardsj(ucharx)//读数据{uchards;rst=0;//禁止读和写sck=0;rst=1;//允许读和写*/xzj(x);//读的地址ds=dzj();rst=0;//禁止读和写returnds;//返回读出的数}4.3LCD1602程序流程图LCD1602显示子程序负责显示系统的的各个信息,开机后先完成自身的初始化,然后延时等待,延时结束后检测忙信号,如果芯片在忙则继续检测忙信号直到芯片空闲,等芯片空闲后获取内部的RAM地址并延时等待,延时结束后向获取的地址内写入要显示的信息数据,写完后屏幕就会显示出该内容。LCD1602程序流程图如图4.3所示。图4.3LCD1602流程图部分程序如下:voidwrite_date(uchardate)//写数据{rs=1;rw=0;P0=date;delay(5);e=1;delay(5);e=0;}voidwrite_com(ucharc)//写指令{rs=0;rw=0;P0=c;delay(5);e=1;delay(5);e=0;}voidinit()//初始化{e=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<16;num++){write_date(tad[num]);//1602显示第一行delay(1);}write_com(0x80+0x40);for(num=0;num<16;num++){write_date(tad1[num]);//1602显示第二行delay(1);}4.4WT588D程序流程图语音播报子程序在主程序开始后完成初始化,初始化完成后芯片内自动生成每一段提前存好的语音的地址,然后芯片进入等待,直到主程序检测到播报按键按下后,语音播报程序开始获取需要播报的语音地址,后将地址写入芯片,芯片就播报写入的地址上的语音,写入几个地址就播报几段语音,播报完成后返回主程序。WT588D程序流程图如图4.4所示。图4.4WT588D流程图部分程序如下:voidWT588D_HANDLE(intnum,intnum1)//语音播报里程和金额{uinttime=1000;uchari=0,cccc;space=0;//行程WT588D_data[space++]=10;//本次行程use_WT588D(num/10);WT588D_data[space++]=11;//点WT588D_data[space++]=num%10;//小数点位WT588D_data[space++]=12;//千米//价格WT588D_data[space++]=13;//共计use_WT588D(num1/10);WT588D_data[space++]=11;//点WT588D_data[space++]=num1%10;//小数点位WT588D_data[space++]=14;//元WT588D_data[space++]=100;space=0;Line_1A(WT588D_data[0]);delay_ms(time);delay_ms(time);delay_ms(time);delay_ms(time);delay_ms(time);for(i=1;i<16;i++){if(WT588D_data[i]==100)break;cccc=WT588D_data[i];Line_1A(cccc);delay_ms(time);delay_ms(time);}delay_ms(time);}4.5里程测量程序流程图里程测量子程序在在主程序运行时完成霍尔传感器的初始化,之后等待按键启动进入计价器模式后设置一个计数变量自增,每次磁铁经过传感器都会向单片机发送一个脉冲,每个脉冲都触发单片机外部0中断一次,也就是计数变量自增一次,也代表车轮转了几圈,每当计量一百米时里程变量加一计数变量清零,如此反复循环。里程测量子程序流程图如图4.5所示。图4.5里程测量子程序流程图部分程序如下:voidEX_INT0(void)interrupt0//外部中断0函数{ucharnum;num++;//一个计数器自增1IT0=1;//边沿触发方式if(num==100)//判断是否有100个脉冲{num=0;//清零road+=1;//每100次中断里程加1}}
5.制作和调试5.1软件仿真本设计利用Proteus软件仿真,用Kell4进行程序的编写与编译。本设计中设计了实时时钟、霍尔传感器和掉电储存,这些是不能进行仿真的,可以仿真的只有单片机最小系统以及显示部分。先在Proteus中搭建好如图5.1所示的单片机最小系统,虽然仿真时不连接最小系统也可以仿真,但是本着严谨的态度还是需要连接好,然后连接好LCD1602液晶显示器,图5.2所示,再连接实时时钟芯片DS1302和存储芯片AT24C02,虽然都连上了但是掉电不用调时以及掉电储存不方便仿真,仿真时只是连接上而已。图5.1单片机最小系统仿真连接图图5.2LCD1602仿真连接图开始仿真后,屏幕默认显示时间如图5.3所示,按下切屏后切换至计价器模式如图5.4所示。图5.3开机默认界面图图5.4切换至计价器模式界面图仿真部分仅仅完成对LCD1602的显示的学习与应用过程,本设计的其他内容都在实物的制作与调试中完成。5.2硬件制作仿真完成后就可以开始真正的实物制作了,将各个模块与单片机的最小系统焊接在一起(如图5.5所示),焊接完成后用万用表检查虚焊与短路,排除所有有错的的地方后才可以上电测试。图5.5实物焊接图整个系统的布局如图5.6所示,单片机及其最小系统处于中间部位,上方是用于显示的LCD1602液晶显示器,右上角被LCD1602盖住的是DS1302实时时钟模块,它的备用电源是一块纽扣电池。单片机的左边是AT24C02数据储存模块就是利用它实现了掉电储存功能,它的下方是WT588D语音模块,它和旁边的喇叭一起实现语音播报的功能。单片机正下方是一个电机以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协议之中草药采购协议
- 语言学中的跨文化交际理论应用练习题
- 混合储能电站项目规划设计方案
- 基于人工智能的国有企业组织结构优化路径
- 绿色资源优化配置与高效利用的策略路径
- IT设备采购与使用表格(硬件设备)
- 琵琶行课堂讲义:初中语文古诗文详解
- 科技发展场景表格
- 云朵王国的奇遇奇幻想象的旅程想象作文8篇
- 成长来自改变作文800字(7篇)
- 教师读书分享《给教师的建议》课件
- 移动式脚手架操作平台搭设方案
- FZ/T 07025-2022针织行业绿色工厂评价要求
- 实用临床护理-“三基”应知应会题库完整
- 内蒙古高考户籍制度
- 上门厨师项目商业计划书
- 劳动合同书Word模板
- 零食电商实施方案
- 第35届中国化学奥林匹克(初赛竞赛)试题及参考答案
- USY分子筛的改性研究进展
- 医疗器械经营质量管理规范试题
评论
0/150
提交评论