您好,欢迎来到刀刀网。
搜索
您的当前位置:首页基于mcs51单片机的里程表的设计与实现word

基于mcs51单片机的里程表的设计与实现word

来源:刀刀网



前 言

汽车是现代生活中不可或缺的一种重要交通工具,传统的指针式的里程表伴随着汽车的诞生就一直为人们接受,不过,新生事物不会因传统的存在而停止它前进的步伐,数码科技在今天已渗透到工业,农业,民用等产品的点点滴滴。新概念的车速里程表最直观的变化就是用大屏幕的液晶取代指针式表盘,直接用数字显示时速,里程,以及其他一些诸如油耗、时钟、环境温度等参数。直观的呈现给使用者。

由于单片机体积小,可以把它做到产品的内部,取代老式机械零件,缩小产品体积,增强功能,实现智能化。因此广泛的被用在智能产品中。Intel公司的MCS-51系列单片机在近年来广泛流行。本文即介绍一种基于MCS-51单片机的里程表的设计与实现。

本文先对里程表设计中所需设备作了详细介绍,对设计中存在的问题进行了说明;对硬件和软件部分的设计和实现作了认真的分析;给出了系统的建模过程及相应的系统模型,在Lab2000p仿真实验系统上进行了仿真,并对仿真结果进行了分析。



系统概述

本系统由信号采集处理模块、单片机8031、系统化LCD显示模块、系统软件组成。其中信号采集处理模块以霍尔传感器为核心器件,将不同的转速信号转换成相应的脉冲信号,并送到单片机的T1引脚;对单片机进行设置,使内部的定时器/计数器timer0工作在定时状态,timer1工作在计数状态,利用内部定时器T0对脉冲输入引脚T1进行控制,这样就能精确地检测到设定时间内加到T1引脚的脉冲数,一个脉冲即代表着车子前进一个轮长,对脉冲数进行处理就可得到里程和速度的数据;将数据送到LCD显示模块进行显示。该系统原理框图如图1所示。

系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/命令子模块、频率测量模块、速度里程计算模块、速度和里程显示数据LCD字库显示模块等。

脉冲信号


单片机

LCD

1系统原理框图

二基本原理与设计方案
(一)元器件简介
1 霍尔传感器简介
霍耳效应1879E.H.霍尔发现,如果对位于磁场(B)中的导体(d)施加一个电压(v),该磁场的方向垂直于所施加电压的方向,那么则在既与磁场垂直又和所施加电流方向垂直的方向上会产生另一个电压(UH),人们将这个电压叫做霍尔电压,产生这种现象被称为霍尔效应。

霍尔效应从本质上讲是运动的带电粒子在磁场中受洛仑兹力作用而引起的偏转。当带电粒子(电子或空穴)被约束在固体材料中,这种偏转就导致在垂直电流和磁场的方向上产生正负电荷的积累,从而形成附加的横向电场。

通有电流I的金属或半导体板置于磁感强度为B的均匀磁场中,磁场的方向和电流方向垂直,在金属板的第三对表面间就显示出横向电势差UH 的现象称为霍耳效应。UH 就称为霍耳电势差。

实验测定,霍耳电势差的大小,和电流比。即霍耳电势差 UH = RHIB/d ,

I及磁感强度B成正比,而与板的厚度d成反



霍尔转速传感器:霍尔转速传感器的外形图和与磁场的作用关系如2图所示。磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。霍尔传感器检测转速示意图如图3。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈,霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率就可以得出圆盘的转速。

霍尔电流传感器本身已经存在滤波电路,输出无须再加装滤波,可直接供单片机的 而且抗干扰能力很强。0~5VAD采集或直接送到单片机的中断输入引脚,信号非常稳定,
霍尔电流传感器反应速度一般在7微妙,不用考虑单片机循环判断的时间.

若在圆盘上贴上多块磁钢,则圆盘每转一圈,输出的脉冲信号将相应增加,单位时间内测到的脉冲数将增多,测出的转速也将更加精细。本设计建模时采用一个圆盘上贴一个磁钢进行模拟。实际制作中可以贴上多块磁钢,即可以克服因车轮转速太慢而在设定时间内测不到脉冲的问题。

2 霍尔转速传感器的外形图



3霍尔传感器检测转速示意图

2 ATC51 芯片简介
是一个低电压,高性能CMOS8 位单片机,片内含4kbytes 的可反复擦写的Flash只读程序存储器和128bytes 的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位处理器和Flash存储单元,内置功能强大的微型计算机的ATC51提供了高性价比的解决方案。

ATC51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,216位可编程定时计数器,2个全双工串行通信口,ATC51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

ATC51具有如下功能特性:
1)兼容MCS—51指令系统;
232个双向I/O口;
3)两个16位可编程定时/计数器;
41个串行中断;
5)两个外部中断源;
64k可反复擦写(>1000次)FlashROM
7128x8bit内部RAM
86个中断源;
9)低功耗空闲和掉电模式;
(10)软件设置睡眠和唤醒功能。

3 液晶显示模块SED1520芯片介绍

本设计仿真实验系统采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1E2分别选通,以控制显示屏的左右两半屏。图形液晶显示模块有两种连接方式。一种为直接访问方式,一种为间接控制方式。本设计采用直接控制方式。直接控制方式就是将液晶显示模块的接口作为存储器或IO设备直接挂在计算机总线上。计算机通过地址译码控制E1E2的选通;读/写操作信号RW由地址线A1控制;命令/数据寄存器选择信号AO由地址线
A0控制。实际电路如图4所示。地址映射如下(地址中的XLCDCS决定,可参见地址译码部分说明)



