单片机出租车计价器源程序

2024-05-24 版权声明 我要投稿

单片机出租车计价器源程序(精选5篇)

单片机出租车计价器源程序 篇1

设计并制作一台出租车计价器。调试时采用10Hz方波信号模拟,每个方波代表10m。基本要求:

(1)不同情况具有不同的收费标准

白天 1元/公里 晚上 2元/ 公里 途中等待(30s)1元/30s

(2)数据输出(6位LED数码管显示)

单价输出2位 路途输出2位 总金额输出2位

(3)按键(3个)

启动计价开关 数据复位(清零)白天/晚上转换

3.4.1模块1:系统设计

(1)分析任务要求,写出系统整体设计思路

通过分析,需要实现四个主要的功能模块,分别为脉冲计数模块、定时器计时模块、按键的处理以及

数码管动态扫描等功能。

定时器计时模块主要完成途中等待(即没有脉冲来时)30秒的计时。在启动键按下后,定时器就不停的计时,只要有脉冲来就将计时的值清除为零。如果没有脉冲来,当计时超过30秒时,相应的总金额要

按照收费标准计价。

中断的管理:尽管中断有嵌套以及优先级的功能,但是由于定时器已经使用一个了中断资源,脉冲检测不宜再采用中断方式,而是采用查询方式。由于需要不停的要清除30秒的计时,因此,脉冲的计数不

采用定时器的计数方式。

启动键触发定时器开始工作,而定时器的运行可以作为脉冲计数的标志,只要定时器计时在运行,每来一个中断都应该计数。

主程序完成键盘的扫描和按键的处理,查询脉冲产生的中断,并完成脉冲的计数。每个脉冲代表10米,则当计数到100时表示1千米的距离,相应的总金额要按照收费标准计价

(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图

采用MCS51系列单片机At89S51作为主控制器,外围电路器件包括数码管驱动、独立式键盘、复位电

路等。硬件电路原理图如图3-9所示。

图3-11 出租车计价器的硬件电路原理图

数码管驱动采用2个四联共阴极数码管显示,由于单片机驱动能力有限,采用74HC244作为数码管的驱动。在74HC244的7段码输出线上串联100欧姆电阻起限流作用。

独立式按键使用上提拉电路连接,在没有键按下时,输出高电平。P0口用于输出7段LED共阴极显示代码,P2口用于输出低电平有效的位选码。0~9的7段LED共阴极显示代码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。

(3)分析软件任务要求,写出程序设计思路,分配单片机内部资源,画出程序流程图

软件的任务要求包括定时器的设置、按键的扫描、按键的功能处理、脉冲的计数、路途等待超30秒的计

时以及总金额的计算等。

程序设计的思路:使用中断方式对定时器的溢出进行计数实现30秒的计时。主程序采用查询外部中断标志实现脉冲的计数,由于每个脉冲代表10m,因此,当脉冲计数超过100时,计价器按照收费标准计价。主程序在初始化变量和定时器参数设置之后,进入一个循环结构,循环扫描键盘、查询脉冲的中断、数码管的动态扫描等功能,当脉冲的中断标志被查询到,若路途等待时间未超30秒时,要及时将路途等待时间的值清除为零。主程序的流程图如图3-12所示。

图3-12 出租车计价器的主程序流程图

中断服务程序主要实现计时功能,当启动键按下之后,定时器开始工作,用一个变量对定时器溢出中断的次数进行计数,达到计时功能,该变量在每次脉冲到来时被清零(在主程序中清零),当脉冲长时间没有来,则当该变量计数超过30秒时,总金额按照途中等待计费标准进行计价。中断程序的流程图如图

3-13所示。

图3-13 出租车计价器的中断服务程序流程图

(4)设计系统软件调试方案、硬件调试方案及软硬件联合调试方案

软件调试方案:伟福软件中,在“文件新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。

在 “项目编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。

硬件调试方案:在设计平台中,将单片机的P1.0-P1.2分别与3个独立式键盘通过插线连接起来,将P3.2与脉冲信号源连接起来。

在伟福中将程序文件编译成目标文件后,将下载线安装在实验平台上,运行“MCU下载程序”,选择相应的flash 数据文件,点击“编程”按钮,将程序文件下载到单片机的Flash中。

然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。3.4.2 程序设计

/*晶振:11.0592M T1-250微秒溢出中断一次;P3.2(int0)-中断100次,查询IE0置位,P1^0为启动键;P1^1为清除键;P1^2为白天/晚上的切换键 变量的定义: key_val: 返回按键的值 255-无键

T1_cnt: 定时器溢出数计数

cnt_30: 30秒钟的计时

cnt_distance: 计算路程

cnt_cost: 总金额

state_val: 状态:0-白天 1 夜晚

cost_val[3]: 收费标准:白天单价cost_val[0]=1元/公里;晚上单价cost_val[1]=2元/公里; 等待单价cost_val[2]=1元/30s

led_seg_code:数码管7段码 */ //-------------------#include “reg51.h” unsigned char data cnt_30,cnt_distance,cnt_cost;unsigned int data T1_cnt,D_cnt;unsigned char data key_val,key_val_old;unsigned char data state_val;char code cost_val[3]={1,2,1};char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//led_seg_code[0-9]代表0-9 //-------延时-----------------void delay(unsigned int i)//延时 { while(--i);} //-------初始化变量------------------void init_variant()//初始化一些变量的内容 {unsigned char i;cnt_30=0;//30秒的计时 D_cnt=0;//脉冲的个数 cnt_distance=0;//距离的计数

cnt_cost=0;//保存总价格 } //-------扫描键盘-----------------unsigned char scan_key(){ unsigned char i,k;i=P1;if(i==0xff){ k=255;} //无键按下

else //有键按下

{ delay(10);//延时去抖动

if(i!=P1){k=255;} else { switch(i){ case 0xfe: k=0;break;//P1.0按下,启动键

case 0xfd: k=1;break;//P1.1按下,清除键

case 0xfb: k=2;break;//P1.2按下,切换键

} } } return k;} //-------数码管动态扫描-------------void led_show(){unsigned char i,k;

