基于单片机的出租车计价系统设计 论文.doc

上传人:仙人指路1688 文档编号:3939849 上传时间:2023-03-28 格式:DOC 页数:27 大小:84KB
返回 下载 相关 举报
基于单片机的出租车计价系统设计 论文.doc_第1页
第1页 / 共27页
基于单片机的出租车计价系统设计 论文.doc_第2页
第2页 / 共27页
基于单片机的出租车计价系统设计 论文.doc_第3页
第3页 / 共27页
基于单片机的出租车计价系统设计 论文.doc_第4页
第4页 / 共27页
基于单片机的出租车计价系统设计 论文.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《基于单片机的出租车计价系统设计 论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的出租车计价系统设计 论文.doc(27页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)题目 出租车计价系统设计 专业班级 计算机通信工程08级 学号 姓名 指导教师姓名 指导教师职称 讲师 2011年 12 月 2 日摘 要摘 要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。 而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。而采用单片机进行的设计,相对

2、来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程就可以轻易而举的实现。避免了机械开关带来的不稳定因素。关键词: 出租车计价器; 单片机 ; 控制ABSTRACTAbstract: Taximeter is both passengers and drivers of the transaction criteria, it is the taxi industry an important symbol, a taxi is the most important tools. It rel

3、ates to the interests of both transactions. Has a good performance regardless of the meter is a vast number of taxi drivers or passengers are very necessary. Therefore, the car meter is also very much a study of value. The use of analog circuits and digital circuit design of the meter as a whole cir

4、cuit of a larger scale, using the device, a failure rate is high and difficult to debug, the pattern of switching need to use mechanical switches, mechanical switch will cause a long-time contacts Bad, functions not easy to achieve. SCM used for the design, a relatively powerful, with less hardware

5、and appropriate software can easily coordinate with each other to achieve the design requirements, flexibility and strong, can be programmed by software to complete more of the additional Function. Pricing model for the switch, software programming and can easily cite the achievement. To avoid a mec

6、hanical switch the destabilizing factors.Keywords: Taximeter ; 89 S51 MCU ; control目 录摘要 .第 1章 引言 .1. 1 出租车计价器概述 .1. 2 本设计任务 . 1.2.1 设计任务 . 1.2.2 设计要求 .1. 3 系统主要功能 .第2章 系统主程序设计 .第3章 定时中断程序设计.第4章 中断服务程序设计.4. 1 里程计数中断服务程序. 4. 2 中断等待服务程序概述.第5章 键盘服务程序设计 .第6章 显示子程序服务程序设计.第7章 设计源程序 .致谢.参考文献.第1章 引 言本次课程设计利

7、用单片机技术来实现一台多功能出租车计价器,具有性能可靠、电路简单、成本低等特点。1.1 出租车计价器概述计价器显示的营运金额是营运里程与价格的函数(等候时间一般折算成一定比例的里程来计算)。出租车计价器通过传感器与行驶车辆连接。出租汽车的实际里程通过传感器的脉冲信号在计价器里折算成一定的计价营运里程。目前市场上出租车计价器功能主要有具有数据的复位功能、白天/晚上转换功能、数据输出功能、计时计价功能等等,但能够进行语音播报数据信息的出租车计价器还是比较少见的,针对这一点我们来设计一款多功能出租车计价器,在原有功能的基础上增加单价输出、单价调整、路程输出、显示当前的系统时间、语音播报数据信息等功能

8、。1.2 本设计任务1.2.1 设计任务 设计一款基于AT89S51单片机,霍尔传感器的出租车计价器。1.2.2 设计要求1 不同情况具有不同的收费标准。l 白天l 晚上l 途中等待(10min 开始收费)2能进行手动修改单价。3具有数据的复位功能。(1) IO 口分配的简易要求。l 距离检测使用霍尔开关A44El 白天/晚上收费标准的转换开关l 数据的清零开关l 单价的调整(最好使用和按键)(2) 数据输出(采用LCM103)。l 单价输出 2 位l 路程输出 2 位l 总金额输出 3 位4.按键。l 启动计时开关l 数据复位(清零)l 白天/晚上转换1.3 系统主要功能 本课程设计所设计的

