毕业设计(论文)-基于单片机的出租车计费器设计.doc_第1页
毕业设计(论文)-基于单片机的出租车计费器设计.doc_第2页
毕业设计(论文)-基于单片机的出租车计费器设计.doc_第3页
毕业设计(论文)-基于单片机的出租车计费器设计.doc_第4页
毕业设计(论文)-基于单片机的出租车计费器设计.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南方职业学院 视野决定未来_题 目:出租车计费器 专 业:电子信息工程 班 级:2-082班 姓 名: 学 号: 指导老师: 2010年11月12日摘要:出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。国内出租车计价器已经经历了4个阶段的发展。从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器。本系统是基于STC89c52的出租车计价器,由1602液晶屏对运行数据进行显示,并且带有由A44E组成的速度检测器。关键词:出租车、智能、计价器、速度 Summary:Taxi the meter charges is the taxi operation of the intelligent, as the electronic technology development, the taxi is the meter technology progress and improve the taxi. the meter has four stages of development. from the traditional by mechanical passive devices mechanical type, the half of the electrons with electronic circuits for mechanical passive devices taxi from the meter. in the integrated to the current monolithic integrated circuits design a system of the meter. This system is based on the meter stc89c52 taxi, was to run by the lcd panel displays data, and with speed. the detector a44e.Keywords :a taxi, and intelligence, the meter, the speed目 录摘要2第一章 功能概述4第二章 系统方案设计与论证42.1控制系统42.2时钟系统52.3速度检测52.4电源设计5第三章 硬件设计63.1系统电路图63.2单片机最小系统63.2.1 80C52单片机硬件结构63.2.2 单片机最小应用系统设计73.3速度传感器93.4电源模块93.5打印机接口10第四章 软件设计104.1主要程序流程图104.2软件设计114.2.1 主程序124.2.2 1602的初始化和数据读取124.2.3 对ds1302数据的读取和写入164.2.4 时间调试部分204.2.5 速度计算224.2.6 费用计算234.2.7 单片机二程序24结语25参考文献25附录26第一章 功能概述本系统采用STC单片机为主要控制器,由ds1302智能芯片提供时钟,通过一些外围电路以及接口具有以下设计要求:1. 里程即汽车行驶里程,用四位数字显示,显示方式为XXX.X,单位为km,精确到0.1 km。2. 单价即里程单价,用三位数字显示,显示方式为X.XX,单价为元/km,根据每天不同的时间段有两种情况:当时间段为06:0023:00时单价为1.40元/km,其他时间段内单价为1.80元/km。3. 等候时间用三位数字显示分钟,显示方式为XXX,等候的定义是:当汽车行驶速度小于或等于12 km/h时为等候。 4. 等候单价等候单价有两种情况:在等候时间小于1小时的情况下,等候单价为1元每5分钟;在等候时间大于1小时的情况下,等候单价为20元每小时。5. 费用的计算出租车的起价为5.00元,当里程小于2 km时,按起价计算费用;当里程大于2 km时按下式计算费用:a) 费用=里程里程单价+等候时间等候单价6. 费用的显示用五位数字显示,显示方式为XXX.XX,单价为元。7. 时钟显示当出租车在常运状态下,应能显示当前的时间。在汽车熄火的情况下,时钟必须正常运行,但是可以不显示时钟。8. 计费指示当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭,并有语音或灯光提示信号。9. 扩展第二章 系统方案设计与论证一、 控制系统方案一:FPGA作为控制器方案二:单片机控制二、 时钟系统方案一:由STC89C52通过编程实现方案二:ds1302提供时钟三、 速度检测器 方案一:红外对管测速方案二:霍尔传感器检测四、 电源设计利用汽车提供的12v电源,通过7805三端稳压集成电路输出的5v直流电压为整个系统提供工作。第三章 硬件设计一、 系统电路图二、单片机最小系统图3.1 80c52单片机最小系统2、复位电路图3.2 80c52单片机复位电路四、速度传感器设计图3.3 霍尔传感器五、 电源模块图3.4 电源电路六、 打印机接口本设计中所用微打是EPSON公司生产的TPp-16微型打印机图3.5 数据打印电路第四章 软件设计一、 主要程序流程图图4.1单片机1程序流程图二、软件设计1、 主程序void main() uchar j;/标志位,控制报警声音 init();/初始化程序调用,对各种功能寄存器以及功能位进行初始化 while(1) j=1; while(!k0)/如果空车指示键闭合,计价器进入工作状态 if(j)sheng(90);j=0;/进入各种状态,蜂鸣器鸣叫一次 TR0=1;/开启定时器和计数器,进行速度计算 TR1=1; xs();/调用显示子程序 fyjs();/费用计算子程序 dushijian();/从ds1302读取时间 if(k1=0)anjian();/k1键按下进入时间调试模式 init();/重新初始化,把各种变量清0 while(k0)/ 如果空车指示键断开,计价器进入休闲状态 TR0=0;/关闭定时计数器 TR1=0; dushijian();/读取时间 xssj();/显示时间 if(k1=0)anjian();/k1键按下进入时间调试模式 2.1602的初始化和数据读取1程序清单:void write_com(uchar com)/向1602写命令P0=com;rs=0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;void write_date(uchar date)/1602写数据P0=date;rs=1;lcden=0;delay(10);lcden=1;delay(10);lcden=0;void xs()/显示子程序、计价器在工作状态时的显示 uchar a; table1=sjlc/100000+0; /对各种数据进行分离,存入显示缓存中 table2=sjlc%100000/10000+0; table3=sjlc%10000/1000+0; table5=sjlc%1000/100+0; table9=dj/10+0; table11=dj%10+0; table11=ddsj/100+0; table12=ddsj%100/10+0; table13=ddsj%10+0; write_com(0x80); delay(10); for(a=0;a16;a+) write_date(tablea); delay(5); write_com(0xc0); delay(10); for(a=0;a16;a+) write_date(table1a); delay(5); void xssj()/时间显示,计价器工作在休闲状态时进行时间显示 uchar a; write_com(0x80); delay(10);for(a=0;a16;a+) write_date(table2a); delay(5);write_com(0xc0);delay(10);for(a=0;a16;a+) write_date(table4a); delay(5); 3.对ds1302数据的读取和写入图4.2 DS1302的外部引脚分配具体操作见驱动程序。void xie1_1302(uchar x) /向1302写一字节 uchar i; for(i=0;i8;i+) sda=x1;clk=1;clk=0;x=1; uchar du1_1302() /从1302读一字节 uchar i,b,t; for(i=0;i8;i+) b=1;t=sda;b|=t7;clk=1;clk=0; return b/16*10+b%16;uchar du_1302(uchar addr) /从1302指定地址读数据 uchar dat; rst=0;clk=0;rst=1; xie1_1302(addr); dat=du1_1302(); return dat;void xie_1302(uchar addr,uchar dat) /向1302指定地址写数据 clk=0;rst=1; xie1_1302(addr); xie1_1302(dat); clk=0;rst=0;void set_1302() xie_1302(0x8e,0x00); /解除保护 xie_1302(0x80,(tep0/104)|(tep0%10); /设置初始时间 秒 xie_1302(0x82,(tep1/104)|(tep1%10); /设置初始时间 分 xie_1302(0x84,(tep2/104)|(tep2%10); /设置初始时间 时 xie_1302(0x86,(tep3/104)|(tep3%10); /设置初始时间 日 xie_1302(0x88,(tep4/104)|(tep4%10); /设置初始时间 月 xie_1302(0x8a,(tep5/104)|(tep5%10); /设置初始时间 周 xie_1302(0x8c,tep6); /设置初始时间 年 xie_1302(0x8e,0x80); /加保护void cl() table25=tep6/10+0; table26=tep6%10+0; table28=tep4/10+0; table29=tep4%10+0; table211=tep3/10+0; table212=tep3%10+0; table111=table41=tep2/10+0; table112=table42=tep2%10+0; table114=table44=tep1/10+0; table115=table45=tep1%10+0; table47=tep0/10+0; table48=tep0%10+0; table413=tep5%10+0; if(tep2=6)(tep223)dj=14; else dj=18;void dushijian() /读取当前时间 tep0=du_1302(0x81); /秒 tep1=du_1302(0x83); /分 tep2=du_1302(0x85); /时 tep3=du_1302(0x87); /日 tep4=du_1302(0x89); /月 tep5=du_1302(0x8b); /周 tep6=du_1302(0x8d); /年 cl();4.时间调试部分void anjian()/按键程序一,主要对按键进行查询 uchar b; sheng(90); while(k1=0); xssj(); write_com(0x0f); while(k1) if(k5=0) while(!k5); b+; dushijian(); switch(b) case 0:jian(0xc1,2,24,1,0);break; case 1:jian(0xc4,1,60,4,0);break; case 3:jian(0x85,6,100,5,1);break; case 4:jian(0x88,4,13,8,1);break; case 5:jian(0x8b,3,32,11,1);break; case 2: write_com(0xcd); write_com(0x0f); if(k3=0)tep5=(tep5+1)%8; /调周 cl(); if(k3=k4) write_com(0x0c); write_date(table413); break; default:b=0; set_1302(); delay(500); sheng(90); write_com(0x0c);void jian(uchar x1,uchar x2,uchar x3,uchar x4,uchar x5) /按键程序二,修改时间 uchar a1,a2; a1=x3-1; a2=x4+1; write_com(x1); write_com(0x0f); if(k3=0)tepx2=(tepx2+1)%x3; /+if(k4=0)tepx2=(tepx2-1);if(tepx2=0)tepx2=a1; /- cl();if(k3=k4)/有键按下就实时刷新显示 write_com(0x0c); if(x5=0) write_date(table4x4); write_date(table4a2); else write_date(table2x4); write_date(table2a2); 5.速度计算void t0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; dt+; if(dt=1200) lc=(TH1*256)+TL1; /路程单位 m TH1=0; TL1=0; sjlc=sjlc+lc; if(lc=200)/速度是否大于12km/小时,即每分钟200m jflc=jflc+lc; led=0; else ddsj+;led=1; dt=0; 6.费用计算void fyjs() uchar a; if(k2=0) delay(100); if(k2=0) sheng(90); if(ddsj=60)ddfy=ddsj/3; /单位元 3分钟1元 else ddfy=ddsj/5; /5分钟1元 if(sjlc=2000)zfy=50; else zfy=(jflc*dj)/1000+ddfy*10; /单位 0.1元 table34=zfy/1000+0; table35=zfy%1000/100+0; table36=zfy%100/10+0; table38=zfy%10+0;ckfs(); write_com(0xc0); delay(10); for(a=0;a16;a+) write_date(table3a); delay(5); delay(1000); while(k2=1); while(k2=0); sheng(90); init(); 7.单片机二程序void dy()/向打印机发送数据uchar l;EA=0;for(l=1;l7;l+)stb=1;P0=tepl;delay(2);stb=0;delay(2);stb=1;delay(2);while(busy);m=0; IE=0x90;void ckjs() interrupt 4/串口接收数据 uint a,b;if(RI) RI=0; i+; switch(i)case 1:tep1=SBUF;break;case 2:tep2=SBUF;break;case 3:tep3=SBUF;break;case 4:tep4=SBUF;break;case 5:tep5=SBUF;break;case 6:a=SBUF;break;case 7:b=SBUF;m=1;break; default:i=1; tep6=a*100+b; 结 语参考文献【1】彭伟.单片机c语言程序设计实训100例.北京。电子电工出版社,2009.6【2】高屹.c语言程序设计与实践.北京.机械工程出版社,2005.6【3】王文杰.单片机应用技术.北京.冶金工业出版社,2008.6【4】张大彪.电子测量技术与仪器.北京.电子电工出版社,2008.1【5】周良权、傅恩锡、李世馨.模拟电子技术基础.北京.高等教育出版社.【6】孙玉军.Protel DXP 电路设计技术.北京. 冶金工业出版社,2008.6附 录一、 原理图二、实物图三、主控单片机程序#includereg51.h#define uint unsigned int#define uchar unsigned charsbit sda=P22; /ds1302功能引脚sbit clk=P21;sbit rst=P23;sbit k0=P20; /功能按键sbit k1=P37; sbit k2=P36;sbit k3=P32; sbit k4=P33;sbit k5=P24;sbit rs=P26; /液晶屏功能引脚sbit lcden=P27;sbit ysq=P25; /扬声器sbit sd=P35; /速度传感器接口sbit led=P10;void xs();void sheng();void xssj();void write_com(uchar com);void write_date(uchar date);uchar tep6; /时间日期缓?uchar table= 000.0km 0.00/km, table1= 000 time: 00:00, table2=-2010-01-01-, table3=-$:000.00yuan-, table4=-00:00:00- -1-, js, /计数器中断次数 ddsj, /等待时间 dj; /当前时间单价uint lc, /路程缓存 ddfy, /等待时间计费 zfy, /总费用 dt; /定时器中断次数unsigned long jflc, /计费路程 sjlc; /实际路程 void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*/*对1302的读写操作*/*/void xie1_1302(uchar x) /向1302写一字节 uchar i; for(i=0;i8;i+) sda=x0x01;clk=1;clk=0;x=1; uchar du1_1302() /从1302读一字节 uchar i,b,t; for(i=0;i8;i+) b=1;t=sda;b|=t7;clk=1;clk=0; return b/16*10+b%16;uchar du_1302(uchar addr) /从1302指定地址读数据 uchar dat; rst=0;clk=0;rst=1; xie1_1302(addr); dat=du1_1302(); return dat;void xie_1302(uchar addr,uchar dat) /向1302指定地址写数据 clk=0;rst=1; xie1_1302(addr); xie1_1302(dat); clk=0;rst=0;void set_1302() xie_1302(0x8e,0x00); /解除保护 xie_1302(0x80,(tep0/104)|(tep0%10); /设置初始时间 秒 xie_1302(0x82,(tep1/104)|(tep1%10); /设置初始时间 分 xie_1302(0x84,(tep2/104)|(tep2%10); /设置初始时间 时 xie_1302(0x86,(tep3/104)|(tep3%10); /设置初始时间 日 xie_1302(0x88,(tep4/104)|(tep4%10); /设置初始时间 月 xie_1302(0x8a,(tep5/104)|(tep5%10); /设置初始时间 周 xie_1302(0x8c,(tep6/104)|(tep6%10); /设置初始时间 年 xie_1302(0x8e,0x80); /加保护void cl() table25=tep6/10+0; table26=tep6%10+0; table28=tep4/10+0; table29=tep4%10+0; table211=tep3/10+0; table212=tep3%10+0; table111=table41=tep2/10+0; table112=table42=tep2%10+0; table114=table44=tep1/10+0; table115=table45=tep1%10+0; table47=tep0/10+0; table48=tep0%10+0; table413=tep5%10+0; void dushijian() /读取当前时间 tep0=du_1302(0x81); /秒 tep1=du_1302(0x83); /分 tep2=du_1302(0x85); /时 tep3=du_1302(0x87); /日 tep4=du_1302(0x89); /月 tep5=du_1302(0x8b); /周 tep6=du_1302(0x8d); /年 cl();void jian(uchar x1,uchar x2,uchar x3,uchar x4,uchar x5) uchar a1,a2; a1=x3-1; a2=x4+1; write_com(x1); write_com(0x0f); if(k3=0)tepx2=(tepx2+1)%x3; /+if(k4=0)tepx2=(tepx2-1);if(tepx2=0)tepx2=a1; /- cl();if(k3=k4) write_com(0x0c); if(x5=0) write_date(table4x4); write_date(table4a2); else write_date(table2x4); write_date(table2a2); void anjian() uchar b; sheng(); while(k1=0); xssj(); write_com(0x0f); dushijian(); while(k1) if(k5=0) while(!k5); b+; switch(b) case 0:jian(0xc1,2,24,1,0);break; case 1:jian(0xc4,1,60,4,0);break; case 3:jian(0x85,6,100,5,1);break; case 4:jian(0x88,4,13,8,1);break; case 5:jian(0x8b,3,32,11,1);break; case 2: write_com(0xcd); write_com(0x0f); if(k3=0)tep5=(tep5+1)%8; /调周 cl(); if(k3=k4) write_com(0x0c); write_date(table413); break; default:b=0; set_1302(); delay(500); sheng(); write_com(0x0c);/*/*对1062的读写操作*/*/void write_com(uchar com)/1602写指令P0=com;rs=0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;void write_date(uchar date)/1602写数据P0=date;rs=1;lcden=0;delay(10);lcden=1;delay(10);lcden=0;/*声音子程序*/void sheng()ysq=1; delay(5);ysq=0;/*初始化子程序*/void init() js=0; ddsj=0; jflc=0; sjlc=0; lc=0; dt=0; dj=0; led=0; TMOD=0x51; /T1为16为计数器,T2为16为定时器 TH0=(65536-50000)/256; TL0=(65536-50000)%256; IE=0x8A; write_com(0x38); /1602初始化delay(20);write_com(0x0c);delay(20);write_com(0x06);delay(20);write_com(0x01);delay(20);/*显示子程序*/void xs() uchar a; if(tep2=6)(tep223)dj=14; else dj=18; table1=sjlc/100000+0; /显示路程的最高位 table2=sjlc%100000/10000+0; table3=sjlc%10000/1000+0; table5=sjlc%1000/100+0; table9=dj/10+0; table11=dj%10+0; table11=ddsj/100+0; table12=ddsj%100/10+0; table13=ddsj%10+0; write_com(0x80); delay(10); for(a=0;a16;a+) write_date(tablea); delay(5); write_com(0xc0); delay(10); for(a=0;a16;a+) write_date(table1a); delay(5); /*/void fs(uchar z) SBUF=z; while(TI=0); TI=0; void ckfs()/发送数据到单片机2打印和存储 SCON=0x50;TMOD=0x20; PCON=0x00;TH1=0xFD; TL1=0xFD;

温馨提示

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

最新文档

评论

0/150

提交评论