模拟出租车计价器的设计孟清华Word格式文档下载.docx
- 文档编号:16194676
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:16
- 大小:868.54KB
模拟出租车计价器的设计孟清华Word格式文档下载.docx
《模拟出租车计价器的设计孟清华Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《模拟出租车计价器的设计孟清华Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
一、绪言
随着国民经济水平的不断提高出租车行业迅速发展起来,出租车已经成为大众的代步工具,是人们出行的首选,同时出租车计费的准确性与人们的切身利益息息相关备受广大民众的关注。
本设计以单片机AT89C51为核心控制芯片,易于编程且控制简单,而且成本低廉,设计电路简单。
出租车起动后自动计费,上电后显示最初的起步价、里程计费单价、等待时间计费单价;
通过按键可以调节起步价、里程计费单价等待时间计费单价;
同时具有运行、暂停、停止等状态;
可以显示运行时间、暂停时间;
具有累加功能:
暂停和运行时间能够在前一次的状态上计时;
出租车停止后能够显示行驶的总费用及总里程。
二、方案比较与论证
2.1系统整体流程图
2.2出租车计价器的控制方案论证
根据设计要求,可以设想几种控制方案,可以是简单控制,也可以是较复杂的控制。
本设计采用以下出租车计价器的控制方案。
本设计程序的控制采取C语言进行编写,使用Keil uVISION3编译其中的里程计算和费用方案如下:
1、里程计算
(1)霍尔传感器对车轮进行信号检测,产生并输出脉冲信号到单片机;
(2)单片机对传感器输出的脉冲信号进行计算,并进行km计算:
每一个信号代表轮胎旋转一周,设轮胎的周长为1.57m;
每km产生的信号为N,里程显示为N 1.57m=1.57N (km)
2.费用计算
(1)出租车的起步费为10元,3km内不额外计价收费;
(2)出租车行驶3km后,单程2元/km;
(3)当等器待时间超过8分钟后,按每分钟0.5元收费;
(4)暂停时计价暂停计价,不收费用。
2.3单片机的选择方案论证
采用单片机AT89S52芯片
采用Atmel公司的AT89S52单片机作为控制器。
AT89S52是一个低功耗,高性能的51内核的CMOS8位单片机,片内含8k空间的可反复擦些1000次的Flash只读存储器,具有256bytes的随机存取数据存储器(RAM),32个IO口,2个16位可编程定时计数器。
主要性能
1.与MCS-51单片机产品兼容;
2.8K字节在系统可编程Flash存储器;
3.1000次擦写周期;
4.全静态操作:
0Hz-33MHz;
5.三级加密程序存储器;
6.32个可编程I/O口;
7.六个中断源;
8.掉电后中断可唤醒等等。
图2 AT89S52引脚图
2.3单片机最小系统
复位电路和晶振电路是AT89S52工作所需的最简外围电路。
单片机最小系统电路图如图3所示。
图3单片机最小系统
AT89S52
的复位端是一个史密特触发输入,高电平有效。
RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。
在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M
晶振和两个30pF
电容组成系统的内部时钟电路。
三、硬件电路设计
3.1行列式键盘的设计
键盘电路如图4所示。
设计数字键0~9的键号依次为0~9,取消键的键号为10,确认键的键号为11,键号可按键值=行首键号(0、4、8、12)+列键号(0、1、2、3)公式计算。
图4键盘电路
3.2数字显示电路的设计
每位数码管是由8个发光二极管演变而来,其中7个发光二极管构成7笔字形,另一个构成小数点,称为8段LED。
如图5:
图58段数码管
3.3主要元器件选择
主要元器件选用型号和数量如表1所示:
表1主要元器件清单
序号
材料名称
规格型号
数量
元件代号
1
单片机
AT89s52
U1
2
晶振
6MHz
X1,x2
3
电容
30PF
4
C1,C2,C3,C4
4
键盘
4*3
5
数码管
7SEG-MPX6
6
电阻
100
R4,R5,R6,R7
7
发光二极管
D1
8
时钟芯片
DS1032
U3
9
存储芯片
ATC241024
Q2
10
10k
R,R2,R3
四、程序流程图
4.1主程序流程
在主程序模块中,需要完成对各芯片的初始化,各中断的初始化,另外,在主程序中还需要设置启动/清除标志寄存器,里程寄存器和计价寄存器,并对他们进行初始化,然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同操作。
图6主程序流程图
4.2中断子函数
只要定时器计数满就会产生中断50ms中断一次,共计20次,秒钟加1,秒钟计满再分钟加,当分钟加到99时全部清零。
以下是中断子函数的流程图如图7所示。
图7中断子函数流程图
4.3里程计算、计价单元的设计
里程计算是通过安装在车轮上的霍尔传感器检测到的信号,送到单片机,经过处理送给显示器的。
其原理图如图8
图8传感器测距原理图
五、模拟出租车计价器仿真
在完成了出租车计价器硬件设计和软件设计以后,就进入了系统的调试阶段。
采用keilc51编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作。
硬件电路制作完毕,用万用表检测有无电路短路、开路等现象,确定电路没问题后,用仿真头与硬件电路相连接,运行程序进行调试。
5.1Keil调试
图9Keil调试
5.2Proteus调试
图10Proteus调试
六、结束语
通过这次课程设计,使我得到了一次用专业知识和专业技能去分析问题、解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及用c语言设计程序的思路技巧等方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
七、参考文献
[1]张迎新,等.单片机初级教程[M].北京:
北京航空航天大学出版社,2006.8
[2]王化祥,张淑英.传感器原理及应用[M].天津:
天津大学出版社,2007.2
[3]张迎新,等.单片微型计算机原理、应用及接口技术[M].修订版.北京:
国防工业出版社,2004.
[4]王幸之,等.AT89系列单片机原理及接口技术[M].北京:
北京航空航天大学,2004.
[5]李伟提,郭强.液晶显示应用技术[M].北京:
电子工业出版社,2000.
[6]孙传友,等.测控电路及装置[M].北京:
北京航空航天大学出版社,2002.
[7]王明泉,等.信号与系统[M].北京:
科学出版社,2008.
[8]李明生,等.电子测量仪器与应用[M].北京:
电子工业出版社,2011.11
[9]王成安,等.电子测量技术与实训简明教程[J].北京:
科学出版社,2007.
[10]孙焕根.电子测量与智能仪器[J].杭州:
浙江大学出版社,1992.
附录1、系统原理图
图11系统原理图
附录2、总电路图
图12总电路图
附录3、C语言程序设计
/*晶振:
11.0592MT1-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"
unsignedchardatacnt_30,cnt_distance,cnt_cost;
unsignedintdataT1_cnt,D_cnt;
unsignedchardatakey_val,key_val_old;
unsignedchardatastate_val;
charcodecost_val[3]={1,2,1};
charcode
led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//led_seg_code[0-9]代表0-9
//-------延时-----------------
voiddelay(unsignedinti)//延时
{while(--i);
}
//-------初始化变量------------------
voidinit_variant()//初始化一些变量的内容
{unsignedchari;
cnt_30=0;
//30秒的计时
D_cnt=0;
//脉冲的个数
cnt_distance=0;
//距离的计数
cnt_cost=0;
//保存总价格
}
//-------扫描键盘-----------------
unsignedcharscan_key()
{unsignedchari,k;
i=P1;
if(i==0xff)
{k=255;
}//无键按下
else//有键按下
{delay(10);
//延时去抖动
if(i!
=P1)
{k=255;
else
{switch(i)
{case0xfe:
k=0;
break;
//P1.0按下,启动键
case0xfd:
k=1;
//P1.1按下,清除键
case0xfb:
k=2;
//P1.2按下,切换键
returnk;
//-------数码管动态扫描-------------
voidled_show()
{unsignedchari,k;
//-----显示单价----
k=cost_val[state_val];
i=k%10;
//暂存个位
P0=led_seg_code[i];
P2=0xbf;
delay(10);
i=k%100/10;
P2=0x7f;
//-----显示距离------
k=cnt_distance;
P2=0xf7;
P2=0xef;
//-----显示总价格-----------
k=cnt_cost;
P2=0xfe;
P2=0xfd;
//-------计时----------------
voidtimer1()interrupt3//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;
=255)
{switch(key_val)
{case0:
//启动键
TR1=1;
//启动计时,TR1=1为启动了的标志
break;
case1:
//清除键
//清除变量
//关闭定时器
case2:
//白天/黑夜的切换
if(state_val==0)
{state_val=1;
{state_val=0;
if(IE0==1&
&
TR1==1)//每来1个脉冲,中断一次
{IE0=0;
//30秒的计时清零
if(D_cnt<
100)
{D_cnt++;
else//计数100次,每次10米,表示一公里
{D_cnt=0;
cnt_distance=cnt_distance+1;
cnt_cost=cnt_cost+cost_val[state_val];
led_show();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟出租车计价器的设计 孟清华 模拟 出租车 计价器 设计 清华
![提示](https://static.bdocx.com/images/bang_tan.gif)