0X000H

0X001H

0X002H

0X003H

0X004H

0X005H

0X006H

0X007H

E1指令

E1数据

E1状态

E1数据

E2指令

E2数据

E2状态

E2数据

4 液晶屏显示控制电路

SED1520芯片介绍

SED1520液晶显示驱动器是一种点阵图形式液晶显示驱动器,它可直接与8位微处理器相连,集行、列驱动器于一体,因此使用起来十分方便,作为内藏式控制器被广泛应用于点阵数较少的液晶显示模块。

1SED1520的特性
内置显示RAMRAM容量为25603280列)位。RAM中的1位数据控制液晶屏上一个点的亮灭状态:“1”表示亮,“0”表示暗。

具有16个行驱动口和16个列驱动口并可级联两个SED1520实现32行驱动。

可直接与80系列微处理器相连,亦可直接与68系列微处理器相连。

驱动占空比为116132

可以与SED1520配合使用,以便扩展列驱动口数目。

2SED1520指令与显示RAM结构
SED1520指令系统比较简单,共13条,除读状态指令、读显示RAM数据指令外,其他指令均为写操作,并且读写指令均为单字节指令。在送出每条指令时,必须进行控制器状态检测,状态字节的含义如下:
D71/0,模块忙/准备就绪;
D51/0,模块显示关/开;
D41/0,模块复位/正常;
D3-D0:未用
在指令使用中,关键要分清显示行、列设置和显示页面设置的关系。单片SED1520可驱动61×16液晶屏,其内部显示RAM相对于COM08行为一个显示页面。本设计所用的



字符液晶模块由两块SED1520



级联驱动,其中一个工作在主工作方式下,另一个工作在从方式下,主工作方式SED1520负责上半屏16行的驱动和左半屏的61列驱动,从工作方式的SED1520则负责下半屏16行的驱动和右半屏的61列驱动,使能信号E1E2用来区分具体控制的是那一片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

开始行(031

显示RAM 中数据的起始行

页地址设置

0

0

1

0

1

1

1

0

03

设置显示页地址 X address

列地址设置

0

0

0

列地址(0121

设置显示列地址 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

11/32,01/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位专用寄存器组成,:T0TH0TL0构成;T1TH1TL1构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0P3.4)和T1P3.5)输入。

2)定时计数器的原理
16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为 。这是最短的定时周期。若要延长12MHz,则计数周期为:
T=1/12×106Hz×1/12=1μs定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。当定时器/计数器为计数工作方式时,通过引脚T0T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由10的跳变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU当前操作。CPU也可以重新设置定时器工作方式,以改变定时器的操作。由此可见,定时器是单片机中效率高而且工作灵活的部件。



3)控制寄存器
定时器/计数器T0T12个控制寄存器TMODTCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断系统。

定时器/计数器方式寄存器TMOD

定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为H,无位地址。TMOD

的格式如下图所示。

D7 D6 D5 D4 D3 D2 D1 D0

GATE

C\T

M1

M0

GATE

C\T

M1

M0

控制定时器T1

控制定时器T0

GATE:门控位。GATE=0时,定时器由软件控制位TR0TR1来控制启停。TRi位为1时,定时器启动开始工作;为0时定时器停止工作。

GATE=1时,定时器的启动停止由外部中断引脚和TRi位共同控制。只有当外部中断引脚INT0INT1为高时,TR0TR11才能启动定时器工作。

C\T:功能选择位。当C\T=0时设置为定时器工作模式;当C\T=1时设置为计数器工作模式。

M1M0:工作方式选择位。定时器\计数器有4种工作方式,由M0M1来定义:

M0

M1

操作方式

功能说明

0

0

方式0

13 位定时器\计数器,TLi 只用低5

0

1

方式1

16 位定时器\计数器

1

0

方式2

自动重装初值的8 位定时器\计数器,THi 的值在保持不

变,TLi 溢出时,THi 的值自动装入TLi 中。

1

1

方式3

仅适用于T0T0 分成2 个的8 位计数器;T1 停止计数。

定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。复时,TMOD所有位均为0

定时器/计数器控制寄存器TCON

TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)88H8FH,由于

有位地址,十分便于进行位操作。TCON的作用是控制定时器的启、停,标志定时器溢出和

中断情况。TCON的格式如下图所示。其中,TFl,TRl,TF0TR0位用于定时器/计数

;IEl,ITl,IE0IT0位用于中断系统。



8FH 8EH 8DH 8CH 8BH 8AH H 88H (位地址)

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

各位定义如下:
TF1TF0:分别为定时器1和定时器0溢出标志。当计数器计满产生溢出时,由硬件自 动置“1”,并可申请中断。进入中断服务程序后,由硬件自动清零。

TR1TR0:定时器1和定时器0启动控制位。

IE1IE0: 外部中断引脚INT0INT1中断请求标志位。当外部中断源有请求时其对 应的中断标志位置“1”。其复位方式由触发方式来设置。

IT1IT0: 为外部中断1和外部中断0的触发方式选择位。ITi设置为“0”时为电平 触发;设置为“1”时为边沿触发方式。

TCON中低4位与中断有关。由于TCON是可以位寻址的,因而如果只是清溢出或启动定时器工作,可以用位操作命令。例如:执行“CLRTF0”后则清定时器0的溢出;执行“SETBTR1”后可启动定时器1开始工作。