9、出租车计价器的主要功能有:数据的复位、白天/晚上转换、数据输出、计时计价、单价输出及调整、路程输出、语音播报数据信息、实现在系统掉电的时候保存单价和系统时间等信息等功能。输出采用8 段数码显示管。本电路设计的计价器不但能实现基本的计价,而且还能根据白天、黑夜、中途等待来调节单价,同时在不计价的时候还能作为时钟为司机同志提供方便。 第2章 系统主程序设计2.1 初始化程序系统上电时,初始化程序将R1R5储存单元清0.2.2 主程序主程序中通过循环判断是否等待计价和车轮计数进行总体计价的实现。在等计价中,调用等待计价子程序,每4秒调用计数子程序对计数器加1,在车轮计中,车轮每转过1周调用计数子程序

10、对计数器加1。通过计数器中的累加值,判断数值并调用显示。计数子程序是通过对工作寄存器的循环累加实现的。 秒定时子程序通过2000循环调用定时器的2毫秒定时实现,对应调用相应子程序。 码管显示子程序通过动态扫描实现。 毫秒定时是通过软件延时来实现的。系统初始化后,判断P1.1口,是否等待计价.若是则进入等待计价处理,若否,则进入下一步,判断是否进行车轮计数,若没有进行车轮计数则返回等待计价处理,若进行车轮计数,则由计数器加1,然后判断计数器是否加到50,若不到50,则由数码管显示,若到了50则由到50方式处理,最后由数码管显示计算的价钱。2.3 主程序流程图开始初始化是否等待计价是否车轮计数计数

11、器加1是否计数到50到50处理不到50处理数码管显示等待计价处理是否否否是是第3章 定时中断程序设计 3.1 程序概述在定时中断服务程序中,每100ms 产生一次中断,当产生10 次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。3.2定时中断程序流程图开始保护现场重置计数初值否中断10次?是数据送显示缓冲单元调用显示子程序恢复现场并中断返回 定时中断服务程序第4章 中断服务程序设计4.1里程计数中断服务程序概述每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000 次时,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前

12、行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中4.2中断等待服务程序概述当在计数状态下霍尔开关没有输出信号,片内的T1 定时器便被启动,每当计时到达10分钟,就对当前金额加上中途等待的单价,以后每十分钟都自动加上中途等待的单价。当中途等待结束的时候,也就自动切换到正常的计价。第5章 键盘服务程序设计5.1键盘服务程序概述键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。第6章 显示子程序服务程序设计6.1显示子程序服务程序概述由于是分屏显示数据,所以就要用到4 个显示子程序,分别是:时分秒显示子程序(H

13、MS_DIS)、金额单价显示子程序(CP_DIS)、路程单价显示子程序(DP_DIS)、单价调节子程序(PA_DIS)。第7章 设计源程序#include#include#include #include #define uchar unsigned char#define uint unsigned int/* DS12887实时时钟时间地址设置 */#define second XBYTE 0x6000 /* 秒寄存器地址 */#define sec_alarm XBYTE 0x6001#define minute XBYTE 0x6002 /* 分寄存器地址 */#define min_

14、alarm XBYTE 0x6003#define hour XBYTE 0x6004 /* 小时寄存器地址 */#define week XBYTE 0x6006 /* 星期寄存器地址 */#define date XBYTE 0x6007 /* 日期寄存器地址 */#define month XBYTE 0x6008 /* 月寄存器地址 */#define year XBYTE 0x6009 /* 年寄存器地址 */#define rega XBYTE 0x600A /* A寄存器地址 */#define regb XBYTE 0x600B /* B寄存器地址 */#define regc

15、 XBYTE 0x600C /* C寄存器地址 */#define regd XBYTE 0x600D /* D寄存器地址 */* RT12864HZ汉字图形点阵液晶地址设置 */#define w_c_add XBYTE0x2070 /* 写命令字地址 */#define w_d_add XBYTE0x2071 /* 写数据地址 */#define r_s_add XBYTE0x2072 /* 读状态字地址 */ #define r_d_add XBYTE0x2073 /* 读数据地址 */#define COM XBYTE0x2021 /*8279命令口 */#define DAT XBY

