2023年11月30日发(作者:)

1

随着计算机技术的发展和在控制系统中的广泛应用,以及设备向小型化、

能化发展,作为高新技术之一的单片机以其体积小、功能强、价格低廉、使用灵

活等优势,显示出了很强的生命力。进入21世纪以来,开发推出单片机的公司

很多,各种高性能单片机芯片市场也异常活跃,新技术的不断采用,更加使单片

机的种类、性能以及应用领域不断扩大和提高

由于电子技术的飞速发展,可编程器件的发展,单片机被广泛的应用于工业

控制、智能设计、家用电器以及电子玩具等方方面面。单片机微型计算机简称单

片机(SingleChipMicrocomputer,是指在块芯片中集成有中央处理器、存储器

、基本接口以及定时器计数器等部件,并具有独立指令系

RAMROMI/O/

统的智能器件,既在一块芯片上实现一台微型计算机的基本功能。它具有体积小、

功能多、价格低廉、使用方便、系统设计灵活等优点。如果是简单控制对象,

需利用单片机作为控制核心,不需另加外部设备就能完成。对于较复杂的系统,

只需对单片机进行适当的扩展即可,十分方便。由单片机设计的作息时间控制系

统从硬件到软件都易于实现,外围电路的晶体震荡器可以选择频率为12MHZ

这样计时的精确度可以提高到百万分之一秒。软件的出现相当大的程度节省了成

本,软件和硬件的结合可以使得大规模投入生产

[1]

本系统所研究的作息时间控制系统是由系列单片机做主控部

MCS-5189S51

件,外围电路用12MHZ晶体震荡器、74LS164寄存器、复位电路、三个按键、

四联数码管做显示时间的器件,不需要外扩展存储器,就能实现其功能。

LED

整体结构简单系统实现简单、经济,系统功能稳定,可广泛用于学校、工厂、

和机关的自动打铃、电视、路灯、室内照明及其他对象控制,也可用于家庭或学

生寝室进行时间指示及多点时间提醒。具有相当可靠的实用价值。

1

2作息时间控制系统硬件的设计

2.1AT89S51、74LS164芯片简介

2.1.2单片机AT89S51

AT89S514KFPEROM—Falsh

是一种带字节闪烁可编程可擦除只读存储器

ProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微

处理器,俗称单片机。其可擦除只读存储器可以反复擦除次。该器件采用

100

ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输

ATMEL8CPU

出管脚相兼容。由于将多功能和闪烁存储器组合在单个芯片中,

AT89S51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性

高且价廉的方案。

其引脚图如图1所示。

1AT89S51引脚图

1.主要特性:

兼容;

MCS-51

4K字节可编程闪烁存储器;

寿命:次写擦循环;

1000/

数据保留时间:10年;

全静态工作:

0Hz-24Hz

2

三级程序存储器锁定;

128*8位内部RAM

32I/O

可编程线;

两个16位定时器/计数器;

5

个中断源;

可编程串行通道;

低功耗的闲置和掉电模式;

片内振荡器和时钟电路;

.管脚说明:

2

VCC:供电电压;

GND

:接地;

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

口的管脚第一次写时,被定义为高阻输入。能够用于外部程序数据存

P11P0

储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码

输入口,当进行校验时,输出原码,此时外部必须被拉高。

FIASHP0P0

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接

收输出门电流。口管脚写入后,被内部上拉为高,可用作输入,

4TTLP11P1

口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH

编程和校验时,口作为第八位地址接收。

P1

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,

输出门电流,当口被写时,其管脚被内部上拉电阻拉高,且作

4TTLP2“1”

为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于

P216

口当用于外部程序存储器或位地址外部数据存储器进行内部上拉的缘故。

存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当

对外部八位地址数据存储器进行读写时,口输出其特殊功能寄存器的内容。

P2

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3P38I/O4TTL

口:口管脚是个带内部上拉电阻的双向口,可接收输出

门电流。P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,

由于外部下拉为低电平,口将输出电流()这是由于上拉的缘故。

P3TTL

3

P3AT89S51

口也可作为的一些特殊功能口,如下所示:

管脚备选功能;

P3.0RXD

(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT00

(外部中断

P3.3/INT1(外部中断1

P3.4T00

(记时器外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR

(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一

些控制信号。:复位输入。当振荡器复位器件时,要保持脚两个机器

RSTRST

周期的高电平时间。

ALE/PROG

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址

的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE

以不变的频率周期输出正脉冲信号,此频率为振荡器频率的。因此它可用作

1/6

对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器

时,将跳过一个脉冲。如想禁止的输出可在地址上置

ALEALESFR8EH0

时,ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被

略微拉高。如果微处理器在外部执行状态禁止,置位无效。

ALE

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个

机器周期两次有效。但在访问外部数据存储器时,这两次有效的

/PSEN/PSEN

号将不出现。

/EA/VPP/EA

0000H-FFFFH,不管是否有内部程序存储器。注意加密方式1时,/EA将内

部锁定为;当端保持高电平时,此间内部程序存储器。在

RESET/EAFLASH

程期间,此引脚也用于施加12V编程电源(VPP

XTAL1

:反向振荡放大器的输入及内部时钟工作电路的输入;

XTAL2:来自反向振荡器的输出;

.振荡器特性:

3

4

XTAL1XTAL2

分别为反向放大器的输入和输出。该反向放大器可以配置

为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,

XTAL2

应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外

部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

.芯片擦除:

4

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保

管脚处于低电平来完成。在芯片擦操作中,代码阵列全被写

ALE10ms“1”

在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持

AT89S51

两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,

计数器,串口和中断系统仍在工作。在掉电模式下,保存的内容并且冻结

RAM

振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止

[1]

2.1.274LS164寄存器

74LS164简述:

串行输入带锁存;

时钟输入,串行输入带缓冲;

异步清除;

最高时钟频率可高达36Mhz

功耗:

10Mw/bit

74系列工作温度:0°Cto70°C

Vcc7V

最高电压:

输入最高电压:7V

最大输出驱动能力:高电平为低电平为

0.4mA8mA

[7]

74LS1648位移位寄存器,其主要电特性的典型值如图2:

型号

74LS16436MHz80mW

274LS164电特性典型值

fmPn

当清除端(CLEAR)为低电平时,输出端(QAQH)均为低电平。串行

数据输入端(AB)可控制数据。当AB任意一个为低电平,则禁止新数据

输入,在时钟端(CLOCK)脉冲上升沿作用下Q0为低电平。当AB有一个为

5

高电平,则另一个就允许输入数据,并在上升沿作用下决定的状态。

CLOCKQ0

引出端符号:

CLOCK

CLEAR同步清除输入端(低电平有效)

AB

串行数据输入端;

Q输出端;

AH

Q

时钟输入端;

74LS164真值表如图3

374LS164真值表

74LS1644

内部功能图如图

474LS164内部功能图

6

74LS164逻辑符号及其引脚图如图5

5逻辑符号(左)及引脚图(右)

时序图如图6

CLOCK

A1

A2

RESET

6时序图

7

2.2方案论证

2.2.1静态显示方法

LEDLED

为了实现显示器的数字显示,可以采用静态显示法和动态显示法。

静态显示接口电路由笔段代码锁存器、笔段译码器(有软件译码的LED静态显示

驱动电路不需要笔段译码器等部分组成。静态显示驱动程序简单,占用率

)CPU

低,但是每一个LED数码管需要一个锁存器来锁存每一显示位的笔段代码,硬

件开销大,制作电路板就比较困难。图便是一种并行共阴极数码管的静

7LED

态显示电路。

7LED静态显示电路

2.2.2动态显示方法

考虑到只有四位要显示的时钟,而且系统又没有太复杂的处理任务,也可以

采用动态显示法。动态显示方法中各显示笔段引脚并联在一起,共用一个

a~dp

笔段代码锁存器(由于单片机I/O口,I/O扩展电路,如8255等都具有输出锁

存功能,一般不要再添加笔段代码锁存器)、笔段译码器(采用软件译码时不需

要笔段译码器)以及驱动器;为了控制LED数码管轮流工作,各显示位的公共

端与位译码、锁存、驱动电路相连。这样可以依次输出每一显示为的笔段代码和

位扫描码,轮流点亮各LED数码显示管,实现动态显示的目的。可见在动态显

示方式中只要一个笔段代码锁存、驱动器和一个为扫描码锁存驱动器,硬件开销

8

较小,经济且容易实现。图是一个简单的并行共阳数码管动态扫描驱动

8LED

电路

[8]

8LED动态扫描电路

2.3总体设计

1.系统总体框图:

LED显示器

接口电路

按键控制模块

单片机最小系统

9系统总体设计框图

9

本系统设计的原理是利用单片机AT89S51的定时器/计数器定时和计数的原

理。通过四联共阴极数码显示管接收由74LS164传来的数据并将其转换为十进制

BCD码显示该设计将软、硬件有机地结合起来,使得系统能够正确地进行计时,

数码管能够正确地显示时间

按键模块中的按钮SW1SW2SW3AT89S51P3口相连,对单片机

起到控制作用,通过按键控制模块把外界响应送到单片机最小系统(AT89S51

中,然后通过接口电路把要显示的时间送到四联LED数码管中,四联LED数码

管的字段由串入并出的移位寄存器74LS164控制,74LS164的串行数据输入端由

P1.4控制,移位脉冲由P1.5提供;字位由P1.0~P1.3控制,P1.0~P1.3对应控制

L4~L1SW1~SW3用来进行时间校准及控制时间点的设定。LED1~LED8用来

模拟被控制对象。另有铃响信号输出(铃响信号驱动蜂鸣发声)

当需要对电路时间校对时,在任何时候均可通过按键控制模块按压

SW2

SW3按钮进行时间校准。每按动一下SW2小时自动加1;持续按住不放,小时

将自动连续加。当数码管指示小时为时,再加将自动回零。每按动

1LED241

一下SW3分钟自动加1;持续按住不放,分钟将自动连续加1。当LED数码管

指示分钟为时,再按动,分钟将变为

59SW300

当需要设定控制时间点时,应首先按按键控制模块中的SW1按钮,然后再

按动,使在数码管上指示时间与要求时间一致,再按

SW2SW3LEDSW1

钮进入“控制码”设置状态,按SW3进行对象切换,最后按SW2保存时间点;

也可以用取消本次设定。如此可设定多个控制时间点。

SW1

2.4电路设计

硬件设计是整个系统的基础,要考虑的方面很多,主要考虑以下几个因素

[7]

系统稳定度;

1

2器件的通用性或易选购性;

软件编程的易实现性;

3

10

系统其它功能及性能指标;

4

系统电路设计思想是按照图10进行的,有四位LED数码管显示当前的小时

及分钟,通过外继电器、光光电耦合器或固体继电器还可实现多点、多路电气设

备的控制。系统可以精确到十分之一秒,也可以更精确,这需要通过软件设定。

电路采用单片机AT89S51,显示器采用四联共阴极LED数码显示器。其中字段由

串入并出的移位寄存器74LS164控制,74LS164的串行数据输入端由P1.4控制,

移位脉冲由P1.5提供;字位由P1.0P1.3控制,P1.0P1.3对应控制L4

L1。SW1、SW2、SW3用来进行时间校准及控制时间点的设定。LED1LED8用来

模被控对象。另有铃响信号输出(铃响信号驱动蜂鸣器发声)

AT89S51

P1.4P1.5

~

四位LED数码显示器

单片机

P1.0~P1.3

列驱动

10电路设计框架

11

系统的硬件电路如图11所示:

VCC

VCC

D4

D3

U1

VCC

1938

1837

VCC35

C3D5C2

9VCC

311

292

303

GND

106DS1

1171112

12879

1348

142126

1522VCC1

162310

17245

RST

EA/VPPP1.0/T2

PSENP1.1/T2EX

ALE/PROGP1.2/ECI

P3.0/RxDP1.5/CEX2

P3.1/TxDP1.6/CEX3aK1

P3.2/INT0P1.7/CEX4bK2

P3.3/INT1cK3

P3.4/T0P2.0/A8dK4

P3.5/T1P2.1/A9e

P3.6/WRP2.2/A10f

P3.7/RDP2.3/A11g

XTAL1P0.1/AD1

XTAL2P0.2/AD2

P0.0/AD0

P0.3/AD3

P0.4/AD4

P0.5/AD5

P0.6/AD6

P0.7/AD7

P1.3/CEX0

P1.4/CEX1

P2.4/A12DP

P2.5/A13

P2.6/A14

P2.7/A15VSS

D2

40

39R7

3612

34

33

32

4

5

25R13

26

27

2820

D1

D8

D7

D6

R6

R5

R4

R3

R10

R9

R8

Y1

C1

DIG1DIG2DIG3DIG4

DP3

DP2

GND

GND

VCC25

GND110

S3

R2

Q1

U2

C1U1

C2

30UF37

30UF

X1

1939

CRYSTAL

1836

XTAL1P0.0/AD0

P0.1/AD1

P0.2/AD2

P0.3/AD3XTAL2

P0.4/AD4

P0.5/AD5

P0.6/AD6

P0.7/AD7RST

P2.0/A8

P2.1/A9

P2.2/A10

P2.3/A11PSEN

P2.4/A12ALE

P2.5/A13EA

P2.6/A14

P2.7/A15

P3.0/RXDP1.0

P3.1/TXDP1.1

P3.2/INT0P1.2

P3.3/INT1P1.3

P3.4/T0P1.4

P3.5/T1RP1.5

P3.6/WRP1.6

P3.7/RDC1/->P1.7

38

35

34

33

329

21

22

23

2429

2530

2631

27

28

101

112

123

134

145

1596

167

1788

D1

D2

LED-BIBY

D3

LED-BIBY

D4

LED-BIBY

D5

LED-BIBY

D6

LED-BIBY

D7

LED-BIBY

R1

4k7

C3

10uF

U2

SRG8

31SOUNDER

1D

4

3作息时间控制系统软件的设计

硬件平台结构一旦确定,大的功能框架即形成。软件在硬件平台上构筑,

成各部分硬件的控制和协调。系统功能是由软硬件共同实现的,由于软件的可伸

缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵

魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提

高软件的可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。

由于编程涉及到数值运算不太多,易于操作,用我们平时常用的汇编语言编程便

可容易实现。

3.1设计原理

对于时钟功能,需要在数码管上显示当前的时间的小时及分钟,因此,可以

在内部存储空间分别定义它们的显示缓存空间,来存放小时、分钟的BCD码,

2个字节

[6]

由于时钟是不能停止的,因此需要采用内部定时器自动计时,并使用定时器

中断处理程序来定时进行时间数值的刷新。51单片机的2个定时器都具有16

定时器的工作模式。当晶振为12MHz时,16位定时器的最大定时值为65.536mS

要达到1秒钟,可以采用两种方法:采用一个定时器定时与软件计数相结合的方

法;或者采用两个定时器级联的方法。由于作息时间控制系统在计时功能时也

[5]

需要用到个定时器,因此,我们采用第一个方法,只使用个定时器,例如使

11

T0。为了达到较为准确的计时,使T0的溢出时间为50ms,使用一个字节作

为软件计数器,计数值为。定时器的中断处理程序对进行减操作,

MS20MS1

MS0时,1秒到达,此时更新存放小时、分钟的显示缓存区。

3.2程序结构类型

本系统用到了三种最主要的程序设计结构①顺序结构②选择分支结构③循环

结。顺序结构程序是一种最简单程序,在顺序结构程序中指令按照先后顺序一条

一条的执行。如图13所示:

[2]

14

A

B

13串行结构程序

循环结构程序有两种形式,do_while形式和do_until形式,结构分别如

14所示:

循环初始状态

循环初始状态

循环体

Y

为真时

循环体

NN

循环控制条件

(1)DOWHILE结构(2)DOUNTIL结构

--

14循环结构

编写循环程序要注意设置循环的初始状态、循环体和循环控制部分。循环可

以有多重结构。多重循环程序设计的基本方法和单重循环程序设计是一致的,

分别考虑各重循环的控制条件及其程序实现,相互之间不能混淆。另外,应该注

意在每次通过外层循环再次进入内层循环时,初始条件必须重新设置

[4]

分支程序结构也可以有两种形式,如图15所示:

判断条件

YN

判断条件

Y

AB

.....

(a)IFTHENELSE(b)CASE

--

15分支结构

15

程序的分支一般用条件转移指令来产生,利用转移指令不影响条件码的特性,

续地使用条件转移指令使程序产生了多个不同的分支,而对于数组中的每一个

数,它只能是多个分支中的某一个。

3.3程序流程图

主程序:子程序1(拆分)

开始

设置堆栈区在70H~7FH

T0中断及工作方式

设置显示时间初始值1200

50ms定时参数指向分十位显示缓冲单元

启动定时器

调用拆分子程序

调用显示子程序

时间校对子程序

控制时间设定子程序

判断定时间是否到compare子程序

无条件转移

子程序

取分个位

指向分个位显示缓冲单元

取分十位

取时个位

指向时个位显示缓冲单元

取时十位

指向时十位显示缓冲单元

返回

16

子程序2(显示)子程序3(控制时间设定)

开始子程序

送显示缓冲区首地址(R0

及字位码(R2

送字形表首地址显示CLR-

查字形表取待显示字清除所有数据

传送分个位字形到74L164

R01,显示区下一位

点亮对应位码显示管

修改字位码

修改后的字位码送入A

ACC.4=1

SW1=0

SW3=0

显示CLR-

SW2=0

显示CLR-

SW1=0

显示0600

SW2=0调时,SW2=0调分

显示所调时间

SW1=0

显示——00

SW3=0调第几闹铃SW2=0保存设置

返回

17

4作息时间控制系统的调试

4.1调试

根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和

软硬件联调。由于在系统设计中采用模块化设计,所以方便了对各电路功能模块

的逐级测试,包括对:键盘操作功能调试,声音输出功能调试,指示灯功能调试

等。单片机软件先在最小系统板上调试,确保工作正常之后,再与硬件系统联调。

最后将各模块组合后整体测试,使系统的所有功能得以实现

[9]

4.1.1硬件调试

电路安装完成后,首先进行检查,即确认电路无虚焊,无短路,无断路,

成元件安装是否正确,之后进行电路功能模块的分级调试,根据电路功能逐级进

行:①键盘功能调试;

②声音输出功能调试;

③指示灯功能调试;

4.1.2软件调试

本系统的软件系统不是很大,全部用汇编语言来编写,选用一般的Keil仿

真器对汇编语言进行调试。除了语法差错外,当确认程序没问题时,通过直接下

载到单片机来调试。采取的是自下到上的调试方法,即单独调试好每一个模块,

然后再连接成一个完整的系统,最后完成一个完整的系统调试。主要是液晶显示

屏实时显示功能的调试。

4.1.3软硬联调

系统做好后,进行系统的完整调试。主要任务是检验实现的功能及其效果并

校正数值。根据实测数据,逐步校正数据,使测量结果更准确。单片机软件先在

最小系统板上调试,确保工作正常之后,再与硬件系统联调。

18

5

本系统主要由MCS-51系列单片机AT89S51做主控部件,外围电路用12MHZ

晶体震荡器、寄存器、复位电路、三个按键、四位数码管做显示

74LS164LED

时间的器件。本系统具有基本时钟(显示当前时间的小时及分钟)功能,通过外

扩继电器、光电耦合器或固体继电器还可实现多点、多路电气设备的控制。该作

息时间控制系统可广泛用于学校、工厂和机关的自动打铃、电视、路灯、室内照

明及其他对象控制,也可用于家庭或学生寝室进行时间指示及多点时间提醒。

本次设计得到预定效果,设计成的作息时间控制系统按照原理运行,在计

时上有一定误差,通过反复试验、调试,修改软硬件把误差控制在小于

0.3%

范围内。

19

参考文献

[1][M]

2004

刘玉宾;朱焕立单片机原理及接口技术,北京:机械工业出版社,

[2][M]2005

徐建民;王东,邵艳华.汇编语言程序设计,电子工业出版社,

[3]严天峰,单片机应用系统设计与仿真调试[M],北京:电子工业出版社,

2005

[4]苏帆等,汇编语言程序设计[M],武汉:华中科技大学出版社,2005

[5][J]

杨洪升;朱九彦,定时器时间常数的外部输入及应用承德石油高等专

科学校学报,200601

[6][J]

祁树胜连续时间系统的时间最佳控制西安航空技术高等专科学校

学报;200103

[7]2006[J]

12

[8]PLC[J]

李秀忠控制的作息时间自动控制系统设计安徽电子信息职业技

术学院学报;200402

[9][J]

葛素娟;朱祥贤单片机应用系统的抗干扰技术重庆科技学院学报:

自然科学版,200604

金仁贵单片机应用系统的开发方法电脑知识与技术学术交流,

20

附录

汇编语言程序:

;作息时间控制系统

;--------------------------------------头文件

-----------------------------------------

OUTBITP3.7

F1BIT1BH

SDATABITP1.4;定义74LS164串行移位数据端

SCLKBITP1.5;定义74LS164串行移位时钟端

DISEQUP1;定义字形口

ControlEQUP0;控制输出

SW1EQUP3.2

SW2EQUP3.3

SW3EQUP3.4

MSEQU10H;定义50ms计数器

SecsEQU11H;定义秒计数器

MinuteEQU12H;定义分钟计数器

HourEQU13H;定义时计数器

T_MinuteEQU18H;定义定时分单元

T_HourEQU19H;定义定时时单元

TControlEQU1AH;定义控制码单元

;--------------------------------------------------------------------

--------------------

ORG0000H

CLRF0

CLRF1

MOVR7,#80

MOVTL0,#00H;50ms定时参数

MOVTH0,#4CH

SETBTR0;启动定时器

LOOP:MOVR1,#Minute

LCALLSplit;调用拆分子程序NOP

LCALLDISP;调用显示子程序NOP

LCALLVerify

NOP

LCALLSetup

MOVA,Secs

CJNEA,#5,$+3;定时精度控制在5秒以内

JNCLOOP

LCALLCompare

SJMPLOOP

;--------------------------------------------------------------------

--------------------

T0INT:MOVTL0,#00H

MOVTH0,#4CH

PUSHACC

RETI

;--------------------------------------------------------------------

--------------------

Compare:MOVR0,#20H;定时数据存储区

NextTime:LCALLDISP

MOVA,@R0

CJNEA,Hour,CLP1

INCR0

MOVA,@R0

CJNEA,Minute,CLP2

INCR0

MOVA,@R0

CPLA

MOVControl,A

lcallSONGER

INCR0

RET

DJNZR5,SONGER1

MOVR5,#10

LCALLDISP

MOVA,#Secs

JZSONGER1

MOVControl,#0FFH

POP06H

POP05H

POPACC

POPPSW

RET

Verify:JBSW3,VLP3;判断是否需要校"分"

CLREA

CLRTR0;校时期间,暂时关闭定时器

VLP1:MOVA,Minute;SW3闭合时,则对分钟加1

ADDA,#1

DAA

MOVMinute,A

CJNEA,#60H,VLP2

MOVMinute,#0

VLP2:MOVR6,#40

MOVR1,#Minute

LCALLSplit

LCALLDISP

LCALLDISP

DJNZR6,$-3

JNBSW2,VLP4;若SW3未释放,则继续对小时加1

MOVSecs,#0;校时期间,将秒清零

SETBEA

SETBTR0;恢复计数

VExit:RET

;--------------------------------------------------------------------

--------------------

Setup:JNBSW1,SLP0;判断SW1是否闭合

RET

SLP0:MOVR6,#20;延时80ms(用显示程序)

MOV14H,#10H

MOV15H,#0AH

MOV16H,#11H

MOV17H,#0CH

MOV16H,#11H

MOV17H,#0CH

LCALLDISP

DJNZR6,$-3

JBSW1,SLP21

SLP22:MOVR6,#50;延时200ms(用显示程序)

MOV14H,#10H

MOV15H,#0AH

MOV16H,#11H

MOV17H,#0CH

LCALLDISP

DJNZR6,$-3

SLP23:JNBSW1,SLP22;等待SW1释放

SLP3:MOVR1,#T_Minute

LCALLSplit

LCALLDISP

JBSW3,SLP6

SLP4:MOVA,T_Minute

LCALLSplit

LCALLDISP

JNBSW1,SLP10

MOVTControl,#0

JBSW3,SLP12

SLP11:MOVA,TControl

INCA

MOVTControl,A

SLP12:MOVA,TControl

ANLA,#0FH

MOV14H,A

MOVA,TControl

SWAPA

ANLA,#0FH

MOV15H,A

CJNER1,#70H,CLRP1

RET

;--------------------------------------------------------------------

--------------------

STORE:MOVR1,B

CJNER1,#6AH,$+3

JCSTLP1

MOVR1,#20H

MOVB,R1

STLP1:MOV@R1,T_Hour

INCR1

MOV@R1,T_Minute

INCR1

MOV@R1,TControl

INCR1

MOVB,R1

RET

;--------------------------------------------------------------------

--------------------

Split:MOVR0,#14H;分个位显示缓冲单元

MOVA,@R1

MOVDPTR,#WordTab;送字形表首地址

JNBF0,DISP0

DJNZR7,DISP1

CPLF1

MOVR7,#60

SJMPDISP1

DISP0:CLRF1

DISP1:ORLDIS,#00001111B;关显示器

MOVR3,#20

DJNZR3,$;延时40μs

MOVA,@R0;取待显示数字

MOVCA,@A+DPTR;查字形

WordOut:MOVR3,#8;传送字形码到74LS164

NEXTB:RLCA;取待发送位

MOVSDATA,C;送数据到数据口

SETBSCLK;产生时钟

CLRSCLK

DJNZR3,NEXTB;继续送下一位

INCR0

JBF1,HIDE

MOVA,R2;取字位码

ANLDIS,A

HIDE:MOVR3,#5;延时1ms

MOVR4,#100

DJNZR4,$

DJNZR3,$-4

MOVA,R2;修改字位码

RLA

MOVR2,A

致谢

这篇毕业论文的撰写过程中,得到了淮北煤炭师范学院物理系窦德召老师的

精心指导和帮助。无论从器材选择、提纲拟订,还是在论文的格式规范和细节,

窦老师都给予耐心的指点和修改,特此给予最真诚的感谢。也对物理系提供书籍

资料表示最诚挚的谢意。同时也感谢在大学四年给予我帮助的所有老师和同学。

30