4)定时器/计数器的初始化
由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。初始化的步骤如下:
1、确定工作方式(即对TMOD赋值);
2、预置定时或计数的初值(可直接将初值写入TH0TL0TH1TL1;
3、根据需要开放定时器/计数器的中断(直接对IE位赋值);
4、启动定时器/计数器(若已规定用软件启动,则可把TR0TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚步加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。

5)定时器/计数器的四种工作方式
定时器T0T1无论用作定时器或计数器都有4种工作方式:方式0、方式1、方式2和方式3。除方式3,T0T1有完全相同的工作状态。通过对方式寄存器TMODM1M2位的设置,可选择四种工作方式。

工作方式0
工作方式0是一个13位的定时/计数器,16位计数器只用了高8THi和低5位(TLiD4~D0位),TLi的高3位未用。

工作方式1
16位的定时/计数器,原理同工作方式0

工作方式2
自动重装计数器。16位计数器拆成两个8位计数器,低8位作计数器用,高8位用于保存计数初值。当低8位计数产生溢出时,将TFi位置1,同时又将保存在高8位中的计数初值重新装入低8位计数器中,又继续计数,循环重复不止。

工作方式3



方式3只适用定时器T0T0在该模式下被拆成两个的8位计数器TH0TL0。其中TL0使用原来T0的一些控制位和引脚,它们是:C/TGATETR0TF0T0P3.4)引脚INT0((P3.2)引脚。此方式下的TL0除作8位计数器外,其功能和操作与方式0,方式1完全相同,可作计数也可作定时用。

该方式下的TH0,此时只可作简单的内部定时器功能。它借用原定时器1的控制位和溢出标志位TR1TF1,同时占用了T1的中断源。TH0的启动和关闭幕式仅受TR1的控制,TR1=1TH0启动定时;TR1=0TH0停止定时工作。

该方式下的T1仍可设置为方式0、方式1、方式2,用于任何不需要中断的场合。

2 频率测量

本设计所采用的霍尔传感器由一个磁钢和一个霍尔器件组成。磁钢被贴在非磁性圆盘上,随圆盘一起旋转,霍尔器件固定在圆盘附近,圆盘每转一圈,霍尔器件将产生一个脉冲,一个脉冲即代表了一个圆盘的周长。本设计中霍尔传感器产生的脉冲将被送到单片机的内部定时计数器timer1T1口。内部定时计数器Timer0工作在定时状态,Timer1工作在计数状态。Timer0Timer1均工作在模式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仿真系统,其中速度和里程的计算都采取了近似处理

()系统程序流程总框图

开始

初始化

显示汉字

延时

清屏

显示汉字

电机控制

方向显示

计数脉冲

速度里程显示

本系统软件采用模块化设计方法。整个系统由初始化模块、电机转速控制模块、电机

转向显示模块、频率测量模块、速度,里程显示模块、汉字显示模块以及其他功能模块组

成。

程序设计中,以60H61H62H三个地址为数据缓冲区,60HDATA1)用于存储每

0.5s计数到的脉冲数,用于计算速度;61HDATA2)、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 频率测量模块程序设计
霍尔传感器产生的脉冲被送到单片机的内部定时/计数器timer1T1口。内部定时/计数器Timer0工作在定时状态,Timer1工作在计数状态。Timer0Timer1均工作在模式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 ;有溢出则DATA31
BB: RET
;----------------------定时中断子程序
TIMER: CLR TR0
SETB F1
RETI

Timer0工作在模式1时,TLOTHO计数寄存器各使用8位,而28=256,设置计数初

值时,把计数起点的值处以256,将余数放入TLO计数寄存器,将商数放入THO计数寄存器。本实验系统所采用12MHz的晶振,定时器所计数的脉冲的周期为1us。设计每50ms产生一次定时中断,需计数50000个脉冲,则装入计数寄存器的计数初值为65536-50000=15536,装入THO计数寄存器的初值为15536/256=60(



03CH),装入TLO计数寄存器的初值为176(0B0H).

程序流程图如下:



开始

初始化

设定计数器初值,

并启动

Timer

关闭定时器

F1=1

返回
F1=0
Timer0中断子程序定时器赋初值,
并启动

yes
F1=0

no
40H1

No
40H=9?

Yes
停止计数,
取出计数值

将计数值累
加到DATA2

YES
CY=0?

No
DATA31

返回主程序

主程序



3 液晶显示程序的设计
本设计中速度、里程的数据由液晶显示模块显示,所用的液晶显示模块由SED1520芯片驱动,首先必须对液晶显示模块进行初始化,编写相应的字库,编写读写程序等。液晶显示程序的设计包括了初始化程序、清屏程序、写指令代码子程序、写显示数据子程序、读显示数据子程序、中文显示子程序、数字显示程序以及中文字库和数字字库的编写。程序详见附表。

4 速度、里程显示程序的设计
本设计中霍尔传感器产生的脉冲被送到单片机的内部定时计数器timer1T1口。内部定时计数器Timer0工作在定时状态,Timer1工作在计数状态。Timer0Timer1均工作在模式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×2m/s,也即2N×2×3.6km/h 。设计中作近似处理,处理为14Nkm/h

显示时先显示百位,再依次显示十位、个位。

