出租车计价器课程设计.docx
摘要本设计的是一个基于单片机STC89C52的出租车自动计费设计,附有史位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱逆境,通过复位电路可以重新起先.时钟电路采纳12MHz的M振,作为系统的时钟源,具有较高的精确性。在上电时字符型液晶1602显示最初的起步价,里程收费,等待时间收费三种收费,通过按健可以调整起步价,里程收费,等待时间收费。通过按键模拟出租车的运行,暂停,停止。在1602液晶上可以显示运行的时间,运行时暂停的时间,通过计算可以得出总共的费用和总的路程。在这里主要是以STC89C52单片机为核心限制器,P1.口接1602液拈显示模块。关犍字STC89C52;1602液晶;出租车计费器第一章缗论1.1 出租车计价寿概述我国在70年头起先出现出租车,但那时的计费系统大都是国外进口不但不够精确,价格还非常昂贵。殖者改革开放口益深化,出租车行业的发展势头已非常突出,国内各机械厂家纷纷推出国产计价器。出租车计价器的功能从刚起先的只显示路程(须要司机自己定价,计算后四舍五入),到能够自主计费,以与现在的能够打一发票和语音提示、按时间自主变动单价等功能,随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。本次设计的目的在于现在各大中城市出租车行业都已普与自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普与,但随着城市建设口益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普与也是至无疑问的,所以将来汽车计价器的市场还是非常有潜力的。1.2 单片机的概述计算机系统已明显地朝巨型化、单片化、网络化三个方向发展。巨型化发展的目的在于不断提高计算机的运算速度和处理实力,以解决困难系统计算和高速数据处理,比如系统仿真和模拟、实时运算和处理C单片化是把计算机系统尽可能集成在一块半导体芯片上,其目的在于计算机微型化和提高系统的牢靠性,这种单片计算简称单片机。单片机的内部硬件结构和指令系统在要是针对自动限制应用而设计的所以单片机又称微限制器MCU(MicroContro1.1.erUnit)o用它可以很简洁地将计算机嵌入到各种仪器和现场限制设备中,因此单片机又叫做嵌入式微限制器(EmbeddedMCU)o单片机自20世纪70年头问世以来,以其显明的特点得到迅猛发展,已广泛应用于家用电器、智能玩具、智能仪器仪表、工业限制、航空航天等领域,经过30多年的发展,性能不断提高,品种不断丰富,已经形成自动限制的一支中坚力气。据统计,我国的单片机年容量已达13亿片,且每年以大约16%的速度增长,但相对于国际市场我国的占有率还不到1%。这说明单片机应用在我国有着广袤的前景。对于从事自动限制的技术人员来讲,驾驭单片机原理与其应用已经成为必不行少的学习任务。单片机的应用非常广泛,在工业限制领域、家电产品、智能化仪器仪表、计弟机外部设备,特殊是机电一体化产品中,都有重要的用途.其主要的用途可以分为以卜方面。 显示:通过单片机限制发光二极管或是液晶,显示特定的图形和字符。 机电限制:用单片机限制机电产品做定时或定向的动作。 检测:通过单片机和传感器的联合运用,用来检测产品或者工况的意外发生。 通信:通过RS-232申行通信或者是USB通信,传输数据和信号。 科学计算:用来实现简洁的算法。那么单片机是不是解决上述应用的唯选择呢?当然不是!单片机最明显的优点是价格便宜,从几元人民币到几十元人民币。这是因为这类芯片的生产At很大,技术也很成熟。其次,单片机的体积也远小于咫他两种方案。单片机本身一般用40引脚封装,当然功能多一些的单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,方的甚至只有8只引脚。当然,单片机无论在速度还是容依方面都小于其他两种方案,但是在实际工作中并不是任何须要计克机的场合都要求计算机方很高的性能。例如,限制电冰箱的限制器就不须要运用嵌入式系统,用一片51就可以轻松实现C所以应用的关键是看能否够用,是否花很好的性能价格比。51系列的单片机已经面世十多年,依旧没有被洵汰,还在不断发展中,这就说明是它有广袤的应用前般C其次章系毓总体设计2.1 爆程设计任务基于单片机出租车模拟计价器,采纳at24c02存储芯片+1.CD1602液晶显示等设计而成C用24c02来存储单价,通过按键来模拟增加里程,模拟出租车向前开。通过液晶显示器显示当前的行驶状态、行驶公里、行驶时间时间(时、分、秒)、费用、单价、等信息“可以设置每公里单价,以与夜间单价和白天单价的不同模式,设置后掉电无需重新设置,设置有等待/接着计时模式。计册分行走的里程*单价+等待的时间,价格。2.2 课程设计方案方案一:采纳数字电子技术,利用555定时芯片构成多谐振荡器,或采纳外围的晶振电路作为时钟脉冲信号,采纳计数芯片对脉冲尽心脉冲的计数和分频,最终通过译码电路对数据进行译码,将译码所得的数据送给数码管显示,下是该方案的流程框图,方案如图1.1所示:时钟脉冲时费码计计译数码管显示方案二:采纳EDA技术,依据层次化设计理论,该设计问题自顶向下可分为分频模块,限制模块计量模块、译码和动态扫描显示模块,其方案三:采纳MCU技术,通过单片机作为主控器,利用1602字符液晶作为显示电路,采纳外部晶报作为时钟脉冲,通过按键可以便利调整,一卜.是方案三的系统流程图,本方案主要是必需对于数字电路比较熟识,成本又高。方案图如图3所示:图3方案三方案总结:通过各个方案的比较本次采纳方案三,不但.限制简洁,而且成本低廉,设计电路筒活。第三章系筑硬件设计3.1 .振蓄电路单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTA1.1,其输出端为引脚XTA1.2u通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取20pF)。这样就构成一个稳定的自激振荡器。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生A1.E信号,此时得到的信号时机器周期信号。振荡电路如图4所示:图4振荡电路3.2 复位电路设计复位操作方两种基本形式:一种是上电熨位,另一种是按键复位。按键复位具有上电复位功能外,若要星位,只要按图中的RESET健,电源VCC经电阻RI、R2分压,在RESET端产生一个复位高电平。上电红位电路要求接通电源后,通过外部电容充电来实现单片机H动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将渐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按健身位电路图如图5所示。3.3(1)独立式键盘:独立式键盘中,每个按健占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无健按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有图6键盘接口电路3.4 .3.4.1 16021.CD的基本参数与引脚功能16021.CD分为带背光和不带背光两种,基限制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如图7所示。文定»*小95-13Op55一9O一图71.M0161.结构图1.CDI602主要技术参数:容量:16x2个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块照:佳工作电压:5.0V字符尺寸:2.95X4.35(WXH)mm引脚功能说明:16021.CD采纳标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:表1引脚接口说明表编1J-符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3V1.液晶显示偏压11D4数据4RS数据/吩咐选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7DO数据15B1.A背光源正极8D1.数据16B1.K背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:V1.为液储显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,运用时可以通过一个IOK的电位器调辂对比度。第4脚:RS为寄存器选择,高电平常选择数据寄存器、低电平常选择指令寄存器.第5脚:R/W为读写信号线,高电平常进行读操作,低电平常进行写操作。当RS和R八V共同为低电平常可以写入指令或者显示地址,当RS为低电平R/W为高电平常可以读忙信号,当RS为高电平R/W为低电平常可以写入数据C第6脚:E端为使能端,当E端山高电平跳变成低电平常,液晶模块执行吩咐。第714脚:DOD7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。3.4.2显示模块采纳1602液晶显示接口电路3.5单片机各引J1.功能说明下面对STC89C52各引脚的功能进行较为具体的介绍:1)电源引脚VCC和VSSVcc(40脚):电源端为+5VVss(20脚):接地端.2)时钟电路引脚XTA1.I和XTA1.2XTA1.2(18脚):接外部晶体和微调电容的一端。在单片机内部它是振荡电路反向放大器的输出端,振荡电路的频率就是晶体固有频率。若需采纳外部时针电路时,该引脚输入外时钟脉冲。要检查89C52的振荡电路是否正常工作,可用示波器杳看XTA1.2端是否方脉冲信号输出。XTA1.1.(19脚):接外部晶体和微调电容的另一端。在片内,它是振荡电路反向放大器的输入端。在采纳外部时钟时,该引脚必需接地。3)限制信号脚RSTA1.EPSEN和'EA.RST(9脚):RST是更位信号输入端,高电平有效。在此输入端保持两个机器周期(24个时钟振荡周期)的高电平常,就可以完成夏位操作。A1.E/PROG(30引脚):地址锁存允许信号端。当STC89C52上电正常工作后,A1.E引脚不断向外输出正脉冲信号。此频率为振荡器频率fosc的1/6,当CPU访问片外存储器时,A1.E输出信号作为锁存低8位地址的限制信号。在CPU访问片外数据存储时,每取值一次(一个机器周期)会丢失个脉冲。平常不访问片外存储时,A1.E端也以1/6的振荡频率固定输出正脉冲,因而A1.E信号可以用作对外输出时钟或定时信号。假如你想看一下STC89C52芯片的好坏,可用示波器杳看A1.E端是否有脉冲信号输出,如有脉冲信号输出,则STC89C52基本上是好的。A1.E的负载驱动实力为8个1.S型TT1.(低功耗高速TT1.)OPSEN(29脚);程序存储允许输出信号引脚,在访问片外程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号。此引脚接ERROM的OE谓CPSEN端有效,即允许读出ERR0M/R0M中的指令码CCPU在从外部ERRoM/ROM取指令期间,每个周期PSEN两次有效。不过,在访问片外RAM时,要少产生两次PSEN负脉冲信号。要检查一个STC89C52小系统上电后CPU能否正常到ERROM/ROM中读取指令码,也可用于示波器看PSEN端有无脉冲输出。如有,说明基本上工作正常。EA/VPP(3】脚):外部程序存储器地址允许输入端/固化编程电压输入端。当EA引脚接高电平常,CPU只访问片内ERROM/ROM并执行内部程序存储器中的指令。但在PC(程序计数器)的值超过OFFFH(对8751/8051为Xk)时,将自动转向执行片外存储器的程序。当出入信号EA引脚接低电平(接地)时,CPU只访问外部ERROM/ROM并执行外部程序存储器中的指令,而不管是否方片内程序存储器.对于无芯片内的RoM的8031或8032,须外扩ERROM,此时必需将EA引脚接地。假如运用有片内ROM"¾STC89C52,外扩ERRoM也是可以的,但也要使EA接地。4)1/0(输入/输出端口,PO,P1.,P2,P3)PO11:Po口是个漏极开路的8位准双向I/O端口。P1.II:8位准双向I/O端门。P2口:即可以做地址总线输出地址高8位,也可以做一般I/O用,(此时为准双向口)。P3口:双功能口,即可以做一般I/O口用(此时为准向口,也可以按每位定义实现其次功能操作)。见表1。表2P3口的其次功能表引脚其次功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外部中断0)P3.3INT1.(外部中断1)P3.4TO(定时器0外部中断)P3.5T1.(定时器1外部中断)P3.6WR(外部存储器写选通)P3.7RD(外部存储器读写通)第四章系端软件设计4.1 .单片机资源运用在本次设计中像电路键航用到rP2口,其中P2.0到P2.5作为键盘的输入,显示电路用到了PI和P3,P1.口为液晶的数据口。4.2 .单片机软件模块设计4.2.1 中断子函数对于中断程序,只要定时器计数满就会产生中断50ms中断一次,共计20次,秒钟加1,秒钟计满再分钟加,当分钟加到99时全部清零。以下是中断子函数的流程图如图9所示:GountHSeccndH-oomt=0XiniteHseocnd=0Minite=O图9中断子程序流程图4.2.2 判健子函数对于独立式键盘判键,首先看有键按下不,假如有键按下则延时write_24c02(9,wan_3w_price%256);保存数据write_24c02(10,wan_3w_price/256);保存数据write_24c02(1.1,wan_wait_price%256);保存数据write_24c02(12,wan_wait_price/256);保存数据*自动初始化保存的数据voidzidong_chushifaJicOva1.ue=read_24c02(200);va1.ue=read_24c02(200);if(va1.ue!=0x91)新的单片机初始单片机内问EEPOMva1.ue=0x91;write_iic_dataO;write_24cO2(2OO,va1.ue);保存数据de1.ay,1.ms(300);/育*读;来保存的数据*育*/voidread_iic_data()f1.ag_bai_hei=read_24c02(0);bai_31_price三read_24c02(2);bai_31_price=bai_31.price*256+read_24c02(1.);bai_3w_price=read_24cO2(4);bai_3w_price=bai_3w_price*256+read_24cO2(3);bai_wait_price=read_24c02(6);bai_wait_price=bai_wait_price*256+read_24c02(5);wan_31_price=read_24c02(8);wan_31_price=wan_31_price*256+read_24cO2(7);if(key_va1.ue>=5)按键按下消抖key-va1.ue=O;key.new=O;按健松开后进入等待松开按键状态key_can=20;if(key_new=O)&&(key_o1.d=1)得到按键值得到按键值得到按键值得到按键值得到按键值得到按键值switch(keyjo&0x3f)case0x3e:kcy-can=1;break;case0x3d:key-can=2;break;case0x3b:key_can=3;break;case0x37:key_can=4;break;caseOx1.f:key_can=5;break;case0x2f:key_can=6;break;/write_sfm2(2,0,key_can);/按键按下显示按键值key_o1.d=key_new;#inc1.udc"mcnu.h"/*对应菜单内的处理函数*voidmenu_dis()if(key_canH=6)distance+;write_sfm4(1,0,distance);if(key.can=5)清零从新计价(f1.ag_time_cn=O;shi=O;fen=O;miao=O;zong_jia=O;distance=O;if(key_can=2)f1.ag_time_en=f1.ag_time_en;if(f1.ag_300ms=1)f1.ag_300ms=O;if(distance<=30)/3公里内的价格if(f1.ag_bai_hei=O)if(fen<=3)zongjia=bai_31_price;e1.sezong_jia=bai_31_price+(shi*60+fen-3)*bai_wait_price;e1.seif(fen<=3)zong_jia三wan_31_price;e1.sezong_jia=wan_31_price+(shi*60+fen-3)*bai_wait_price;e1.se3公里外的价格if(f1.ag_bai_hei=O)if(fen<=3)zong_jia三bai_31_price+bai_3w_price(distance-30)/10;e1.sezongjia=bai_31_price+bai_3w_price(distance-30)/10+(shi*60÷fen-3)*bai_wait_price;e1.seif(fen<=3)zongjia=wan_31_price+wan_3w_price(distance-30)/10;e1.sezong_jia=wan_31_price+wan_3w_price(distance-30)/10+(shi*60+fen-3)*wan_wait_price;if(f1.ag_bai_hei三=O)write_sfm2_dian(2,9,bai_3w_price);e1.sewrite_sfm2_dian(2,9,wan_3w_price);WritjSfm2(2,0,Shi);WritJSfm2(2,3,fen);write_sfm2(2,61.miao);write_sfm4(1,10,zongjia);write_sfm4(1,0,distance);write_zifu(1,15,0x5c);/¥write_zifu(2,12,0x5c);/YI*»*示函数*Jvoidjishu_chashu()if(f1.ag_1.s=三1)&&(f1.ag_time_en=1)f1.ag_1.s=O;miao+;if(miao>=60)miao=O;fen+;if(fen>=60)fen=O;shi+;if(shi>=24)shi=O;/*定时器Q初始化程序*/voidtime_init()EA=1;开总中断TMOD=0X01;/定时器0、工作方式1ETO=1;开定时器。中断TRO=1;允许定时器。定时voidmain()init_1602();init_1.602_dis_csf();zidong_chushifa_iic();read_iic_data();timejnit();init_menu();whi1.e(1.)key0;if(key_can<20)key_with();menu,dis();jishu_chashu();*定时器Q中断服务程序*voidtimejnt()interrupt1staticucharva1.ue;THO=0x3c;T1.O=OxbO;/50msva1.ue+;if(va1.ue%6=O)11ag-300ms=1;if(va1.ue>=20)f1.ag_1.s=1;va1.ue=0;附录2元器件清单表3元器件清单名称规格数量备注电阻2001个IK1个IOK5个1002个电容20pF2个10F2个极性电容发光二极管3个按键7个直流电机1个品振12MHz1个芯片STC89C521块1602液晶1块内带字符库