//-----显示单价----k=cost_val[state_val];i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xbf;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0x7f;delay(10);//-----显示距离------k=cnt_distance;i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xf7;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xef;delay(10);//-----显示总价格-----------k=cnt_cost;i=k%10;//暂存个位 P0=led_seg_code[i];P2=0xfe;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xfd;delay(10);} //-------计时----------------void timer1()interrupt 3 //T1中断 { T1_cnt++;if(T1_cnt>3999)//如果计数>3999, 计时1s { T1_cnt=0;if(cnt_30<30)//没有超过30秒,继续计时

{cnt_30++;} else //超过30秒,途中等待计价

{cnt_30=0;cnt_cost=cnt_cost+cost_val[2];} } } //---------主程序----------------

main(){//初始化各变量 T1_cnt=0;state_val=0;key_val_old=255;init_variant();//初始化51的寄存器

TMOD=0x20;//用T1计时 8位自动装载定时模式,不用T0 TH1=0x19;//250微秒溢出一次;250=(256-x)*12/11.0592-> x= 230.4 TL1=0x19;EA=1;//开中断 ET1=1;

TR1=0;//定时器T0 TCON=0x01;//Int0中断取边沿触发模式 while(1){ key_val=scan_key();// 255;// if(key_val!=key_val_old){ key_val_old=key_val;if(key_val!=255){ switch(key_val){ case 0: //启动键

TR1=1;//启动计时,TR1=1为启动了的标志

break;case 1: //清除键

init_variant();//清除变量

TR1=0;//关闭定时器

break;case 2: //白天/黑夜的切换

if(state_val==0){state_val=1;} else {state_val=0;} break;} } } if(IE0==1&& TR1==1)//每来1个脉冲,中断一次