;-------------------------------------速度处理显示子程序SPEED: PUSH A
MOV A,DATA1
MOV B,#0EH ;计数值乘以14
MUL AB
MOV B, #H ;除数赋值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个脉冲,每次计数溢出,则DATA31DATA3里的数据权重为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 A,#2AH
MOV COLUMN,A
MOV CODE_,#09H
LCALL CCW_PR
MOV PAGE_,#00H ;显示“0”
MOV A,CTEMP
ADD A,#3CH
MOV COLUMN,A
MOV CODE_,#00H
LCALL DIW_PR
MOV PAGE_,#00H ;显示“0”
MOV A,CTEMP
ADD A,#44H
MOV COLUMN,A
MOV CODE_,#00H
LCALL DIW_PR
MOV PAGE_,#00H ;显示“0”
MOV A,CTEMP
ADD A,#4CH
MOV COLUMN,A
MOV CODE_,#00H
LCALL DIW_PR
RET
fx: ANL a,#80h
CJNE a,#80h,fx1
MOV PAGE_,#00H ;正转 MOV A,CTEMP
ADD A,#2aH
MOV COLUMN,A
MOV CODE_,#07H
LCALL CCW_PR
RET
fx1: MOV PAGE_,#00H ;反转 MOV A,CTEMP
ADD A,#2aH
MOV COLUMN,A
MOV CODE_,#08H
LCALL CCW_PR
RET



参考文献

[1]张义和,陈敌北,例说8051,人民邮电出版社
[2]贾好来,MCS-51单片机原理及应用,机械工业出版社
[3]赵健领,51系列单片机开发宝典,电子工业出版社
[4]余锡存,微机原理及接口技术,西安电子科技大学出版社
[5]刘同法,陈忠平,单片机基础与最小系统实践,北京航空航天大学出版社[6]何宏,单片机原理与接口技术,国防工业出版社
[7]楼然苗,51系列单片机设计实例,北京航空航天大学出版社
[8]刘迎春,MCS-51单片机原理及应用教程,清华大学出版社



附 录

