毕业论文-基于单片机的出租车计价系统设计.doc
《毕业论文-基于单片机的出租车计价系统设计.doc》由会员分享,可在线阅读,更多相关《毕业论文-基于单片机的出租车计价系统设计.doc(21页珍藏版)》请在三一文库上搜索。
1、单片机原理及系统课程设计报告基于单片机的出租车计价系统设计1 设计目的,要求和设计方法1.1设计目的(1) 学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调适能力,进一步提高综合运用所学知识和设计能力的的目的。(2) 掌握C语言程序设计方法。(3) 培养实践技能,提高分析和解决实际问题的能力,并具备一定程度的设计能力。1.2基本设计要求本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价,等待时间计费单价。同时具有运行,等待,暂停等状态,可以显示暂停的时间。出租车停止后能够显示行驶的总费用。1.
2、3性能指标 1、费用的计算是按行驶里程收费。设起步价为7.00元。2、当里程3km时,每公里按1.7元计费。4、等待累计时间2min时,按1.5元/min计费。1.4显示功能1、显示行驶里程:用两位数字显示,显示方式为“XX”,单位为km。计程范围0-99km,精确到1km。2、显示等候时间:用两位数字显示,显示方式为“XX”,单位为min。计时范围0-59min,精确到1min。3、显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。计价范围0-999.9元,精确到0.1元。1.3 设计方法 本设计采用AT89C51单片机为主控器,并用开关或者频率信号发生器模拟车速,利用AT89
3、C51的定时器工作在方式1下定时实现对出租车的计时及计价设计,输出采用LCD液晶显示屏显示。2 设计方案及原理2.1 设计方案本设计,利用单片机丰富的端口和控制的灵活性,采用AT89C51单片机为主控器,并用开关或频率信号发生器模拟车速,通过石英振荡器,LCD液晶显示和发光二级管以及单片机内部程序构成完整的出租车计价系统,基本可以实现了按运行状态计价的功能,价格调整功能。2.2 设计原理出租车计价是根据车所行驶的路程以及乘客乘车的里程综合决定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。通过计数接收到的脉冲个数,计算出当前所行驶的路
4、程。同时,通过LCD液晶显示器显示当前的行驶里程、等待时间和需支付的车费。出租车计价器用于记录里程、起步公里数与价格的关系。模拟出租车计价器能根据总里程数、起步公里数的情况作出相应报价等。3 出租车计价器系统的硬件设计3.1 出租车硬件框图图2-1系统的硬件框图3.2 出租车计价器硬件连接图AT89C51的最小系统:时钟电路是单片机内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取30pF)。这样就构成一个稳定的自激振荡器。复位操作是按键复位,按键复位具有上电复位功能外,若要复位,只要按图中的RE
5、SET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。AT89C51的最小系统硬件图如图3.2(a)所示。图3.2(a) AT89C51的最小系统硬件图液晶显示和LED灯指示电路:显示电路对于现实电路我们采用液晶显示,液晶又分字符型和点阵型,我们使用的液晶是字符型液晶,并且带字符库的,不需要查找代码,英文字符就可以。运行状态指示电路采用发光二级管对运行方式进行指示,可清楚看到计价器的运行状态。液晶显示和LED灯指示电路如图3.2(b)所示。图3.2(b) 液晶显示和LED灯指示电路 按键电路:按键电路是通过按键去调节初始选择、调节,模式选择,开始运行,终止等功能。霍尔传感
6、器里程计算是通过安装在车轮旁的霍尔传感器检测到的信号,送到单片机,经处理计算,送给显示单元的。而由于本次实验室的局限不能利用霍尔传感器,所以我们利用按键来代替霍尔传感器,通过按一次键代表汽车行驶了1公里,当在行驶过程中通过按键来选择运行状态。按键电路如图3.2(c)所示。图3.2(c) 按键电路4 出租车计价器系统的软件设计4.1系统流程图出租车计价器系统流程图如附录1所示。4.2源程序代码 根据设计的要求,在本系统中主要有主程序和延时程序,主程序中包括中断服务程序和键盘显示子程序、计算子程序等。现在应用更广泛的是单片机C语言,因其简单明了,故此次课程设计采用单片机C语言编程。程序源代码如附录
7、2所示。4.3程序调试域运行结果在Keil C51 uvision4中对系统建立项目,选定合适的单片机AT89C51,创建一个计价器的新文件,并将上述的源程序进行编辑和选项操作进行编译,以生成计价器的HEX文件。5 系统仿真及实际调试5.1运行图示仿真开始后,首先按动初始选择按钮, 则可以在运行单价,等待单价,起步价之间切换,每按一次切换一个量,选定后可以按动初始调节按钮进行调节,调节完成后,按下开始运行按钮则开始运行,选择运行模式后开始计费,不同的运行模式会有不同的指示灯亮起,在运行过程中液晶屏会随时显示走过的路程和等待的时间,以及总的费用。仿真图如附录3所示。5.2仿真问题分析问题需要改进
8、,例如本设计经过多次的调试与改正,最终达到了设计方案中的结果。在仿真试验中各种设计要求都能够得到验证。但由于设计的原因,本系统仍然总在一些自动化程度不够,运行模式还需要手动选择。6 总结出租车计费器系统的设计已经全部完成,能利用AT89C51单片机对出租车启动,停止,暂停等运行状态进行选择和显示,能将单价和费用适时通过LCD显示出来。本款出租车计价器包括单价输出、单价调整、显示当前的总费用等功能。虽然达到了基本的设计目的,但仍然存在一些问题,策划的不够全面,对单片机不够熟悉,系统编写不够简洁完善,使得计价器计费不够细致,不够人性化。经过这次课程设计让我学会了很多的东西。经过自己努力,基本上完成
9、了设计要求的内容,在系统可行性分析、原理图设计等方面都作了一些实际工作,同时也遇到了一些问题,存在一些不足。学会了怎么去查找些资料,把所找到的东西与自己的问题所结合起来并给予解决。这次设计使我学会把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能加深对理论知识的理解。 参考文献1 王思明,张金敏,张鑫等.单片机原理及应用系统设计.北京:科学出版社,20122 张金敏,董海棠,高博等.单片机原理与应用系统设计.成都:西南交通大学出版社, 20103 李华,王思明,张金敏.单片机原理及应
10、用.兰州:兰州大学出版社,2001附录1附录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;void lcd_init(); /lcd设置函数void wr_com(uchar command); /命令函数void wr_data(uchar data0); /数据函数void lcd_clear(); /清屏函数void lcd_set(); /屏幕设置函数void
11、 busy(); /测忙函数void display(); /启动前显示函数void printstring(uchar *s);void display1(); /启动后显示函数void key1();/启动前按键sbit K=P30;sbit K1=P31;sbit K2=P35; /开始计价sbit K3=P33; /模式选择(行程/等待)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_sto
12、p=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=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();v
13、oid delay(uchar t); /延时函数void clear(); /终止函数void set(uchar x);void set1(uchar y); uchar command;uchar count,count1;uchar second,minite,second1,minite1;unsigned int tt,tt1;unsigned char value1=70,value2=17,value3=15; /value1=起步价,value2=超出每公里价格,value3=等待价格unsigned int money; void main()/ Init_Timer1()
14、;/定时器中断函数 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(); display1(); 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; minite
15、1=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; 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_(voi
16、d) 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=(65536-50000)%256; dispbuf10=m/10; dispbuf11=m%10; dispbuf12=second/10; dispbuf13=second%10;void t1_(void) interrupt 3 using 3 /中断3模式3用来计时
17、秒、分 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; dispbuf14=minite1/10; dispbuf15=minite1%10; dispbuf16=second1/10; dispbuf17=second1%10; void lcd_init() wr_com(0x3c); wr_com(0x06); wr_com(0x0c); w
18、r_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 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
19、/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;void display() /初始显示函数 set(0); printstring(step :); wr_data(tabledispbuf0); wr_data(tabledispbuf1); printstring(.); wr_data(tabledispbuf2);
20、 set(16); printstring(mileage :); wr_data(tabledispbuf3); wr_data(tabledispbuf4); printstring(.); wr_data(tabledispbuf5); set1(0); printstring(await :); wr_data(tabledispbuf6); wr_data(tabledispbuf7); printstring(.); wr_data(tabledispbuf8); set1(16); printstring(run : ); wr_data(tabledispbuf10); wr_
21、data(tabledispbuf11); printstring(:); wr_data(tabledispbuf12); wr_data(tabledispbuf13);void chuli1() if(f_start=1) tt=minite*60+second; tt1=minite1; if(m3) money=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 displa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 基于 单片机 出租车 计价 系统 设计
链接地址:https://www.31doc.com/p-9549640.html