{ IE0=0;cnt_30=0;//30秒的计时清零

if(D_cnt<100)

{D_cnt++;} else //计数100次,每次10米,表示一公里

{D_cnt=0;cnt_distance=cnt_distance+1;

单片机出租车计价器源程序 篇2

随着生活水平的提高, 越来越多的人们开始选择乘坐出租车这种既方便又快捷的出行手段。随着嘀嘀打车等一系列打车软件的诞生, 乘客乘坐出租车的费用也有了很大程度的下降。出租车开始成为生活在快节奏模式下的人们短途出行的首选交通工具。在我国的交通运输中, 出租车所处的地位也越来越重要。

具有更加精良的出租车计价器无论是对于出租车司机还是乘客都是十分重要的。基于单片机的出租车计价器具有功能强, 性能可靠, 电路简单、成本低的优点, 且灵活性强, 能通过软件编程实现多种附加功能。

2 系统硬件设计

硬件系统包括有复位电路、振荡电路、路程测量电路、按键电路、显示电路等。

2.1 振荡电路

单片机发出时钟信号的方法有两种, 它们是内部时钟方法和外部时钟方法。本次设计采用的是内部时钟方式:电路由两个电容和一个晶振构成, 单片机内部存在一个高增益反相放大器, XTAL1及XTAL2端口分别作为单片机内部放大器的输入端和输出端, 该放大器和功能是反馈元件的石英晶体振荡器一块儿组成自激振荡器。振荡电路脉冲经历二分频之后成为系统的时钟信号, 然后在二分频的底子之上进行三分频发出地址锁存容许信号, 这时候获得的信号为机器周期信号。采用12MHz的晶振, 作为系统的时钟源。晶体振荡频率高, 可得硬件系统的时钟频率高, 因为本电路确定单片机运转速度所以单片机运转速度也跟着变快。

2.2 复位电路

本电路除了正常的初始化功能外, 当单片机系统在运转过程当中遭到外界情况滋扰而发生程序错误时, 按下该电路的复位按钮, 单片机内部的程序将自动从头执行。想实现复位有上电自动复位及按键手动复位这两种方法。其中按键手动复位又分电平模式和脉冲模式。在本次设计中, 为方便操作, 采用按键手动电平复位。电平复位原理:电路输出端接RST引脚, 按下按钮后, 电源经两电阻分压后在RST端产生一个高电平。RST端口的高电平只需要确保两个机器周期时段, 单片机就将执行复位的一系列操作。单片机的复位速率要比外围I/O接口电路高, 为保证硬件系统成功地复位, 我们在进行程序设计时, 必须要注意放置一定量的复位延迟时间。

2.3 按键控制电路

单片机的P1.0管脚接复位按钮, P1.1管脚接单价上调按钮, P1.2管脚接单价下调按钮, P1.3管脚接白天夜晚切换按钮。按下复位按钮后, 单片机P1.0端口为低电平, 通过软件编程, 调用清零子程序, 在程序中给各数值赋0代码, 用于将记录数据例如里程、总价、单价, 自动恢复到初始状态, 方便下次计价。该四个按钮在计价过程中仍然有效。

2.4 路程测量电路

霍尔传感器是以霍尔效应作为原理创造的某种磁场传感器, 其分为开关型和线性型。线性型输出模拟量, 开关型输出数字量。A44E是单极性开关型的霍尔器件, 它的工作电压范围相对较宽, 为4.5V到18V。A44E输出的信号满足TTL电平准则, 能够直接接入到单片机的I/O端口, 并且它的最高检测频率能够到达1mhz。安装在车轮上的A44E霍尔传感器, 将检测到的信号送给单片机, 单片机的P3.2端口作为信号的输入端, 利用该端口的第二功能即外部中断0使编程得以简化。经过简单的计算处理之后, 送给显示模块, 这样便完成了里程数的测量。如图1所示。

计价原理:假定车轮的周长是0.001千米, 每当车轮转动一圈, 霍尔开关就检测并且输出信号, 引发单片机的中断, 每逢霍尔开关输出一个低电平信号就将令单片机发生一次中断, 对脉冲进行计数。当计价器对脉冲计数达到1000次时即车行驶了1千米时, 在单片机的控制下, 总价将自动增加。本次流程中, 需实现将目前行驶的里程数和总价进行叠加, 并把运转成果保留到里程和总价寄存器当中。其计算公式为单价×公里数=总价。

2.5 显示电路

本设计将LCD1602液晶显示器的八位并行数据总线连接到单片机的P0口, RW端口接单片机P2.5口, RS端口接单片机P2.6口, E端口接单片机P2.7口。在VEE引脚接一个阻值为1K的电位器, 用途是调节液晶的对比度。在LCD屏上可显示公里数, 总价, 单价的数据。

3 系统软件设计

本设计中, 软件设计使用模块化操作, 充分利用各个模块间的相互关联, 通过主程序调用各个子程序令程序通俗易懂, 方便易行。整体程序流程图如图2所示。

令main函数开始编写, 首先应当进行液晶初始化、外部中断初始化和参数初始化。经过这一系列初始化, 使得硬件处于准备就绪状态。

判断有无按键按下, 如果没有则无计费脉冲, 显示屏显示初始值;如果有则通过判断调节单价, 单价切换, 参数复位它们的状态, 以分别调用不同的子程序。这些放在硬件系统中就是通过按下各个控制按钮, 如单价上调下调按钮、白天/夜晚切换按钮、复位按钮, 来分别进行不同的指令, 最后液晶显示屏依据输入的信息, 显示不同的数据信息, 从而达到了软件控制硬件, 输入信息控制输出信息的目的。

根据上述步骤设计出的程序具有很强的逻辑性和实用性, 其灵活性高, 可读性强。

4 系统仿真和调试

本设计是在Keil u Vision4软件上对AT89C52单片机进行C语言编程。在Protues软件上进行仿真。

按下硬件系统路程测量电路中的开关, 里程开始上涨, 当公里数小于3km时, 随机挑选某一里程数, LCD显示结果如下:

当公里数超过3km时, 随机挑选某一里程数, LCD显示结果如下:

4 结束语

以AT89S52单片机作为中枢控制元件, 出租车计价器具有精度高、具有灵敏度高、性能可靠、电路简单、外接元件少、成本低、实用性强等特点。能够很好地满足出出租车计价器的要求。

摘要:在中国随着生活水平的提高, 越来越多的人们开始选择乘坐出租车这种既方便又快捷的出行手段。以单片机AT89S52为核心控制元件, 硬件系统包括有复位电路、振荡电路、路程测量电路、按键电路、显示电路等。能够在1602字符型液晶显示屏上显示里程、单价、起步价、总价, 并且可以通过按键调整单价。该文设计的出租车计价器, 其硬件电路所用元件较少, 成本低廉, 调节简单;软件采用C语言编程, 其灵活性高, 可读性强。

关键词:52单片机,出租车计价器,霍尔传感器,1602液晶显示屏,仿真

参考文献

[1]李广弟, 朱月秀, 冷月祁.单片机基础[M].北京:北京航天大学出版社, 2007.

[2]陈丽芳.单片机原理与控制技术[M].南京:东南大学出版社, 2003.

[3]舒涛, 伍远超, 李明.基于AT89S51单片机的出租车计价器系统设计[J].现代电子技术, 2010, 33 (22) :57-59.

[4]刘尧, 白福忠, 兰月政.基于AT89S51单片机出租车计费器的研究[J].测控技术, 2013, 32 (11) :22-25.

[5]翟敏焕.基于单片机的出租车计价器设计[J].现代计算机:专业版, 2014 (1) :64-67.

[6]徐良雄.出租车计价器的设计与分析[J].仪器仪表用户, 2012, 19 (3) :61-63.

[7]郭天祥.51单片机C语言教程[M].北京:电子工业出版社, 2009.

出租车计价器作弊与预防 篇3

出租车计价器作弊与预防

出租汽车计价器是我国计量法中规定的国家强制管理的计量器具,已列入为国家六大重点强制检定计量器具之一.防作弊既是计量监督管理的`内容之一,也是维护强检工作严肃性、维护消费者权益的需要.本文总结了出租车计价器可能被利用的几种技术漏洞,并探讨了防止作弊的措施.

作 者:刘艳平 作者单位:哈尔滨市计量检定测试院,黑龙江,哈尔滨,150036 刊 名:计量与测试技术 英文刊名:METROLOGY & MEASUREMENT TECHNIQUE 年,卷(期): 36(5) 分类号:U4 关键词:出租车计价器   作弊   预防  

单片机出租车计价器源程序 篇4

出租车作为城市交通中独特的交通工具,在城市交通运营中具有不可替代的重要作用。出租车司机最关心计价器的营运数据管理是否方便,而乘客往往最在意出租车计价计费是否合理。为了减少出租车司机和乘客间不必要的误会,设计既能准确计价又能方便使用的计价器显得非常重要。

科技在不断发展,社会在快速进步,出租车计价系统也需不断地得到优化。文中以嵌入式单片机AT89C51为主控MCU,设计多功能出租车智能计价器。此计价器能够按实际情况综合计价,并将乘车用时、行驶里程和乘车费用等重要信息显示出来,具有功能更齐全、系统更稳定、使用更方便等优势。出租车智能计价系统总体设计

利用AT89C51作为单片机核心器件设计的智能计价系统,使用方便、灵敏性好,其强大的控制处理功能和可扩展功能为设计电路提供了很好的选择。利用其I/O端口及其控制的多功能特点,采用按键控制进行分屏显示,实现基本乘车计价和信息显示功能。

在系统硬件设计中,以AT89C51单片机为控制中心,外接A44E霍尔传感器信号采集模块、时钟模块、按键模块、显示模块以及掉电保护存储模块。其中,选用A44E霍尔传感器信号采集模块可将磁感应转换为脉冲信号,从而计测出行车里程;时钟模块采用DS1302芯片,设置标准时钟;掉电存储模块采用AT24C02芯片,以确保掉电时数据自动保存在存储单元;当系统重新上电时,能自动读取数据;按键模块采用四个按键控制,可实现分屏显示功能;显示模块采用8位LED数码管进行显示。系统软件设计

2.1 系统主程序

在主程序模块中,不仅需要完成参量和接口的初始化设计、出租车起步价和单价的设置以及中断、计算等操作,还应设置启动/清除标志、里程以及价格寄存器,并对其进行初始化。最后,为实现寄存器中内容的完整性及精确性,主程序应能分别完成启动、清除、计程及计费等操作。

当出租车起步运行时,计价器同时启动开始计价,根据里程寄存器中的存储数据进行运算并判别行驶路程是否超过起步价的里程。若已超过起步价里程,则根据里程值、单价数和起步价等来综合计算当前的乘车费用;当处于等待时段时,若无脉冲输入,不产生中断,一旦等待时间超过预设时间则会把等待超标费用另加到乘车总费用中,并显示相关信息。

2.2 系统模块程序

系统模块程序主要包括五个服务程序:显示子程序、里程计数中断、定时中断、中途等待中断和按键服务程序。各服务程序介绍如下:

(1)显示子程序。由于采取的是分屏数据显示方式,因此需要用到4 款显示子程序:时、分、秒的显示,金额单价的显示,路程单价的显示以及标准时间的显示。

(2)里程计数中断。霍耳传感器每输出一个低电平信号便中断一次,当里程计数器计满1000个里程脉冲时,便将当前计数送至里程计数中断服务程序,并将当前行车里程及相关数据传至行车里程与乘车费用寄存器中。

(3)定时中断。在定时中断服务程序中,设置一次中断时间为50ms,20 次中断时间为1s,计满1s后将数据送到相应显示单元实时显示。

(4)中途等待中断。在计数状态下霍耳开关无信号输出时,片内定时器启动。等待计时每达到5分钟,就会在当前金额基础上自动加上中途等待费用。等待结束后计价系统自动转换到正常计价程序。

(5)按键服务程序。按键服务采取查询模式,设置在主程序中。当无按键按下时,单片机循环运行主程序;按键被按下,则转向运行相应子程序,并进行其他操作处理。系统仿真与功能实现

3.1 仿真软件Proteus简介

Proteus仿真软件是英国Labcenter Electronics公司设计开发的EDA工具,它不但拥有其它工具软件的仿真功能,而且可仿真微处理器和相关外围设备。Proteus软件功能强大:拥有Proteus电子设计工具,就等同搭建了一个电子设计和分析平台。利用功能强大的Proteus仿真软件,我们可以实现对电路的仿真,以确定方案是否可行,并且可使设计过程流畅。

3.2 电路功能仿真

首先通过Proteus平台搭建电路,然后在KEIL中编写相应代码,并将生成的HEX文件在Proteus平台单片机模型中加载,便可看到仿真效果。系统实验及结果分析

按原理图进行焊接,确保接线无误后。对实物进行调试与实验。实验结果表明,利用AT89C51主控,霍尔传感器进行采集,AT24C02进行掉电存储保护,配以程序,就能较好地实现出租车智能计价功能。结论

单片机出租车计价器源程序 篇5

出租汽车计价器检定装置的扩展不确定度评定

出租汽车计价器标准装置提出一个相对可知的长度基准,与被检车辆中的`计价器显示的数值进行比较后得出检定结果.检定装置在工作中于结构上的因素、采样传感器的因素、环境温度、转数以及人为视觉上反映快慢等原因,都会使检定结果产生误差.例如:主滚轮展开长度L=πD,主滚轮直径D的改变将会影响比对标准长度.下面就以上谈及的各种产生误差的因素进行分析,得出测量结果的扩展不确定度.

作 者:武纪青 作者单位:乌海市产品质量检测所刊 名:现代农业英文刊名:MODERN AGRICULTURE年,卷(期):“”(7)分类号:U4关键词:

上一篇:中班科学月亮船说课稿下一篇:电气工程师练习题

热门文章
    相关推荐