完整的程序
CS0832 EQU 0a000h
MODE EQU 01010001b ;timer1:mode1、计数器 ;timer0:mode1、定时器DATA1 EQU 60H
DATA2 EQU 62H
DATA3 EQU H
CWADD1 EQU 08000H ;写指令代码地址(E1DWADD1 EQU 08001H ;写显示数据地址(E1CRADD1 EQU 08002H ;读状态字地址(E1
DRADD1 EQU 08003H ;读显示数据地址(E1

CWADD2 EQU 08004H ;写指令代码地址(E2
DWADD2 EQU 08005H ;写显示数进地址(E2
CRADD2 EQU 08006H ;读状态字地址(E2
DRADD2 EQU 08007H ;读显示数据地址(E2
PD1 EQU 3DH ;122/2 分成左右两半屏122x32COLUMN EQU 30H ;列数据寄存器
PAGE_ EQU 31H ;页地址寄存器D1,DO:页地址CODE_ EQU 32H ;字符代码寄存器
COUNT EQU 33H ;计数器
DIR equ 34h
CTEMP EQU 38H
COM EQU 20H ;指令寄存器
DAT EQU 21H ;数据寄存器

ORG 00h
JMP MAIN
ORG 0BH
LJMP TIMER

;主程序段
MAIN:
LCALL INIT ;显示器初始化
LCALL CLEAR ;显示模块内存清零
MOV CTEMP,#0
MOV DATA1,#00H
MOV DATA2,#00H
MOV DATA3,#00H
LCALL DISPLAY1 ;显示汉字“珍爱生命,注意安全”



LCALL CLEAR ;清屏
LCALL DISPLAY2 ;显示汉字“里程、速度”等

LOOP: LCALL KONGZHI ;电机转速控制
LCALL JISHU
LCALL SPEED ;调用速度显示程序
LCALL MILAGE ;调用里程显示程序
LJMP LOOP
;--------------------------------------------
JISHU: MOV IE,#10001010B ;打开中断开关
MOV TMOD,#MODE ;设定内部定时器/计数器的工作模式 MOV SP,#70H
MOV 40H,#00H
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
AA: CLR F1
MOV TH0,#03CH
MOV TL0,#0B0H
SETB TR0
JNB F1 , $
INC 40H
MOV A, 40H
CJNE A, #09H,AA
CLR TR1
MOV DATA1,TL1
MOV A,DATA1
ADD A,DATA2
MOV DATA2,A
JNC BB
INC DATA3
BB: RET
;----------------------
TIMER: CLR TR0
SETB F1
RETI
;---------------------------------------
KONGZHI:mov p1,#0ffh ;电机转速控制
mov dptr,#cs0832
mov A, p1
movx @dptr,A
LCALL fxb
RET
;------------------------------



DISPLAY1: ;显示“珍爱生命,注意安全”MOV COLUMN,CTEMP
MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#20H
MOV COLUMN,A
MOV CODE_,#10
LCALL CCW_PR

MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#30H
MOV COLUMN,A
MOV CODE_,#11
LCALL CCW_PR

MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#40H
MOV COLUMN,A
MOV CODE_,#12
LCALL CCW_PR

MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#50H
MOV COLUMN,A
MOV CODE_,#13
LCALL CCW_PR

MOV PAGE_,#00H
MOV A,CTEMP
ADD A,#20H
MOV COLUMN,A
MOV CODE_,#14
LCALL CCW_PR

MOV PAGE_,#00H
MOV A,CTEMP
ADD A,#30H
MOV COLUMN,A
MOV CODE_,#15
LCALL CCW_PR



MOV PAGE_,#00H
MOV A,CTEMP
ADD A,#40H
MOV COLUMN,A
MOV CODE_,#16
LCALL CCW_PR

MOV PAGE_,#00H
MOV A,CTEMP
ADD A,#50H
MOV COLUMN,A
MOV CODE_,#17
LCALL CCW_PR
LCALL DELAY
ret
;----------------------------------
DISPLAY2:
MOV PAGE_,#02H ;显示“里” MOV COLUMN,CTEMP
MOV CODE_,#00H
LCALL CCW_PR

MOV PAGE_,#02H ;显示“程”
MOV A,CTEMP
ADD A,#10H
MOV COLUMN,A
MOV CODE_,#01H
LCALL CCW_PR

MOV PAGE_,#02H ; 显示km
MOV A,CTEMP
ADD A,#69H
MOV COLUMN,A
MOV CODE_,#04H
LCALL CCW_PR

MOV PAGE_,#02H ;显示“:”
MOV A,CTEMP
ADD A,#20H
MOV COLUMN,A
MOV CODE_,#06H
LCALL CCW_PR



MOV PAGE_,#00H ;显示“速”
MOV A,CTEMP
MOV COLUMN,A
MOV CODE_,#02H
LCALL CCW_PR

MOV PAGE_,#00H ;显示“度”
MOV A,CTEMP
ADD A,#10H
MOV COLUMN,A
MOV CODE_,#03H
LCALL CCW_PR

MOV PAGE_,#00H ;显示“km”
MOV A,CTEMP
ADD A,#59H
MOV COLUMN,A
MOV CODE_,#04H
LCALL CCW_PR

MOV PAGE_,#00H ;显示“/h”
MOV A,CTEMP
ADD A,#69H
MOV COLUMN,A
MOV CODE_,#05H
LCALL CCW_PR

MOV PAGE_,#00H ;显示“:”
MOV A,CTEMP
ADD A,#20H
MOV COLUMN,A
MOV CODE_,#06H
LCALL CCW_PR
RET
;----------------------------------延时子程序
DELAY: MOV R7,#200
MOV R5,#20
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
DJNZ R5,D1
RET
;-------------------------------------------速度处理显示子程序SPEED: PUSH A



MOV A,DATA1
MOV B,#0DH
MUL AB
MOV B, #H
DIV AB
MOV CODE_ , A
MOV A,B
LCALL BB1
MOV B,#0AH
DIV AB
MOV CODE_ , A
MOV CTEMP, #08H
MOV A,B
LCALL BB1
MOV CODE_ , A
MOV CTEMP, #10H
LCALL BB1
MOV DATA1,#00H
POP A
RET
;------------------------------------------里程处理显示子程序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
MOV B,#032H
DIV AB
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
M1: MOV A,DATA2
MOV B,#032H
DIV AB
ADD A,#05H
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
;------------------------------------------电机转向显示子程序fxb: MOV CTEMP ,#00H
CJNE A,#80h,fx
MOV PAGE_,#00H ;停止
MOV A,CTEMP
ADD A,#2AH
MOV COLUMN,A
MOV CODE_,#09H
LCALL CCW_PR
MOV PAGE_,#00H ;显示“0”
MOV A,CTEMP
ADD A,#3CH
MOV COLUMN,A
MOV CODE_,#00H
LCALL DIW_PR
MOV PAGE_,#00H ;显示“0”
MOV A,CTEMP
ADD A,#44H
MOV COLUMN,A
MOV CODE_,#00H
LCALL DIW_PR
MOV PAGE_,#00H ;显示“0”
MOV A,CTEMP
ADD A,#4CH
MOV COLUMN,A
MOV CODE_,#00H
LCALL DIW_PR
RET
fx: ANL a,#80h
CJNE a,#80h,fx1
MOV PAGE_,#00H ;正转
MOV A,CTEMP
ADD A,#2aH
MOV COLUMN,A
MOV CODE_,#07H
LCALL CCW_PR



RET
fx1: MOV PAGE_,#00H ;反转 MOV A,CTEMP
ADD A,#2aH
MOV COLUMN,A
MOV CODE_,#08H
LCALL CCW_PR
ret

;----------------------------------------------------------;初始化程序
INIT: MOV COM, #0E2H ;复位
LCALL PRO
LCALL PR3
MOV COM, #0A4H ;关闭休闭状态
LCALL PRO
LCALL PR3
MOV COM, #0A9H ;设置132占空比
LCALL PRO
LCALL PR3
MOV COM, #0A0H ;正向排序设置
LCALL PRO
LCALL PR3
MOV COM, #0C0H ;设置显示起始行为第一行
LCALL PRO
LCALL PR3
MOV COM, #0AFH ;开显示设置
LCALL PRO
LCALL PR3
RET
;------------------------------------------------
;清屏
CLEAR: MOV R4,#00H ;页面地址暂存器设置
CLEAR1: MOV A,R4 ;取页地址值
ORL A,#0B8H ;""页面地址设置代码
MOV COM,A ;页面地址设置
LCALL PRO
LCALL PR3
MOV COM,#00H ;列地址设置为"0"
LCALL PRO
LCALL PR3
MOV R3,#50H ;一页清80个字节
CLEAR2: MOV DAT,#00H ;显示数据为"0"



LCALL PR1
LCALL PR4
DJNZ R3,CLEAR2 ;页内字节清零循环
INC R4 ;页地址暂存器加一
CJNE R4,#04H,CLEAR1;RAM 区清零循环
RET
;-----------------------------------
;1.写指令代码子程序(E1
PRO: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ;设置读状态字地址
PR01: MOVX A,@DPTR ;读状态字
JB ACC.7,PR01 ;""标志为句"0",否再读 MOV DPTR,#CWADD1 ;设置写指令代码地址
MOV A,COM ;取指令代码
MOVX @DPTR,A ;写指令代码
POP DPH
POP DPL
RET
;------------------------------------
;2.写显示数据子程序(E1
PR1: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ;设置读状态字地址
PR11: MOVX A,@DPTR ;读状态宇
JB ACC.7,PR11 ;""标志为"0",否再读 MOV DPTR,#DWADD1 ;设置写显示数据地址
MOV A,DAT ;取数据
MOVX @DPTR,A ;写数据
POP DPH
POP DPL
RET
;-------------------------------------
;3.读显示数据子程序(E1
PR2: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ;设置读状态字地址
PR21: MOVX A,@DPTR ;读状态字
JB ACC.7,PR21 ;""标志为"0",否再读 MOV DPTR,#DRADD1 ;设置读显示数据地址
MOVX A,@DPTR ;读数据
MOV DAT,A ;存数据
POP DPH
POP DPL



RET
;-------------------------------------
;4.写指令代码子程序(E2
PR3: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD2 ;设置读状态字地址
PR31: MOVX A,@DPTR ;读状态字
JB ACC.7,PR31 ;""陈志为"0",否再读 MOV DPTR,#CWADD2 ;设置写指令代码地址
MOV A,COM ;取指令代码
MOVX @DPTR,A ;写指令代码
POP DPH
POP DPL
RET
;-------------------------------------
; 5.写显示数据子程序(E2
PR4: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD2 ;设置读状态字地址
PR41: MOVX A,@DPTR ;读状态字
JB ACC.7,PR41 ;""标志为"0",否再读 MOV DPTR, #DWADD2 ;设置写显示数据地址
MOV A,DAT ;取数据
MOVX @DPTR,A ;写数据
POP DPH
POP DPL
RET
;---------------------------------------
; 6.读显示数据子程序(E2
PR5: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD2 ;设置读状态字地址
PR51: MOVX A,@DPTR ;读状态字
JB ACC.7,PR51 ;""标志为"0",否再读 MOV DPTR,#DRADD2 ;设置写显示数据地址
MOVX A,@DPTR ;读数据
MOV DAT,A ;存数据
POP DPH
POP DPL
RET

; 中文显示子程序
CCW_PR: MOV DPTR,#CCTAB ;确定字符字模块首地址 MOV A,CODE_ ;取代码



MOV B,#20H ;字模块宽度为32个字节 MUL AB ;代码×32
ADD A,DPL ;字符字模块首地址
MOV DPL,A ;字模库首地址+代码×32 MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH COLUMN ;列地址入栈
PUSH COLUMN ;列地址入栈
MOV CODE_,#00H ;代码寄存器借用为间址寄存器CCW_1: MOV COUNT,#10H ;计数器设置为16
MOV A,PAGE_ ;读页地址寄存器
ANL A,#03H ;取页地址有效值
ORL A,#0B8H ;""页地址设置代码
MOV COM,A ;设置页地址
LCALL PRo
LCALL PR3
POP COLUMN ;取列地址值
MOV A,COLUMN ;读列地址寄存器
CLR C
SUBB A,#PD1 ;列地址-模块参数
JC CCW_2 ;0为左半屏显示区域(E1 MOV COLUMN,A ;≥0 为右半屏显示区域(E2 MOV A,PAGE_
SETB ACC.3 ;设置区域标志位。

MOV PAGE_,A ;"0"E1,"1"E2
CCW_2: MOV COM,COLUMN ;设置列地址值
MOV A,PAGE_
JNB ACC.3,CCW_3 ;判区域标志以确定设置哪个控制器 LCALL PR3 ;区域E2
LJMP CCW_4
CCW_3: LCALL PRO ;区域E1
CCW_4: MOV A,CODE_ ;取间址寄存器值
MOVC A,@A+DPTR ;取汉字字模数据
MOV DAT,A ;写数据
MOV A,PAGE_
JNB ACC.3,CCW_5
LCALL PR4 ;区域E2
LJMP CCW_6
CCW_5: LCALL PR1 ;区域E1
CCW_6: INC CODE_ ;间址寄存器加一
INC COLUMN ;列地址寄存器加一
MOV A,COLUMN ;判列地址是否超出区域范围、 CJNE A,#PD1,CCW_7



CCW_7: JC CCW_8 ;未超出则继续
MOV A,PAGE_ ;超出则判是否在区域E2
JB ACC.3,CCW_8 ;在区域E2则退出
SETB ACC.3 ;在区域E1则修改成区域E2 MOV PAGE_,A
MOV COM,#00H ;设置区域E2列地址为"0"
LCALL PR3
CCW_8: DJNZ COUNT,CCW_4 ;当页循环
MOV A,PAGE_ ;读页地址寄存器
JB ACC.7,CCW_9 ;判完成标志D7,"1"则完成退出 INC A ;否则页地址加一
SETB ACC.7 ;置完成位为"1"
CLR ACC.3
MOV PAGE_,A
MOV CODE_,#10H ;间址寄存器设置为16
LJMP CCW_1 ;大循环
CCW_9: RET

;--------------------------------------
; 数字显示程序
DIW_PR: MOV DPTR,#DITAB ;确定字符字模块首地址
MOV A,CODE_ ;取代码
MOV B,#10H ;字模块宽度为16个字节 MUL AB ;代码×16
ADD A,DPL ;字符字模块首地址
MOV DPL,A ;字模库首地址+代码×16 MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH COLUMN ;列地址入栈
PUSH COLUMN ;列地址入栈
MOV CODE_,#00H ;代码寄存器借用为间址寄存器DIW_1: MOV COUNT,#08H ;计数器设置为16
MOV A,PAGE_ ;读页地址寄存器
ANL A,#03H ;取页地址有效值
ORL A,#0B8H ;""页地址设置代码
MOV COM,A ;设置页地址
LCALL PRo
LCALL PR3
POP COLUMN ;取列地址值
MOV A,COLUMN ;读列地址寄存器
CLR C
SUBB A,#PD1 ;列地址-模块参数
JC DIW_2 ;0为左半屏显示区域(E1



MOV COLUMN,A ;≥0 为右半屏显示区域(E2MOV A,PAGE_
SETB ACC.3 ;设置区域标志位。

MOV PAGE_,A ;"0"E1,"1"E2
DIW_2: MOV COM,COLUMN ;设置列地址值
MOV A,PAGE_
JNB ACC.3,DIW_3 ;判区域标志以确定设置哪个控制器 LCALL PR3 ;区域E2
LJMP DIW_4
DIW_3: LCALL PRO ;区域E1
DIW_4: MOV A,CODE_ ;取间址寄存器值
MOVC A,@A+DPTR ;取数字字模数据
MOV DAT,A ;写数据
MOV A,PAGE_
JNB ACC.3,DIW_5
LCALL PR4 ;区域E2
LJMP DIW_6
DIW_5: LCALL PR1 ;区域E1
DIW_6: INC CODE_ ;间址寄存器加一
INC COLUMN ;列地址寄存器加一
MOV A,COLUMN ;判列地址是否超出区域范围、 CJNE A,#PD1,DIW_7
DIW_7: JC DIW_8 ;未超出则继续
MOV A,PAGE_ ;超出则判是否在区域E2
JB ACC.3,DIW_8 ;在区域E2则退出
SETB ACC.3 ;在区域E1则修改成区域E2
MOV PAGE_,A
MOV COM,#00H ;设置区域E2列地址为"0"
LCALL PR3
DIW_8: DJNZ COUNT,DIW_4 ;当页循环
MOV A,PAGE_ ;读页地址寄存器
JB ACC.7,DIW_9 ;判完成标志D7,"1"则完成退出 INC A ;否则页地址加一
SETB ACC.7 ;置完成位为"1"
CLR ACC.3
MOV PAGE_,A
MOV CODE_,#08H ;间址寄存器设置为8
LJMP DIW_1 ;大循环
DIW_9: RET
;-----------------------------------------------------------

;中文字符库
CCTAB:



db000h,000h,0ffh,091h,091h,091h,091h,0ffh ;0db 91h, 91h, 91h, 91h, 0ffh, 00h, 00h, 00h
db 00h, 40h, 44h, 44h, 44h, 44h, 44h, 7fh
db 44h, 44h, 44h, 44h, 44h, 40h, 000h, 000h

db010h,012h,0d2h,0feh,091h,011h,080h,0bfh ;1db 0a1h,0a1h,0a1h,0a1h,0bfh,080h,000h,000h
db 004h,003h,000h,0ffh,000h,041h,044h,044h
db 044h,07fh,044h,044h,044h,044h,040h,000h

db040h,042h,0cch,000h,004h,0e4h,024h,024h ;2db 0ffh,024h,024h,024h,0e4h,004h,000h,000h
db 040h,020h,01fh,020h,048h,049h,045h,043h
db 07fh,041h,043h,045h,049h,040h,040h,000h

db000h,000h,0fch,004h,024h,024h,0fch,0a5h ;3db 0a6h,0a4h,0fch,024h,024h,024h,000h,000h
db 080h,060h,01fh,080h,080h,042h,046h,02ah
db 012h,012h,02ah,046h,082h,080h,000h,000h

db008h,0f8h,000h,000h,080h,080h,080h,000h ;km 4 db080h,080h,080h,080h,080h,080h,080h,000h
db 020h,03fh,024h,002h,02dh,030h,020h,000h
db 020h,03fh,020h,000h,03fh,020h,000h,03fh

db000h,000h,000h,000h,080h,060h,018h,000h ;/h 5 db008h,0f8h,000h,080h,080h,080h,000h,000h
db 000h,020h,018h,006h,001h,000h,000h,000h
db 020h,03fh,020h,000h,000h,020h,03fh,020h

db000h,000h,0c0h,0c0h,000h,000h,000h,000h ; : 6 db000h,000h,000h,000h,000h,000h,000h,000h
db 000h,000h,030h,030h,000h,000h,000h,000h
db 000h,000h,000h,000h,000h,000h,000h,000h

db0f0h,0f0h,000h,0f0h,0f0h,000h,000h,0f0h ;正转7db 0f0h,0e0h,0e0h,0c0h,0c0h,080h,080h,000h
db 01eh,01fh,000h,01eh,01fh,000h,000h,01fh
db 01fh,00fh,00fh,007h,007h,003h,003h,001h

db000h,080h,080h,0c0h,0c0h,0e0h,0e0h,0f0h ;反转8db 0f0h,000h,000h,0f0h,0f0h,000h,0f0h,0f0h
db 001h,003h,003h,007h,007h,00fh,00fh,01fh
db 01fh,000h,000h,01fh,01eh,000h,01fh,01eh



db000h,000h,000h,0f0h,0f0h,000h,000h,0f0h ;停止9db 0f0h,000h,000h,000h,000h,000h,000h,000h
db 000h,000h,000h,03fh,03fh,000h,000h,03fh
db 03fh,000h,000h,000h,000h,000h,000h,000h

DB42H,42H,0FEH,42H,42H,20H,90H,88H,44H,23H,14H,88H,10H,20H,20H,00H; DB08H,08H,87H,84H,84H,48H,48H,24H,24H,12H,11H,08H,04H,03H,00H,00H;""10

DB00H,40H,0B2H,96H,9AH,92H,0F6H,9AH,93H,91H,99H,97H,91H,90H,30H,00H; DB40H,20H,0A0H,90H,4CH,47H,2AH,2AH,12H,1AH,26H,22H,40H,0C0H,40H,00H;""11

DB00H,80H,60H,1EH,10H,10H,10H,10H,0FFH,12H,10H,10H,98H,10H,00H,00H; DB01H,40H,40H,41H,41H,41H,41H,41H,7FH,41H,41H,41H,41H,61H,40H,00H;""12

DB40H,40H,0A0H,90H,0A8H,0A4H,0A2H,21H,0A2H,0A4H,0A8H,90H,0B0H,60H,20H,00H;DB00H,00H,3FH,08H,08H,08H,1FH,00H,0FFH,00H,10H,30H,1FH,00H,00H,00H;""13

DB10H,60H,01H,86H,60H,08H,08H,08H,09H,0FEH,08H,08H,08H,08H,08H,00H; DB04H,04H,0FEH,01H,40H,40H,41H,41H,41H,7FH,41H,41H,41H,41H,40H,00H;""14

DB10H,10H,12H,0D2H,56H,5AH,0D2H,53H,52H,5AH,56H,0D2H,12H,12H,10H,00H;DB00H,20H,38H,03H,3AH,42H,42H,4BH,52H,42H,42H,63H,08H,30H,00H,00H;""15

DB80H,90H,8CH,84H,84H,0F4H,0A5H,86H,84H,84H,84H,84H,94H,8CH,84H,00H; DB80H,80H,80H,40H,47H,28H,28H,10H,28H,24H,43H,0C0H,40H,00H,00H,00H;""16

DB00H,80H,40H,60H,50H,48H,44H,0C3H,44H,48H,50H,70H,60H,20H,00H,00H; DB00H,40H,40H,44H,44H,44H,44H,7FH,44H,44H,44H,46H,44H,60H,40H,00H;""17

;------------------------------------
DITAB:
db0f0h,008h,008h,008h,008h,0f0h,000h,000h ;0 db01fh,020h,020h,020h,020h,01fh,000h,000h

db000h,010h,010h,0f8h,000h,000h,000h,000h ;1 db000h,020h,020h,03fh,020h,020h,000h,000h

db000h,070h,008h,008h,008h,088h,070h,000h ;2 db000h,030h,028h,024h,022h,021h,030h,000h

db000h,030h,008h,088h,088h,048h,030h,000h ;3



db000h,018h,020h,020h,020h,011h,00eh,000h

db000h,000h,0c0h,020h,010h,0f8h,000h,000h ;4 db000h,007h,004h,024h,024h,03fh,024h,000h

db000h,0f8h,008h,088h,088h,088h,008h,000h ;5 db000h,019h,021h,020h,020h,020h,01fh,000h

db000h,0f0h,008h,008h,008h,018h,000h,000h ;6 db000h,01fh,021h,021h,021h,021h,01eh,000h

db000h,038h,008h,008h,008h,0c8h,038h,000h ;7 db000h,000h,000h,000h,03fh,000h,000h,000h

db000h,070h,088h,008h,008h,088h,070h,000h ;8 db000h,01ch,022h,021h,021h,022h,01ch,000h

db000h,0f0h,008h,008h,008h,008h,0f0h,000h ;9 db000h,010h,021h,021h,021h,021h,01fh,000h

DB000H,000H,000H,000H,000H,000H,000H,000H;"." DB000H,000H,000H,018H,018H,000H,000H,000H;-------------------------------
END

总结

这次完成毕业设计,让我获益良多。让我有机会将以前所学的知识与实际设计结合起

来,而且还新学了单片机方面的一些知识。在完成毕业设计的过程中我遇到了不少问题。

由于没有修过单片机这门课程,开始的时候不是很顺利。不过在马岩老师的指导下,很快

我就有了比较清晰的设计思路,对要学习的内容也比较清晰了。思路有了,要学习的内容

也清晰了,但是由于这期间本人参加工作应聘耽搁了一些时间,时间上就显得很紧张了,

还好马老师一直督促着我的进度。我每天增加投入到毕设上的时间。最终,我较为顺利的

完成了我的毕业设计。



致 谢

感谢我的导师马岩老师,本课题的选题和研究过程都是在马老师的悉心指导下完成的。马老师时时关注研究进度,并在百忙之中不时给予督促和指导,使我得以开拓思路,顺利完成毕业设计。在此我要向马老师致以我真诚的感谢。

感谢我所有的老师四年来对我的教育培养。在此,要向诸位老师深深地鞠上一躬。聊表谢意!

感谢我的室友们,三年来我们相互支持,相互关心,相处融洽,建立起了深厚的友谊。感谢我的家人,感谢他们为我完成学业默默付出,感谢他们的支持与辛劳。

(注:文件素材和料部分来自网,供参考。请预览后才下,期待你的好与关注。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务