16、TE0x2020 /*8279数据口 */ #define L 1 /*长度系数 */#define TI 50 /*分度数 */#define HN 30 /*孔个数 */ #define LOW 30 /*最低速度 */uchar xdata key; /*键值 */uint idata num=0; /*计数值 */ uint xdata a=1,b=0; /*单价 */uint idata len,fa; /*路程 费用中间参数*/uint idata COUT; /*低速计数*/uint idata h1,h2,m1,m2,s1,s2; /*时钟参数*/ uint idata pri

17、ce=10,fate=00,length=0,leng; /*显示参数*/uint idata m,n,o,p,q,r,s,t; /*显示中间参数 */uint idata state=0,clear=1,begin=0,pri,tim,tt=0,cc=0;nn=0;/*几个状态标志位*/ /*设置,清除,开始计价,单价修改,时间修改,两位数监视,六位数监视,数字标志*/unsigned char bdata status; /* lcd可位寻址片内数据存储器,允许位与字节混合访问 */sbit busy=status7; /*lcd“忙”线的第7位*/uchar bdata sta_8279

18、; /*8279*/sbit du=sta_82797; /* 8279方式设置命令字 */unsigned char rflag; unsigned char bdata sta_ds; sbit uip=sta_ds7; uchar ds_h,ds_m,ds_s,ds_t; unsigned char bdata ds_time; unsigned char code NO10=0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9;/* 09LCD*/uchar code tab16=0x3f,0x06,0x5B,0x4F,0x66,0x6D,

19、0x7D,0x07,0x7F,0x6F, 0x71,0x7C,0x39,0x73,0x31,0x71;/* 0F的字型编码*/*LCD显示数组 第一行为时钟占用*/uchar xdata hz216=0xB5,0xA5,0xBC,0xDB,0xA3,0xBA,0x20,0x20,0x20,0x20, /* 单 价 : 空 空 */ 0xA3,0xB0,0xA3,0xB0,0xD4,0xAA; /* N N 元 */ uchar xdata hz316=0xBE,0xE0,0xC0,0xEB,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0, /* 距 离 : 空 N */ 0xA3,

20、0xB0,0xA3,0xB0,0x4B,0x4D; /* N N k m */uchar xdata hz416=0xBC,0xDB,0xC7,0xAE,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0, /* 价 格 : N N */ 0xA3,0xB0,0xA3,0xB0,0xD4,0xAA; /* N N 元 */ uchar xdata hz516=0x20,0x20,0xCA,0xE4,0xC8,0xEB,0xC1,0xBD,0xCE,0xBB, /* 空 输 入 两 位 */ 0xB5,0xA5,0xBC,0xDB,0x20,0x20; /* 单 价 空 */uchar

21、xdata hz616=0x20,0x20,0x20,0x20,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0, /* 空 空 : N N */ 0xD4,0xAA,0xA3,0xAF,0x4B,0x4D; /* 元 / k m */ void initial (void); /*初始化子程序*/void delay(void); /*延时子程序*/void check_lcd(void); /*LCD设置子程序*/void show_lcd(uchar *,uchar *,uchar *); /*LCD显示子程序*/void lcd_busy(void); /*LCD忙状态检测函

22、数 */void compute(void); /*路程 费用数字位拆分子程序*/void change_pri(void); /*单价修改子程序*/void change_time(void); /*时间修改子程序*/void clock(void); /*时钟显示子程序*/void check_ds12887(void); /*时钟设置子程序*/main() /*主函数*/ uint inf=0; /*第一次标志位*/ initial(); show_lcd(hz2,hz3,hz4); while(1) clock(); if(begin=1)/开始计价 if(inf=0) fate=20

