片机出租车计价器的设计

上传人:阳*** 文档编号:152189426 上传时间:2022-09-15 格式:DOCX 页数:24 大小:712.79KB
收藏 版权申诉 举报 下载
片机出租车计价器的设计_第1页
第1页 / 共24页
片机出租车计价器的设计_第2页
第2页 / 共24页
片机出租车计价器的设计_第3页
第3页 / 共24页
资源描述:

《片机出租车计价器的设计》由会员分享,可在线阅读,更多相关《片机出租车计价器的设计(24页珍藏版)》请在装配图网上搜索。

1、 单片机原理及系统课程设计专 业: 班 级: 姓 名: 学 号: 指导教师: 评语:平时(40)修改(30)报告(30)总成绩兰州交通大学自动化与电气工程学院2012 年 7月 1日目 录1 出租车计价系统的设计要求与设计方案31.1 基本设计要求31.2 性能指标31.3 显示功能32 出租车计价器系统的硬件设计42.1 出租车硬件框图42.2 AT89C52单片机42.3 总设计图53 出租车计价器系统整体程序流程74 设计体会与小结8参考文献9附录101.子函数101.1中断子函数101.2 按键判断方式111.3 LCD1602显示的判断112 源程序132运行图示232.1 初始状态

2、232.2 运行状态231 出租车计价系统的设计要求与设计方案1.1 基本设计要求本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价,等待时间计费单价。同时具有运行,等待,暂停等状态,可以显示暂停的时间。出租车停止后能够显示行驶的总费用。1.2 性能指标费用的计算是按行驶里程收费。设起步价为7.00元。1、当里程3km时,每公里按1.7元计费3、等待累计时间2min时,按1.5元/min计费1.3 显示功能1、显示行驶里程:用两位数字显示,显示方式为“XX”,单位为km。计程范围0-99km,精确到1km。2、显示等候时间:用两位数字

3、显示,显示方式为“XX”,单位为min。计时范围0-59min,精确到1min。3、显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。计价范围0-999.9元,精确到0.1元。2 出租车计价器系统的硬件设计2.1 出租车硬件框图图2-1系统的硬件框图2.2 AT89C52单片机图2-2 AT89C52引脚配置2.3 总设计图AT89C52的时钟电路是单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。 AT89C52的按键复位操作有两

4、种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。 显示电路对于现实电路我们可以采用数码管,也可以采用液晶显示,液晶又分字符型和点阵型,我们使用的液晶是字符型液晶,并且带字符库的,不需要查找代码。英文字符就可。液晶电路使用时,如果发现

5、液晶不亮可以调节连接液晶的点位器,改变液晶的亮度。 霍尔传感器里程计算是通过安装在车轮旁的霍尔传感器检测到的信号,送到单片机,经处理计算,送给显示单元的。而由于本次实验室的局限不能利用霍尔传感器,所以我们利用按键来代替霍尔传感器,通过按一次键代表汽车行驶了1公里,当在行驶过程中,停止按键代表行驶进入了等待时间。 运行状态指示电路本设计采用发光二级管对运行方式进行指示,可清楚看到计价器的运行状态。3 出租车计价器系统的软件设计3.1 系统整体程序流程图3-1 主流序流程图4 设计体会与小结出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能,并能够通过LCD显示车

6、费数目。本款出租车计价器包括单价输出、单价调整、显示当前的系统时间等功能。同过了2周的课程设计让我学会了很多的东西。经过自己努力,基本上完成了设计要求的内容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。学会了怎么去查找些资料,把所找到的东西与自己的问题所结合起来并给予解决。这次设计很好的把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁,只有这样

7、才能让自己进一步的去学会新的东西和知识。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。书上学来中觉潜,只有实践与理论的结合才能让自己学会跟多的东西掌握更多的理论。参考文献1 李群芳,张士军,黄建.单片微型计算机与接口技术.北京:电子工业出版 ,2008.2丁元杰、吴大伟单片微机实题集与实验指导书M机械工业出版社, 20043张友德,赵志英,涂时亮. 单片微型机原理、应用与实验. 上海:复旦大学出版社 2005,12.4胡辉,单片机原理及应用设计21世纪高等院校规划教材M,水利水电

