收藏 分销(赏)

基于-MCS-51单片机里程表设计实现.doc

上传人:二*** 文档编号:4511585 上传时间:2024-09-26 格式:DOC 页数:67 大小:365.50KB 下载积分:5 金币
下载 相关 举报
基于-MCS-51单片机里程表设计实现.doc_第1页
第1页 / 共67页
本文档共67页,全文阅读请下载到手机保存,查看更方便
资源描述
- - 前言 汽车是现代生活中不可或缺的一种重要交通工具,传统的指针式的里程表伴随着汽车的诞生就一直为人们承受,不过,新生事物不会因传统的存在而停顿它前进的步伐,数码科技在今天已渗透到工业,农业,民用等产品的点点滴滴。新概念的车速里程表最直观的变化就是用大屏幕的液晶取代指针式表盘,直接用数字显示时速,里程,以及其他一些诸如油耗、时钟、环境温度等参数。直观的呈现给使用者。 由于单片机体积小,可以把它做到产品的部,取代老式机械零件,缩小产品体积,增强功能,实现智能化。因此广泛的被用在智能产品中。Intel公司的MCS-51系列单片机在近年来广泛流行。本文即介绍一种基于MCS-51单片机的里程表的设计与实现。 本文先对里程表设计中所需设备作了详细介绍,对设计中存在的问题进展了说明;对硬件和软件局部的设计和实现作了认真的分析;给出了系统的建模过程及相应的系统模型,在Lab2000p仿真实验系统上进展了仿真,并对仿真结果进展了分析。 一系统概述 本系统由信号采集处理模块、单片机8031、系统化LCD显示模块、系统软件组成。其号采集处理模块以霍尔传感器为核心器件,将不同的转速信号转换成相应的脉冲信号,并送到单片机的T1引脚;对单片机进展设置,使部的定时器/计数器timer0工作在定时状态,timer1工作在计数状态,利用部定时器T0对脉冲输入引脚T1进展控制,这样就能准确地检测到设定时间加到T1引脚的脉冲数,一个脉冲即代表着车子前进一个轮长,对脉冲数进展处理就可得到里程和速度的数据;将数据送到LCD显示模块进展显示。该系统原理框图如图1所示。 系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/命令子模块、频率测量模块、速度里程计算模块、速度和里程显示数据LCD字库显示模块等。 脉冲信号 单片机 LCD 图1 系统原理框图 二 根本原理与设计方案 〔一〕元器件简介 1 霍尔传感器简介 霍耳效应:1879年E.H. 霍尔发现,如果对位于磁场(B)中的导体(d)施加一个电压(v),该磁场的方向垂直于所施加电压的方向,那么那么在既与磁场垂直又和所施加电流方向垂直的方向上会产生另一个电压(UH),人们将这个电压叫做霍尔电压,产生这种现象被称为霍尔效应。 霍尔效应从本质上讲是运动的带电粒子在磁场中受洛仑兹力作用而引起的偏转。当带电粒子〔电子或空穴〕被约束在固体材料中,这种偏转就导致在垂直电流和磁场的方向上产生正负电荷的积累,从而形成附加的横向电场。 通有电流 I 的金属或半导体板置于磁感强度为 B 的均匀磁场中,磁场的方向和电流方向垂直,在金属板的第三对外表间就显示出横向电势差 U H 的现象称为霍耳效应。U H 就称为霍耳电势差。 实验测定,霍耳电势差的大小,和电流 I 及磁感强度B成正比,而与板的厚度d 成反比。即霍耳电势差 UH = RHIB/d, 霍尔转速传感器: 霍尔转速传感器的外形图和与磁场的作用关系如2图所示。磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。霍尔传感器检测转速示意图如图3。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈,霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率就可以得出圆盘的转速。 霍尔电流传感器本身已经存在滤波电路,输出无须再加装滤波,可直接供单片机的0~5V的 AD采集或直接送到单片机的中断输入引脚,信号非常稳定,而且抗干扰能力很强。霍尔电流传感器反响速度一般在7微妙,不用考虑单片机循环判断的时间. 假设在圆盘上贴上多块磁钢,那么圆盘每转一圈,输出的脉冲信号将相应增加,单位时间测到的脉冲数将增多,测出的转速也将更加精细。本设计建模时采用一个圆盘上贴一个磁钢进展模拟。实际制作中可以贴上多块磁钢,即可以克制因车轮转速太慢而在设定时间测不到脉冲的问题。 图2 霍尔转速传感器的外形图 图3 霍尔传感器检测转速示意图 2 AT89C51芯片简介 AT89C51是一个低电压,高性能CMOS 8位单片机,片含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器〔RAM〕,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片置通用8位中央处理器和Flash存储单元,置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。     AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出〔I/O〕端口,同时含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进展编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发本钱。 AT89C51具有如下功能特性: 〔1〕兼容MCS—51指令系统; 〔2〕32个双向I/O口; 〔3〕两个16位可编程定时/计数器; 〔4〕1个串行中断; 〔5〕两个外部中断源; 〔6〕4k可反复擦写(>1000次〕Flash ROM; 〔7〕128x8bit部RAM; 〔8〕6个中断源; 〔9〕低功耗空闲和掉电模式; (10)软件设置睡眠和唤醒功能。 3 液晶显示模块SED1520芯片介绍 本设计仿真实验系统采用的液晶显示屏置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。图形液晶显示模块有两种连接方式。一种为直接方式,一种为间接控制方式。本设计采用直接控制方式。直接控制方式就是将液晶显示模块的接口作为存储器或I/O 设备直接挂在计算机总线上。计算机通过地址译码控制E1和E2的选通;读/写操作信号R/W由地址线A1控制;命令/数据存放器选择信号AO 由地址线A0控制。实际电路如图4所示。地址映射如下〔地址中的X由LCD CS决定,可参见地址译码局部说明〕 0X000H 0X001H 0X002H 0X003H 0X004H 0X005H 0X006H 0X007H 写E1指令 写E1数据 读E1状态 读E1数据 写E2指令 写E2数据 读E2状态 读E2数据 图4 液晶屏显示控制电路 SED1520芯片介绍 SED1520液晶显示驱动器是一种点阵图形式液晶显示驱动器,它可直接与8位微处理器相连,集行、列驱动器于一体,因此使用起来十分方便,作为藏式控制器被广泛应用于点阵数较少的液晶显示模块。 〔1〕SED1520的特性 ①置显示RAM区RAM容量为2560〔32行80列〕位。RAM中的1位数据控制液晶屏上一个点的亮灭状态:“1”表示亮, “0”表示暗。 ②具有16个行驱动口和16个列驱动口 ,并可级联两个SED1520实现32行驱动。 ③可直接与80系列微处理器相连,亦可直接与68系列微处理器相连。 ④驱动占空比为1/16或1/32。 ⑤可以与SED1520配合使用,以便扩展列驱动口数目。 〔2〕SED1520指令与显示RAM构造 SED1520指令系统比拟简单,共13条,除读状态指令、读显示RAM数据指令外,其他指令均为写操作,并且读写指令均为单字节指令。在送出每条指令时,必须进展控制器状态检测,状态字节的含义如下: D7:1/0,模块忙/准备就绪; D5:1/0,模块显示关/开; D4:1/0,模块复位/正常; D3-D0:未用 在指令使用中,关键要分清显示行、列设置和显示页面设置的关系。单片SED1520可驱动61×16液晶屏,其部显示RAM相对于0每8行为一个显示页面。本设计所用的字符液晶模块由两块SED1520级联驱动,其中一个工作在主工作方式下,另一个工作在从方式下,主工作方式SED1520负责上半屏16行的驱动和左半屏的61列驱动,从工作方式的SED1520那么负责下半屏16行的驱动和右半屏的61列驱动,使能信号E1、E2用来区分具体控制的是那一片SED1520。这样两片SED1520级联可驱动122×32图形点阵液晶显示屏,可完成图形显示,也可显示七个半〔16×16点阵〕汉字。 〔3〕指令系统 SED1520液晶显示驱动器共有13种显示指令。本文用到的局部指令见下表 表1 局部传送指令表 指  令 代    码 功    能 R/W D/I D7 D6 D5 D4 D3 D2 D1 D0 显示开/关 指令 0 0 1 0 1 0 1 1 1 1/0 全部显示开关,0:关 1:开 显示开场行 0 0 1 1 0 开场行〔0~31〕 显示RAM中数据的起始行 页地址设置 0 0 1 0 1 1 1 0 0~3 设置显示页地址 X address 列地址设置 0 0 0 列地址〔0~121〕 设置显示列地址 Y address 写显示数据 0 1 写入的数据 写显示数据到RAM 静态驱动 0 0 1 0 1 0 0 1 0 0/1 1:静态驱动,0:动态驱动 刷新率设置 0 0 1 0 1 0 1 0 0 0/1 1:1/32,0:1/16 完毕 0 0 1 1 1 0 1 1 1 1 释放读写 复位 0 0 1 1 1 0 0 0 1 1 设置为初始状态 〔二〕设计方法 1 51单片机定时器/计数器的根本构造及工作原理 MCS-51单片机部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能〔如工作方式、定时时间、启动方式等〕均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能存放器〔控制存放器和方式存放器〕。 (1) 定时器/计数器的构造如下。 从上面定时器/计数器的构造图中我们可以看出,16位的定时/计数器分别由两个8位专用存放器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。其地址依次为8AH-8DH。每个存放器均可单独。这些存放器是用于存放定时或计数初值的。此外,其部还有一个8位的定时器方式存放器TMOD和一个8位的定时控制存放器TCON。这些存放器之间是通过部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停顿,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0〔P3.4〕和T1〔P3.5〕输入。 〔2〕定时计数器的原理 16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率 fcount=1/12osc。如果晶振为12MHz,那么计数周期为: T=1/〔12×106〕Hz×1/12=1μs 。这是最短的定时周期。假设要延长定时时间,那么需要改变定时器的初值,并要适中选择定时器的长度〔如8位、13位、16位等〕。当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。假设一个机器周期采样值为1,下一个机器周期采样值为0,那么计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。例如,如果选用12MHz晶振,那么最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。 当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU 当前操作。CPU也可以重新设置定时器工作方式,以改变定时器的操作。由此可见,定时器是单片机中效率高而且工作灵活的部件。 〔3〕控制存放器 定时器/计数器T0和T1有2个控制存放器TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON存放器中另有4位用于中断系统。 定时器/计数器方式存放器TMOD 定时器方式控制存放器TMOD在特殊功能存放器中,字节地址为89H,无位地址。TMOD的格式如下列图所示。 D7 D6 D5 D4 D3 D2 D1 D0 GATE C\T M1 M0 GATE C\T M1 M0 控制定时器T1 控制定时器T0 GATE:门控位。GATE=0时,定时器由软件控制位TR0或TR1来控制启停。TRi位为1时,定时器启动开场工作;为0时定时器停顿工作。 GATE=1时,定时器的启动停顿由外部中断引脚和TRi位共同控制。只有当外部中断引脚INT0或INT1为高时,TR0或TR1置1才能启动定时器工作。 C\T:功能选择位。当C\T=0时设置为定时器工作模式;当C\T=1时设置为计数器工作模式。 M1、M0:工作方式选择位。定时器\计数器有4种工作方式,由M0、M1来定义: M0 M1 操作方式 功能说明 0 0 方式0 13位定时器\计数器,TLi只用低5位 0 1 方式1 16位定时器\计数器 1 0 方式2 自动重装初值的8位定时器\计数器,THi的值在保持不变,TLi溢出时,THi的值自动装入TLi中。 1 1 方式3 仅适用于T0,T0分成2个独立的8位计数器;T1停顿计数。 定时器/计数器方式控制存放器TMOD不能进展位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。复时,TMOD所有位均为0。 定时器/计数器控制存放器TCON TCON在特殊功能存放器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进展位操作。 TCON的作用是控制定时器的启、停,标志定时器溢出和中断情况。 TCON的格式如下列图所示。其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IE0和IT0位用于中断系统。 8FH 8EH 8DH 8CH 8BH8AH 89H 88H (位地址) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 各位定义如下: TF1和TF0: 分别为定时器1和定时器0溢出标志。当计数器计满产生溢出时,由硬件自动置“1”,并可申请中断。进入中断效劳程序后,由硬件自动清零。 TR1和TR0: 定时器1和定时器0启动控制位。 IE1和IE0: 外部中断引脚INT0或INT1中断请求标志位。当外部中断源有请求时其对应的中断标志位置“1”。其复位方式由触发方式来设置。 IT1和IT0: 为外部中断1和外部中断0的触发方式选择位。ITi设置为“0”时为电平触发;设置为“1”时为边沿触发方式。 TCON中低4位与中断有关。由于TCON 是可以位寻址的,因而如果只是清溢出或启动定时器工作,可以用位操作命令。例如:执行“CLR TF0”后那么清定时器0的溢出;执行“SETB TR1”后可启动定时器1开场工作。 〔4〕定时器/计数器的初始化 由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进展初始化,使其按设定的功能工作。初始化的步骤如下: 1、确定工作方式〔即对TMOD赋值〕; 2、预置定时或计数的初值〔可直接将初值写入TH0、TL0或TH1、TL1〕; 3、根据需要开放定时器/计数器的中断〔直接对IE位赋值〕; 4、启动定时器/计数器〔假设已规定用软件启动,那么可把TR0或TR1置“1”;假设已规定由外中断引脚电平启动,那么需给外引脚步加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开场计数或定时〕。 〔5〕定时器/计数器的四种工作方式 定时器T0或T1无论用作定时器或计数器都有4种工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全一样的工作状态。通过对方式存放器TMOD中M1、M2位的设置,可选择四种工作方式。 工作方式0 工作方式0是一个13位的定时/计数器,16位计数器只用了高8位THi和低5位〔TLi的D4~D0位〕,TLi的高3位未用。 工作方式1 16位的定时/计数器,原理同工作方式0 工作方式2 自动重装计数器。16位计数器拆成两个8位计数器,低8位作计数器用,高8位用于保存计数初值。当低8位计数产生溢出时,将TFi位置1,同时又将保存在高8位中的计数初值重新装入低8位计数器中,又继续计数,循环重复不止。 工作方式3 方式3只适用定时器T0,T0在该模式下被拆成两个独立的8位计数器TH0和TL0。其中TL0使用原来T0的一些控制位和引脚,它们是:C/T,GATE,TR0,TF0和T0〔P3.4〕引脚INT0〔〔P3.2〕引脚。此方式下的TL0除作8位计数器外,其功能和操作与方式0,方式1完全一样,可作计数也可作定时用。 该方式下的TH0,此时只可作简单的部定时器功能。它借用原定时器1的控制位和溢出标志位TR1和TF1,同时占用了T1的中断源。TH0的启动和关闭幕式仅受TR1的控制,TR1=1,TH0启动定时;TR1=0,TH0停顿定时工作。 该方式下的T1仍可设置为方式0、方式1、方式2,用于任何不需要中断的场合。 2 频率测量 本设计所采用的霍尔传感器由一个磁钢和一个霍尔器件组成。磁钢被贴在非磁性圆盘上,随圆盘一起旋转,霍尔器件固定在圆盘附近,圆盘每转一圈,霍尔器件将产生一个脉冲,一个脉冲即代表了一个圆盘的周长。本设计中霍尔传感器产生的脉冲将被送到单片机的部定时计数器timer1的T1口。部定时计数器Timer0工作在定时状态,Timer1工作在计数状态。Timer0和Timer1均工作在模式1。本设计中Timer0产生0.5秒的定时。Timer1将对0.5秒对加到T1脚的脉冲进展计数。假设0.5秒timer1计数到N个脉冲。那么圆盘的转动频率为 N / 0.5=2N 。假设是将磁钢贴于汽车的轮轴上,那么汽车轮子每转一圈,霍尔器件产生一个脉冲。对脉冲频率进展处理,即可转化为车速。对脉冲数进展累加再乘以轮子的长度,即可得到里程数据。 3 基于伟福Lab2000p仿真实验系统的建模过程 〔1〕利用直流电机对车轮变速进展模拟 利用Lab2000p实验系统上的直流电机、DAC0832数模变换模块、单片机8031、指拨开关K0-K7构成一个能够控制电机转速的控制系统,对车轮的变速情况进展模拟。电机的转速通过软件编程,由指拨开关的不同输入状态进展控制。 实验系统连线情况如下: 连线 连结孔1 连结孔2 1 K0 P10 2 K1 P11 3 K2 P12 4 K3 P13 5 K4 P14 6 K5 P15 7 K6 P16 8 K7 P17 9 DA_CS CS2 10 -5V—+5V 至D/A (2)频率测量模块的建立 在直流电机转动圆盘边缘贴有一块磁钢,在圆盘附近装有霍尔传感器,圆盘每转动一次即产生一个脉冲,脉冲输出接单片机的P35引脚。利用单片机8031的部定时/计数器Timer0进展定时,Timer1对脉冲进展计数。 实验系统连线情况如下: 连线 连结孔1 连结孔2 1 脉冲输出 P35 〔3〕 数据显示 利用实验箱上的LCD模块进展数据显示,将LCD设置成两行,第一行显示里程数据,第二行显示速度数据。数据的显示主要由软件编程进展控制。 实验系统连线情况如下: 连线 连结孔1 连结孔2 1 LCD_CS CS0 〔4〕 系统硬件框图如下 单 片 机 指拨开关 直流电机 霍尔传感器 液晶 显示 三、程序设计 整个程序的设计基于Lab2000p仿真系统,其中速度和里程的计算都采取了近似处理 (一)系统程序流程总框图 开场 初始化 显示汉字 延时 清屏 显示汉字 电机控制 方向显示 计数脉冲 速度 里程显示 本系统软件采用模块化设计方法。整个系统由初始化模块、电机转速控制模块、电机转向显示模块、频率测量模块、速度,里程显示模块、汉字显示模块以及其他功能模块组成。 程序设计中,以60H、61H、62H三个地址为数据缓冲区,60H〔DATA1〕用于存储每0.5s 计数到的脉冲数,用于计算速度;61H〔DATA2〕、62H(DATA3)两个地址用于存储计数到的脉冲的累加数据,用于计算里程。 〔二〕主要模块程序设计 1 电机转速控制模块程序设计 电机转速的控制模块由指拨开关、单片机、DAC0832数模变换芯片组成。指拨开关K0-K7接单片机的P10-P17(P1口),通过指拨开关可输入数据0-255,单片机将指拨开关输入的数据输出到DAC0832数模变换芯片,通过数模变换,转换成-8V-+8V的电压驱动直流电机。从而到达对电机转速的控制。输入数据等于128时,输出电压为0V;数据大于128时,输出电压大于0V;输入数据小于128时,输出电压小于0V。 mov p1,#0ffh ;设置P1口为输入口 mov dptr,#cs0832 mov A, p1 movx dptr,A 2 频率测量模块程序设计 霍尔传感器产生的脉冲被送到单片机的部定时/计数器timer1的T1口。部定时/计数器Timer0工作在定时状态,Timer1工作在计数状态。Timer0和Timer1均工作在模式1。本设计中Timer0产生0.5秒的定时。Timer1将对0.5秒对加到T1脚的脉冲进展计数。假设0.5秒timer1计数到N个脉冲。那么圆盘的转动频率为 N / 0.5=2N 。 JISHU: MOV IE,#10001010B ;翻开中断开关 MOV TMOD,#MODE ;设定部定时器/计数器的工作模式 MOV SP,#70H MOV 40H,#00H MOV TH1,#00H ;将timer1的计数存放器赋初值0 MOV TL1,#00H ;将timer1的计数存放器赋初值0 SETB TR1 ;启动timer1 AA: CLR F1 ;标志位赋0 MOV TH0,#03CH ;定时器写入初值 MOV TL0,#0B0H SETB TR0 ;翻开定时器timer0 JNB F1 , $ ;等待50ms INC 40H MOV A, 40H CJNE A, #09H,AA ;定时中断重复10次 CLR TR1 ;关闭计数器timer1 MOV DATA1,TL1 ;取出timer1计数值给DATA1 MOV A,DATA1 ADD A,DATA2 MOV DATA2,A ;将计数值累加到DATA2 JNC BB ;检查计数是否溢出 INC DATA3 ;有溢出那么DATA3加1 BB: RET ;----------------------定时中断子程序 TIMER : CLR TR0 SETB F1 RETI Timer0工作在模式1时,TLO、THO计数存放器各使用8位,而28=256,设置计数初值时,把计数起点的值处以256,将余数放入TLO计数存放器,将商数放入THO计数存放器。本实验系统所采用12MHz的晶振,定时器所计数的脉冲的周期为1us。设计每50ms产生一次定时中断,需计数50000个脉冲,那么装入计数存放器的计数初值为65536-50000=15536,装入THO计数存放器的初值为15536/256=60(03CH), 装入TLO计数存放器的初值为176(0B0H). 程序流程图如下: 开场 初始化 设定计数器初值,并启动 F1=0 定时器赋初值,并启动 F1=0?? yes no 40H加1 40H=9 ? No Yes 停顿计数,取出计数值 将计数值累加到DATA2 CY=0 ? YES No DATA3加1 返回主程序 主程序 Timer 关闭定时器 F1=1 返回 Timer0中断子程序 3 液晶显示程序的设计 本设计中速度、里程的数据由液晶显示模块显示,所用的液晶显示模块由SED1520芯片驱动,首先必须对液晶显示模块进展初始化,编写相应的字库,编写读写程序等。液晶显示程序的设计包括了初始化程序、清屏程序、写指令代码子程序、写显示数据子程序、读显示数据子程序、中文显示子程序、数字显示程序以及中文字库和数字字库的编写。程序详见附表。 4 速度、里程显示程序的设计 本设计中霍尔传感器产生的脉冲被送到单片机的部定时计数器timer1的T1口。部定时计数器Timer0工作在定时状态,Timer1工作在计数状态。Timer0和Timer1均工作在模式1。本设计中Timer0产生0.5秒的定时。Timer1将对0.5秒对加到T1脚的脉冲进展计数。假设0.5秒timer1计数到N个脉冲。那么圆盘的转动频率为 N / 0.5=2N 。假设是将磁钢贴于汽车的轮轴上,那么汽车轮子每转一圈,霍尔器件产生一个脉冲。对脉冲频率进展处理,即可转化为车速。对脉冲数进展累加再乘以轮子的长度,即可得到里程数据。 本程序对汽车运行的实际情况进展模拟。设计程序时假设汽车轮子的周长约为2m,最后在显示屏显示的速度单位是km/h,里程单位是km。 速度的计算如下: 假设0.5秒计数到N个脉冲,那么轮子的转动频率为2N,车速为2N×2 m/s,也即2N×2×3.6 km/h 。设计中作近似处理,处理为14N km/h 。 显示时先显示百位,再依次显示十位、个位。 ;-------------------------------------速度处理显示子程序 SPEED: PUSH A MOV A,DATA1 MOV B,#0EH ;计数值乘以14 MUL AB MOV B, #64H ;除数赋值100 DIV AB ;得到百位显示数据代码 MOV CODE_ , A ;百位显示字库代码 MOV A,B LCALL BB1 ;调用速度写显示数据程序 MOV B,#0AH ;除数赋值10 DIV AB ;得到十位显示数据代码 MOV CODE_ , A ;十位显示字库代码 MOV CTEMP, #08H ;显示后移8列 MOV A,B LCALL BB1 ;调用速度写显示数据程序 MOV CODE_ , A ;个位显示字库代码 MOV CTEMP, #10H LCALL BB1 MOV DATA1,#00H ;数据缓冲区清零 POP A RET DATA2,DATA3存储计数到的脉冲总数,DATA2能存储255个脉冲,每次计数溢出,那么DATA3加1,DATA3里的数据权重为256.这样两个字节的数据能计数最多65536个脉冲,也即131072 米 。130多公里。实际制作里程表时只要适当增加数据缓冲区的数量,即可对最大显示里程进展扩大。 程序设计过程中,对里程数据的显示作了近似处理 ;-------------------------------------里程处理显示子程序 MILAGE: PUSH A MOV A,DATA3 MOV B,#0C8H ;除以200 显示百位里程数据 DIV AB MOV CODE_, A MOV CTEMP,#00H MOV A,B LCALL BB2 MOV B,#014H ; 显示十位里程数据 DIV AB MOV CODE_,A MOV CTEMP, #08H MOV A,B LCALL BB2 MOV B, #02H ; 显示个位里程数据 DIV AB MOV CODE_ ,A MOV CTEMP, #10H MOV A,B LCALL BB2 MOV CODE_ ,#0AH MOV CTEMP, #17H ;显示小数点 LCALL BB2 CJNE A,#00H, M1 MOV A,DATA2 ;DATA2除以50得到小数点 MOV B,#032H 后第一位 DIV AB MOV CODE_, A MOV CTEMP, #1EH MOV A,B LCALL BB2 MOV B,#05H ;余数再除以5得到小数点后第二位 DIV AB MOV CODE_ ,A MOV CTEMP, #26H LCALL BB2 POP A RET M1 : MOV A,DATA2 MOV B,#032H DIV AB ADD A,#05H ;显示大于0.50公里时代码加5 MOV CODE_, A MOV CTEMP, #1EH MOV A,B LCALL BB2 MOV B,#05H DIV AB MOV CODE_ ,A MOV CTEMP, #26H LCALL BB2 POP A RET ;---------------------------第二行速度数据显示调用子程序 BB1: PUSH A MOV PAGE_,#00H MOV A,CTEMP ADD A,#3CH MOV COLUMN,A LCALL DIW_PR POP A RET ;-------------------------第一行里程数据显示调用子程序 BB2: PUSH A MOV PAGE_,#02H MOV A,CTEMP ADD A,#3CH MOV COLUMN,A LCALL DIW_PR POP A RET 5 方向显示模块程序设计 该程序对从指拨开关输入的数据作出反响,假设输入的数据为128,那么在LCD显示屏上显示“停顿〞的标志,假设输入的数据大于128,那么显示“正转〞的标志,假设输入的数据小于128,那么显示“反转〞的标志。 fxb: MOV CTEMP ,#00H CJNE A,#80h,fx MOV PAGE_,#00H ;停顿 MOV A,CTEMP ADD
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服