《单片机课程设计:出租车计价器.doc》由会员分享,可在线阅读,更多相关《单片机课程设计:出租车计价器.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机与信息工程学院单片机课程设计课程设计题目出租车计价器专 业:计算机控制班 级:控制09-3 姓 名:费翔学 号:20指导教师:范爱华2012年3月2日设计题目:出租车计价器设计目的:利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。设计目标:1.数据输出:单价输出、路程输出、总金额输出2.按键:启动计时开关、数据显示切换、白天/晚上切换、复位3.能手动进行修改单价任务下达时间:2012年2月27日任务完成时间:2012年3月1日 指导教师评语: 年 月 日设计成绩:摘要:近些年来,随着单片机的发展,产品相当的繁多,单片微型机又称嵌入式控制器,是2
2、0世纪70年代中期发展起来的一种大规模的集成电路器件。当单片机的应用不断地深入,新技术的发展也是层出不穷的。这是一项新型的工程技术,其内涵也是随着单片机的发展而发展。MCS-51系列的单片机是属于结构相当简单,但也是单片机中的典型,应用也相当的灵活。51系列的单片机产品发展迅速,在国内外占有重要的地位。 出租车计价器从最初的只能进行简单的价格计算,发展到价格、距离独立计量并显示,可根据特殊情况设定相应的收费标准,能打印营运发票,可使用IC卡结算等的功能。目前市场上的计价器越来越趋向于集成有多种功能。关键词:51单片机,价格计算,独立显示,手动输入正文:1. 出租车计价器是乘客与司机双方的交易准
3、则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程就可以轻易而举的实现。避免了机械开关带来的不稳定因素。方案论证最终方案选择出租车计价器基本功能部分是根据里程数来完成总金额的输出。实现方法有两种。方案一:采用数字电路控制。其原理方框图如图2.1所示。采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,
4、实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用。方案二:采用单片机控制。利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。本方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。2.硬件详细设计本系统的硬件设计主要包括单片机AT89S51、数据显示部件、A44E霍尔传感器电路、AT24C02 掉电存储单元的设计、里程计算及计价单元的设计。在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。2.1
5、总体硬件原理图主控芯片使用51系列AT89C52单片机,采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。3.软件设计在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。4.1主程序#includereg51.h#include intrins.h#define
6、uchar unsigned charuchar tmp;uchar det;uchar Coo;int m;int f;uchar DispTab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0; /字形码uchar TAB24;sbit P00=P00;sbit P01=P01;sbit P02=P02;sbit P03=P03;sbit P04=P04;sbit P05=P05;sbit P10=P10;sbit P27=P27;sbit P14=P14;sbit SCLK =P13; /*DS1302的SCLK脚脉冲*/sb
7、it DIO=P12; /*DS1302的IO脚数据*/sbit CE=P11; /*DS1302的RST脚片选*/sbit P15=P15;sbit P23=P23;sbit P21=P21;sbit P16=P16;sbit P35=P35;sbit P22=P22;sbit P17=P17;sbit P20=P20;sbit P26=P26;sbit P24=P24;sbit ACC7=ACC7;sbit ACC0=ACC0;void time() interrupt 1 /等待计时中断int i,j;TH0=0x15;TL0=0xa0;i+;if(i=100)i=0;j+;if(j=1
8、0)j=0;f=Coo;void mDelay(unsigned int Delay) /延时子程序 unsigned int I;for(;Delay0;Delay-) for(I=0;I0; i- ) /循环8次移位 temp = addr; DIO = (bit)(temp&0x01); /每次传输低字节 addr = 1;SCLK = 0; /右移一位SCLK = 1; /发送数据 for ( i=8; i0; i- ) temp = dat; DIO = (bit)(temp&0x01); dat = 1;SCLK = 0; SCLK = 1; CE = 0; unsigned ch
9、ar Read1302 ( unsigned char addr ) /数据读取子程序unsigned char i,temp,dat1,dat2; CE=0; SCLK=0; CE = 1; /发送地址 for ( i=8; i0; i- ) /循环8次移位 temp = addr; DIO = (bit)(temp&0x01);/每次传输低字节 addr = 1; SCLK = 0; SCLK = 1; /右移一位 for ( i=8; i0; i- ) ACC7=DIO; ACC=1; SCLK = 1; SCLK = 0; CE=0; dat1=ACC; dat2=dat1/16; /
10、数据进制转换 dat1=dat1%16; /十六进制转十进制 dat1=dat1+dat2*10; return (ACC);void Initial() /初始化DS1302 Write1302 (0x8E,0x00); /禁止写保护 Write1302 (0x80,0x00); /秒位初始化 Write1302 (0x82,0x20); /分钟初始化 Write1302 (0x84,0x10); Write1302 (0x86,0x23); Write1302 (0x88,0x05); Write1302 (0x8c,0x10); /小时初始化 Write1302 (0x8E,0x80);
11、 /允许写保护void set() /修改时间 Write1302 (0x8E,0x00); /禁止写保护 Write1302 (0x82,TAB7*16+TAB6); /分钟初始化 Write1302 (0x84,TAB0*16+TAB1); Write1302 (0x8E,0x80);void ss() /显示子程序int i;uchar *p;p=TAB;for(i=0;i1;i+)det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P
12、20=1;P14=1;P15=0;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=1;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=1;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=1;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=0;P16=1;P17=0
13、;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=1;P16=1;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=1;P16=1;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=0;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0
14、=tmp;P20=0;P20=1;P14=0;P15=1;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=1;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=1;P17=1;p+;void sett() /显示等待时间及单价、总价、路程子程序TAB0=Read1302(0x83)/10;TAB1=Read1302(0x83)%10;TAB7=Read1302(0x81)/10;TAB6=Read1302(0x81)%
15、10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4=3&TAB2=0&TAB3=0)TAB11=8;elseTAB11=(8+(Coo-3)*TAB8)%10;TAB5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo/10*TAB8+Coo%10*TAB8/10)%10;void mmm() /显示时间子程序 TAB0=Read1302(0x85)/10; TAB1=Read1302(0x85)%10; TAB7=Read1302(0x83)/10; TAB6=
16、Read1302(0x83)%10;TAB8=3;void qie(int j) /修改时间、单价子程序uchar i;switch(j) case 4:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB8+;if(TAB8=10)TAB8=0;break;case 3:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB6+;if(TAB6=10)TAB6=0;break;case 2:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB7+;if(TAB7=6)TAB7=0;break;cas
17、e 1:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB1+;if(TAB0=2&TAB1=4)|TAB1=10)TAB1=0;break;case 0:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB0+;if(TAB0=3)TAB0=0;break; default:break;Void die() /修改单价位、时间位子程序int x;for(m=0;m5;)ss();qie(m);if(P21=0)for(x=0;x1;)ss();x=P21;m+;set();void mm() /非计价时的显示时间TAB0=Re
18、ad1302(0x85)/10;TAB1=Read1302(0x85)%10;TAB7=Read1302(0x83)/10;TAB6=Read1302(0x83)%10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4=3&TAB2=0&TAB3=0)TAB11=8;elseTAB11=(8+(Coo-3)*TAB8)%10;TAB5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo/10*TAB8+Coo%10*TAB8/10)%10;void count() /计
19、价子程序int x;EA=1;if(f=Coo)sett();ss();elsemm();if(P35=0)for(x=0;x1;)ss();x=P35;Coo+;void main()int i,j;TMOD=0x01;TH0=0x15;TL0=0xa0;TR0=1;ET0=1;Initial();P27=0;for(;)if(P23=0)for(i=0;i1;)ss();i=P23;for(j=0;j1;)count();ss();if(P23=0)for(i=0;i1;)ss();i=P23;EA=0;j+;TAB2=TAB3=TAB11=TAB5=TAB9=TAB10=TAB4=0;
20、else mmm();ss();if(P21=0)for(i=0;i1;)ss();i=P21;die();4.2 子程序显示子程序void sett() /显示等待时间及单价、总价、路程子程序TAB0=Read1302(0x83)/10;TAB1=Read1302(0x83)%10;TAB7=Read1302(0x81)/10;TAB6=Read1302(0x81)%10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4=3&TAB2=0&TAB3=0)TAB11=8;elseTAB11=(8+(Coo-3)*TAB8)%10;TA
21、B5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo/10*TAB8+Coo%10*TAB8/10)%10;void mmm() /显示时间子程序 TAB0=Read1302(0x85)/10; TAB1=Read1302(0x85)%10; TAB7=Read1302(0x83)/10; TAB6=Read1302(0x83)%10;TAB8=3;TAB11=(8+(Coo-3)*TAB8)%10;TAB5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo
22、/10*TAB8+Coo%10*TAB8/10)%10;void mm() /非计价时的显示时间TAB0=Read1302(0x85)/10;TAB1=Read1302(0x85)%10;TAB7=Read1302(0x83)/10;TAB6=Read1302(0x83)%10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4 12 ?结束YN结论:和一般计算系统一样,单片机的应用系统由硬件和软件所组成。硬件主要指单片机扩展的存储器,输入/输出设备等硬件部件的机器,而软件是各种工作程序的总称。只有硬件和软件紧密配合,协调一致,才能组成
23、高性能的单片机应用系统。课程设计体会:从这次课设中明显体现了主程序,子程序、中断程序的功能。在调试中也相当的简化。本次专业课程设计通过自己的努力,加上指导老师的悉心指导,圆满完成了任务,从而学习到很多东西,实践和理论的得到很好的结合。参考文献:1.于海生.微型计算机控制技术.清华大学出版社.1999.62.陈杰 黄鸿.传感器与检测技术.高等教育出版社.2002.83.孙涵芳.MCS-51系列单片机原理及应用.北京航空航天大学出版社.1996.44.黄正瑾.电子设计竞赛赛题解析.东南大学出版社.2003.55.李顺增.微机原理与接口技术,机械工业出版社.20056.顾德英.计算机控制技术.北京邮电大学出版社.2007