里程计数器的设计.doc_第1页
里程计数器的设计.doc_第2页
里程计数器的设计.doc_第3页
里程计数器的设计.doc_第4页
里程计数器的设计.doc_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

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

文档简介

里程计数器的设计湖南文理学院课程设计报告 课程名称: 课 程 设 计 学 院: 电气与信息工程学院 专业班级: T08102班 姓 名: 谢 碧 玉 学 号: 200816020214 指导教师: 张 晓 虎 完成时间: 2011年6月22日 报告成绩: 评阅意见: 评阅老师: 评阅时间:里 程 计 数 器 的 设 计目 录第一章 前 言2第二章 设计要求22.1 基本功能22.2 扩展功能2第三章 系统的组成及工作原理33.2 AT89S51单片机及其引脚说明3第四章 硬件电路方案设计54.1 方案比较与确定.54.2 里程计算、计价单元的设计54.3 显示单元电路设计74.4 键盘显示模块设计74.5 AT24C02掉电存储单元的设计84.6 设计总框图9第五章 系统的软件设计95.1 系统主程序设计95.2 定时中断服务程序115.3 显示服务程序115.4 键盘服务程序12第六章 心得体会13参考文献13附录14附录1 总体设计电路图14附录2 元件清单14附录3 全部源程序14第一章 前 言随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在买卖纠纷困扰着行业的发展。然而解决这一矛盾的最好方法就是改良出租车的里程计数器,用更加精良的里程计数器来为乘客提供更加方便快捷的服务。我国的出租车始于20世纪70年代,随着电子技术的发展,出租车里程计数器的设计技术也在不断进步和提高。国内出租车里程计数器的发展已经经历了4个阶段,从传统的全部由机械元器件组成的机械式到半电子式出租车里程计数器,再从集成电路式到目前的基于单片机系统设计的出租车里程计数器。 基于单片机系统设计的出租车里程计数器是以单片机作为核心的控制元件,采用灵敏的霍尔开关型器件,具有功能强,性能可靠,电路简单,成本低的特点,加上经过优化的程序,使其具有很高的智能化水平。第二章 设计要求2.1 基本功能汽车里程计数器由三个部分组成,一是车辆跑动信号的采集,当车辆跑动时,转轴带动一小磁体转动,车轮和该小磁体的转动比是一定的,这里可以利用磁感应传感器来接收小磁体的信号,小磁体转动一周与磁感应传感器正对一次,传感器输出口就会产生一个大约20ms的低脉冲,使用单片机来检测传感器信号。(可以用按键来模拟传感器信号,检测按键按下次数可用两种方式完成(1)利用定时器/计数器的计数器功能对按键产生的低脉冲进行计数(2)直接利用I/O口来检测按键按下次数)。二是对车辆行驶的里程进行计数并利用I2C协议将数据及时保存到E2PROM中(这里我们使用单片机内部的基本RAM单元来存储计数值)。三是显示车辆行驶的距离,假设按键按下10次为1公里,利用数码管显示6个数码管显示里程数。2.2 扩展功能(1)显示:可以显示里程、金额、等待时间、速度。(2)计费功能:起步公里数为3公里,价格为8元;若实际运行大于3公里,按单程价格为2元/公里,往返则价格为1.5元/公里。(3)按键功能:单程/往返分别由“单程” 按键和“往返” 按键设定;按“暂停” 键,里程计数器可暂停计价;按“清除” 键,里程计数器能将记录数据(里程、等待时间与金额等)自动清0;按“查询”键,能自动显示总等待时间;按“返回”键,仍然显示里程和金额。第三章 系统的组成及工作原理出租车里程计数器系统以AT89S51单片机为核心,由按键电路、AT24C02掉电存储电路、里程计算电路、数码管显示电路组成。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不仅能实现基本的里程计价价格调节、时钟显示,而且能很大程度上实现扩展功能,同时可方便日后对系统进行升级。3.1 AT89S51单片机及其引脚说明AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4KB的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用 8位微处理器于单片芯片中,具有高性价比。AT89S51是一个有40个引脚的芯片,引脚配置如图3.1 AT89S51引脚配置所示。AT89S51芯片的40个引脚功能为:VCC 电源电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISKRTO位缺省为RESET输出高电平打开状态。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P0口 一组8位漏极开路型双向I/O口。也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输图3.1 AT89S51引脚配置入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口 一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,P1接收低8位地址。P1口部分端口引脚及功能如表3-1 P1口特殊功能所示。表3-1 P1口特殊功能P1口引脚特殊功能P1.5MOSI(用于ISP编程)P1.6MOSI(用于ISP编程)P1.7SCK(用于ISP编程)P2口 一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收低8位地址。P3口 一个带内部上拉电阻的8位双向I/O口。P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表3-2 P3口特殊功能所示。P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号。表3-2 P3口特殊功能P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6 (外部数据存储器写选通)P3.7 (外部数据存储器读选通)PSEN/ 程序储存允许输出是外部程序存储器的读先通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN/信号。EA/VPP 外部访问允许。欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。Flash存储器编程时,该引脚加上+12V的编程电压VPP。第四章 硬件电路方案设计4.1方案比较与确定出租车计价系统在模拟车轮转动方面上可以采用两种方案:一种是用555芯片产生固定频率的脉冲模拟。这种方案产生脉冲频率很高,但是调节比较麻烦。第二种是采用槽型光耦的通与断来模拟转动,使用电机转盘对光耦的切割来产生脉冲。这种方案产生脉冲频率不高,但是转速可以轻松调节。经过仔细考虑和权衡,由于两种方案均有其优点,决定同时使用两种方案,两个模拟源可以根据需要任意使用。在显示问题上,可以使用7279芯片控制显示,也可以通过动态扫描实现显示功能。考虑到动态扫描使用的硬件较少,本着简捷易行的原则,采用了动态扫描的方案。4.2 里程计算、计价单元的设计里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,在该系统中用两种脉冲发生器进行模拟,送到单片机,经处理计算,送给显示单元的。其原理如图4.1 和图4.2所示。89S51单片机车轮小磁铁霍尔传感器图4.1 A44E测距原理图图4.2 模拟测距示意图 555电路来产生一个脉冲来模拟霍尔传感器输出的里程脉冲,选择P1.0口作为信号的输入端,内部采用外部中断0,555脉冲产生电路输出一个脉冲信号直接加到IO口P1.0上(产生的频率F=1/T=1.414/(R1+2R2)C1),由单片机的内部算法对脉冲计数,通过计算将脉冲增加体现在金额和里程上。具体电路如图4.3所示。图4.3 555脉冲产生电路图光偶电路是以光为媒介传输电信号的一种光一电转换器件,是另一种模拟将出租车行驶时车轮所转的圈数转换成脉冲信号送入数据处理电路。H92B4是光偶电路的基本元件,它由发光源和受光器两部分组成,发光源为发光二极管,受光器为光敏三极管。当发光源与受光器之间存在光线阻挡时,输出端由高电平变为低电平,恢复光通路又变为高电平,就这样形成一个个的高低电平脉冲。选择P3.4.口作为信号的输入端,内部采用外部中断0,光偶电路输出一个脉冲信号直接加到外部中断0上,引起单片机的中断,对脉冲计数,通过计算将脉冲增加体现在金额和里程上。具体电路如图4.4所示。图4.4 H92B4光偶电路4.3 显示单元电路设计由于设计要求有里程、金额、等待时间、速度显示输出,所以采用8位LED数码管的分屏显示。显示电路由8数据锁存器74HC573、译码器74LS138、8位LED数码管组成。电路如图6所示,74HC573用于连接51单片机和LED数码管,51单片机的P0.0P0.7分别顺序对应数码管的AG和dp,当位P0.0为1时,对应A段点亮,以次类推。而51单片机的P2.0P2.2接74LS138的ABC输入口,其8个输出口分别接到8个数码管,这样就可以进行3-8译码控制8个数码管的显示。显示模块电路图见图4.5各个数码管显示内容示意图见图4.6图4.5显示单元电路图4.6 数码管显示内容示意图(上下复用)4.4 键盘显示模块设计键盘采用4*4矩阵按键,接在AT89S51的P3口,当有键按下时,相对应的接口被置0。矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。如图4.7所示,行线接P3.0P3.3,列线接P3.4P3.7。图4.7 矩阵键盘电路按键S1:单程按键。按下该键,里程随脉冲数成正比累加,在里程大于3公里后,金额数按单程价格为2元/公里进行累加。按键S2:往返按键。按下该键,里程随脉冲数成正比累加,在里程大于3公里后,金额数按单程价格为1.5元/公里进行累加。按键S3:暂停按键。到达目的地后,按“暂停” 键,里程计数器可暂停计价。按键S4:清除按键。按“清除” 键,里程计数器能将记录数据(里程、等待时间与价格等)自动清0。按键S5:查询按键。按“查询”键,能自动显示总等待时间。按键S6:返回按键。按下该键,回到显示里程数、金额状态。4.5 AT24C02掉电存储单元的设计 掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02 是ATMEL 公司的 2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到 2.5V,额定电流为 1mA,静态电流 10Ua(5.5V),芯片内的资料可以在断电的情况下保存 40年以上,而且采用8 脚的 DIP 封装,使用方便。其电路如图4.8所示。图4.8 掉电存储电路原理图图中 R8、R10 是上拉电阻,其作用是减少 AT24C02的静态功耗,由于 AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线 SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。4.6 设计总框图第五章 系统的软件设计本系统的软件设计主要可分为主程序模块、定时计数中断程序、里程计数中断服务程序、中途等待中断服务程序、显示子程序服务程序、键盘服务程序六大模块。下面对各部分模块作介绍。5.1 系统主程序设计在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。主程序流程图如图5.1 所示。当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。开始初始化键盘扫描程序是否有键按扫描键值返回键6?显示里程、金额单程键1?单程函数调用往返键2?往返函数调用暂停键3?清除键4?查询键5?T0暂停计时显示全部清零显示等待时间、速度图5.1 程序流程图5.2 定时中断服务程序在定时中断服务程序中,每1/40s 产生一次中断,当产生40 次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。其程序流程如图5.2 所示。中断开始中断初始化是否到40次脉冲计数测量速度返回图5.2 定时中断服务程序5.3 显示服务程序数码管在一般情况下显示里程数,价格两项数据,当按下键时则跳转显示等待时间和车速两项数据。当按下键时则返回显示里程数,价格两项数据。程序流程图如图5.3:开始Dispflag是否为真接收等待时间车速显示数据接收里程数,价格显示数据转为为字型码输出显示短延时返回NY图5.3 显示服务程序5.4 键盘服务程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。六个按键分别对应六个简单的子程序。如果按键S1被按下,则调用第一个子程序:begin_signal标志置1,将s_or_d标志置0;表示单程开始。 如果按键S2被按下,则调用第一个子程序:begin_signal标志置1,将s_or_d标志置1; 表示往返开始。如果按键S3被按下,则调用第一个子程序:begin_signal标志置0; 表示暂停。如果按键S4被按下,则调用第一个子程序:pulse_counter标志置0,将t置0; 表示将显示数据清空。如果按键S5被按下,则调用第一个子程序:dispflag标志置1; 表示进入查询界面。如果按键S6被按下,则调用第一个子程序:dispflag标志置0; 表示退出查询界面。第六章 心得体会经过这些天有关于里程计数器的课程设计,使我对单片机的应用有了更深的了解。在课程设计的过程中,还是碰到了许多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一些相关的应用软件没能熟练掌握。通过这几天晚上的苦想和反复调试,以及参考网上的程序,最终还是没能把问题解决。通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握,凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。通过本次课程设计,又使我学到了许多书本上无法学到的知识,也使也深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:AT89S51单片机及其引脚说明、555引脚图及其引脚功能等,为本次课程设计提供了一定的资料。也为以后的进一步学习打下了坚实的基础。参考文献1、 张友德 赵志英 涂时亮 编 单片微型机原理、应用与实验 上海:复旦大学出版社2005.12 全书2 徐光翔 单片机原理接口及应用 南京大学出版社3 张淑清等. 单片微型计算机接口技术及其应用 北京:国防工业出版社, 4 王晓君等. MCS-51及兼容单片机原理与选型 北京:电子工业出版社5张鑫、华臻、陈书谦单片机原理及应用M电子工业出版社,2005P1101366丁元杰、吴大伟单片微机实题集与实验指导书M机械工业出版社, 2004P124125附录附录1 总体设计电路图附录2 元件清单 类型名称数量类型名称数量电阻240或2704三极管9013 475048050 44.7K58550 410K10光耦233k4蜂鸣器191K4直流电机1电容104 3电机转盘1100uF1AT24C021螺丝2DIP8座1光电传感器1万能板1附录3 全部源程序该出租车里程计数器的系统软件设计源程序如下:#include #define uint unsigned int #define uchar unsigned char#define rate 15/脉冲数与里程数的比例 sbit P20=P20; sbit P21=P21; sbit P22=P22; /接 74 LS 138 控制 数码管 sbit pulse_in=P10;bit pulse=1;bit dispflag;uchar num,temp;bit begin_signal;/ 开始标志 bit s_or_d;/单程 还是往返 标志 uint times; / 定时次数 uint pulse_counter;uint record;uint s_temple;uint s,m; /里程数 s 和 金额 m uint t; /等待时间 char baiwei,shiwei,gewei,xiaoshu; char keynum; /键盘 的键值 uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40; /0f and -的字型码(共阴) /声明 区 void delay(uint x); void init();void divide(uint counter);void select(bit a,bit b,bit c);void debouncer(void);uchar keyscan(void);void delay(uint x)/延时 x ms .uint i,j;for(i=0;ix;i+)for(j=0;j=150;j+);void init() / 定时器初始化 TMOD=0x01;TH0=(65536-25000)/256;/ timer=1/40sTL0=(65536-25000)%256;EA=1;ET0=1;TR0=1;void divide(uint counter)if(dispflag=0) P0=0x00;counter=counter*10/rate;xiaoshu=counter%10;gewei=(counter/10)%10;shiwei=(counter/100)%10;baiwei=(counter/1000)%10;if(counter=30)m=80;elseif(s_or_d=0)m=80+2*(counter-30)+t/300;else m=80+1.5*(counter-30)+t/300;select(1,1,0);/显示里程数目 P0=tablexiaoshu;delay(2); select(0,1,0);P0=tablegewei|0x80;delay(2);select(1,0,0);P0=tableshiwei;delay(2);select(0,0,0);P0=tablebaiwei;delay(2);xiaoshu=m%10;gewei=(m/10)%10;shiwei=(m/100)%10;baiwei=(m/1000)%10;select(1,1,1); /显示 金额数目 P0=tablexiaoshu;delay(2); select(0,1,1);P0=tablegewei|0x80;delay(2);select(1,0,1);P0=tableshiwei;delay(2);select(0,0,1);P0=tablebaiwei;delay(2); else P0=0x00;xiaoshu=t%10;gewei=(t/10)%10;shiwei=(t/100)%10;baiwei=(t/1000)%10;select(1,1,0);/显示 等待时间 P0=tablexiaoshu;delay(2); select(0,1,0);P0=tablegewei;delay(2);select(1,0,0);P0=tableshiwei;delay(2);select(0,0,0);P0=tablebaiwei;delay(2); void timer0() interrupt 1TH0=(65536-25000)/256;TL0=(65536-25000)%256;if(begin_signal=1)if(pulse_in!=pulse)delay(10);if(pulse_in!=pulse)pulse=pulse;pulse_counter+;if (times=39)/1 s timer completedtimes=0;if(pulse_counter-record)5)/如果 每秒 脉冲小于 5 , 则等待时间 增加 t+;record=pulse_counter;times+;/s_temple=pulse_counter/2;/divide(s_temple);void select(bit a,bit b,bit c)P20=a;P21=b;P22=c;void debouncer(void)/ 防抖动 程序 uint i;for(i=0;i4800;i+);uchar keyscan() P3=0x7f; temp=P3; temp=temp&0x0f;while(temp!=0x0f) delay(10); temp=P3;temp=temp&0x0f; while(temp!=0x0f) temp=P3;switch(temp)case 0x7e:num=1;break;case 0x7d:num=2;break;case 0x7b:num=3;break;case 0x77:num=4;break;while(temp!=0x0f)temp=P3;temp=temp&0x0f; P3=0xbf; temp=P3; temp=temp&0x0f;while(temp!=0x0f)delay(10);temp=P3;temp=temp&0x0f;while(temp!=0x0f)temp=P3; switch(temp)case 0xbe:num=5;break;case 0xbd:num=6;break;case 0

温馨提示

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

评论

0/150

提交评论