8、出版社,2005.7;5张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,1999.6李广弟,朱月秀,冷祖祁.单片机基础M.第3版.北京航空航天大学出版社,2007年1月附录1.子函数1.1中断子函数于中断程序,只要定时器计数满就会产生中断50ms中断一次,共计20次,秒钟加1,秒钟计满再分钟加,当分钟加到99时全部清零。以下是中断子函数的流程图如图3-2所示:图3-2中断子程序流程图1.2 按键判断方式对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,在判键释放,最后执行键功能程序。判键子函数的流程框图如图3-3所示图3

9、-3按键判断程序流程图1.3 LCD1602显示的判断1602液晶是字符型液晶,它的内部自带字符库,它可以写两行的字符,同时每行可以写40个字符,在写显示程序的时候,我们先写命令,再设定字符显示,最后写数据,在每写一次命令或数据都需要判断液晶是否忙。液晶显示程序流程图如图3-4所示3-4 LCD1602A显示子程序2 源程序#include#define uchar unsigned char#define uint unsigned int /*定义1602读写使能端口*/sbit rw=P21;sbit rs=P20;sbit en=P22;sbit b=P07;sbit gl=P10;v

10、oid lcd_init(); /lcd设置函数void wr_com(uchar command); /命令函数void wr_data(uchar data0); /数据函数void lcd_clear(); /清屏函数void lcd_set(); /屏幕设置函数void busy(); /测忙函数void display(); /启动前显示函数void printstring(uchar *s);void display1(); /启动后显示函数void key1();/启动前按键sbit K=P30;sbit K1=P31;sbit K2=P35; /开始计价sbit K3=P33;

11、 /模式选择(行程/等待)sbit K4=P34;/复位sbit g=P27; sbit aa=P23; /运行sbit bb=P24; /等待sbit cc=P25; /暂停/sbit led_run=P30;/sbit led_await=P31;/sbit led_stop=P32;bit f_start;bit jump_in;bit jump_out;void key(); /启动后按键/*定义液晶显示地址数组*/uchar code table=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x70;uchar dispbuf=

12、0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar dispbuf1=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar v,v1; uchar i,m=0;void init();void chuli();void chuli1();void delay(uchar t); /延时函数void clear(); /终止函数void set(uchar x);void set1(uchar y); uchar command;uchar count,count1;uchar second,minite,second1,minite1;unsigned i

13、nt tt,tt1;unsigned char value1=70,value2=17,value3=15; /value1=起步价,value2=超出每公里价格,value3=等待价格unsigned int money; void main()/ Init_Timer1();/定时器中断函数 EX0=1;/开外部中断0 IT0=1;/采用跳变沿触发方式 init(); lcd_init(); while(1) key1();chuli(); display(); if(jump_in=1) jump_in=0; lcd_init(); while(1) key(); chuli1(); d

14、isplay1(); if(jump_out=1) lcd_init(); jump_out=0; clear(); break; void clear() TR0=0; TR1=0; money=0; second=0; second1=0; minite=0; minite1=0; value1=70; value2=17; value3=15; / led_run=1; /led_await=1; / led_stop=1; v=0; v1=0; for(i=0;i15;i+) dispbufi=0; dispbuf1i=0; m=0;void init()/中断定时 TMOD=0x11

15、; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET0=1; ET1=1; EA=1; TR0=0; TR1=0;void t0_(void) interrupt 1 using 0 /中断1模式0 用来计时 秒、分 count+; if(count=20) count=0; second+; if(second=60) second=0;minite+;if(minite=99) minite=0; TH0=(65536-50000)/256; TL0=

16、(65536-50000)%256; dispbuf10=m/10; dispbuf11=m%10; dispbuf12=second/10; dispbuf13=second%10;void t1_(void) interrupt 3 using 3 /中断3模式3用来计时 秒、分 count1+; if(count1=20) count1=0; second1+; if(second1=60) second1=0;minite1+;if(minite1=99) minite1=0; TH1=(65536-50000)/256; TL1=(65536-50000)%256; dispbuf1