23、; /第一次加上起价费 inf=1; if(state=0) /不是设置状态 if(num=LOW) /大于最低速度 COUT=0; /低速计数清零 price=a*10+b; /单价 len+=num*L/HN; /本次路程加上上次剩余 if(len/TI=0) /达到千位 leng=len/TI; /千位增加 len%=TI; /去除千位 fa=leng*price; /临时费用 length+=leng; /全部路程 leng=0; fate+=fa; /全部费用 else if(COUT)=60)/低速计数 length+; fate+=(10*a+b); COUT=0; comput

24、e(); /将数字按位拆分 用以显示 show_lcd(hz2,hz3,hz4); else /设置状态 调用修改子程序 if(pri=1) change_pri(); if(tim=1) change_time(); if(clear=1) /清零 length=0; fate=0; inf=0; COM=0xd1; /* 清除LED显示*/ compute(); show_lcd(hz2,hz3,hz4); if(pri=1) change_pri(); if(tim=1) change_time(); /while(1)/main /*以下是子程序代码(包括中断)*/void keybo

25、rd(void) interrupt 0 using 1 /*按键中断服务程序*/ uchar keyboard=0; EX0=0; /关中断 COM=0x50; keyboard=DAT; keyboard &=0x0f; /* 保留低四位 */ switch(keyboard) /键值转换为可用数据 并且修改相应标志位 case 0x0: key=0; tt+;nn=1;cc+; break; case 0x1: key=1; tt+;nn=1;cc+; break; case 0x2: key=2; tt+;nn=1;cc+; break; case 0x3: key=3; tt+;nn

26、=1;cc+; break; case 0x4: key=4; tt+;nn=1;cc+; break; case 0x5: key=5; tt+;nn=1;cc+; break; case 0x6: key=6; tt+;nn=1;cc+; break; case 0x7: key=7; tt+;nn=1;cc+; break; case 0x8: key=8; tt+;nn=1;cc+; break; case 0x9: key=9; tt+;nn=1;cc+; break; case 0x0B: key=11; begin=1;clear=0;nn=0;break; /*B begin*

27、/ case 0x0C: key=12; clear=1;begin=0;nn=0;break; /*C clear*/ case 0X0D: key=13; state=1;pri=1;tim=0;nn=0;break; /*D set price*/ case 0x0E: key=14; state=1;tim=1;pri=0;nn=0;break; /*E set time*/ default: key=15; nn=0;break; /*F finish*/ keyboard=tabkeyboard; /按键后 在LED上显示 if(pri=1) if(nn=0) /字母 是功能键 在

28、第一位上显示 COM=0x80+8; else /数字 在后面依次显示 COM=0x80+4+tt; if(tim=1) if(nn=0) COM=0x80+8; else COM=0x80+1+cc; DAT=keyboard; EX0=1; /开中断void clockserve() interrupt 2 using 2 /*时钟中断服务程序*/ unsigned char temp2;COUT+: /低速计数加一EX1=0; /关中断rflag=1;sta_ds=rega; /取数据 (小时、分钟、秒)while(uip);ds_h=hour;ds_m=minute;ds_s=seco

29、nd;temp2=regc;rflag=0;EX1=1; /开中断void timer(void) interrupt 3 using 3 /*定时器中断服务程序*/ TR1=0; TR0=0; /关定时器 关中断 num=TH0*256+TL0; /取计数值 TH0=0; /计时器清零 TL0=0; TH1=-(50000/256); /重新赋定时常数 TL1=-(50000%256); TR1=1; TR0=1; /开定时器 开中断void initial(void) /*初始化子程序*/ COM=0xd1; /* LED设置 : 清除显示*/ ACC=DAT; if(ACC1); /* P奇偶标志。若值为1的位数为奇数,则P置位,否则清除 */ COM=0x00; /* 8字符显示左入口 */ COM=0x34; /* 34次分频*/ TMOD=0X15; /定时/计数器置标志位 TH0=0; TL0=0; /计数器清零 TH1=-(50000/256); TL1=-(50000%256); /定时常数赋初值 TR0=1; TR1=1; /开定时器 计数器 EA=1; /开中断 EX0=1; EX1=1; ET1=1; check_ds12887(); /时钟初始化 void delay(void) /*延时子程序*/ unsigned char i,j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号