17、4=minite1/10; dispbuf15=minite1%10; dispbuf16=second1/10; dispbuf17=second1%10; void lcd_init() wr_com(0x3c); wr_com(0x06); wr_com(0x0c); wr_com(0x01);void wr_com(uchar command) /命令 busy(); rs=0; rw=0; P0=command; en=1; en=0;void wr_data(uchar data0) /数据 busy(); rs=1; rw=0; P0=data0; en=1; en=0;void

18、 busy() /测忙函数 while(1) en=0; rs=0; rw=1; P0=0xff; en=1; if(b!=1)break; en=0;void chuli() /分离出百位十位个位 dispbuf0=value1/100%10; dispbuf1=value1/10%10; dispbuf2=value1%10; dispbuf3=value2/100%10; dispbuf4=value2/10%10; dispbuf5=value2%10; dispbuf6=value3/100%10; dispbuf7=value3/10%10; dispbuf8=value3%10;

19、void display() /初始显示函数 set(0); printstring(step :); wr_data(tabledispbuf0); wr_data(tabledispbuf1); printstring(.); wr_data(tabledispbuf2); set(16); printstring(mileage :); wr_data(tabledispbuf3); wr_data(tabledispbuf4); printstring(.); wr_data(tabledispbuf5); set1(0); printstring(await :); wr_data(

20、tabledispbuf6); wr_data(tabledispbuf7); printstring(.); wr_data(tabledispbuf8); set1(16); printstring(run : ); wr_data(tabledispbuf10); wr_data(tabledispbuf11); printstring(:); wr_data(tabledispbuf12); wr_data(tabledispbuf13);void chuli1() if(f_start=1) tt=minite*60+second; tt1=minite1; if(m3) money

21、=value1+value2*(m-3)+value3*tt1; else if(f_start=0) money=0; dispbuf18=money/100%10; dispbuf19=money/10%10; dispbuf110=money%10;void display1() /运行后显示函数 set(0); printstring(run: );/ wr_data(tablem);wr_data(tabledispbuf10);wr_data(tabledispbuf11);/ printstring(:);/ wr_data(tabledispbuf12);/ wr_data(t

22、abledispbuf13); set(14); printstring(await:); wr_data(tabledispbuf14); wr_data(tabledispbuf15); printstring(:); wr_data(tabledispbuf16); wr_data(tabledispbuf17); set1(0); printstring(sum is: ); wr_data(tabledispbuf18); wr_data(tabledispbuf19); printstring(.); wr_data(tabledispbuf110);void printstrin

23、g(uchar *s) /输出显示函数 while(*s) wr_data(*s+); void key() /启动按键 if(K3=0) delay(50); /延时消抖动if(K3=0) while(K3=0); v1+; if(v1=4) v1=1; switch(v1) case 1:f_start=1;TR0=1;TR1=0;/*led_run=0;led_await=1;led_stop=1*/;aa=0;bb=1;cc=1;break; /运行case 2:TR0=0;TR1=1;/*led_run=1;led_await=0;led_stop=1*/;aa=1;bb=0;cc=

24、1;break; /等待case 3:TR0=0;TR1=0;/*led_run=1;led_await=1;led_stop=0*/;aa=1;bb=1;cc=0;break;/暂停 if(K4=0) /跳出运行 delay(50); if(K4=0) while(K4=0); jump_out=1; void delay(uchar t) while(-t);void set(uchar x) command=0x80+x; wr_com(command);void set1(uchar y) command=0xc0+y; wr_com(command);void key1() /初始调

25、节按键 if(K=0) delay(100); if(K=0) while(K=0); v+; if(v=4) v=0; switch(v) case0:break; case 1:if(K1=0)while(K1=0);value1=value1+10;break; case2:if(K1=0)while(K1=0);value2=value2+5;break; case 3:if(K1=0)while(K1=0);value3=value3+5;break; if(K2=0) delay(50); if(K2=0) while(K2=0); jump_in=1; void mode( ) interrupt 0 /外部中断0控制选位 m+;2运行图示2.1 初始状态2.2 运行状态- 23 - / 24

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!