当前位置:首页 > 范文大全 > 整改报告 >

整改报告

c51多功能电子时钟设计报告

2021-10-30 11:19:55整改报告
c51多功能电子时钟设计报告本文关键词:多功能,时钟,报告,设计,电子c51多功能电子时钟设计报告本

c51多功能电子时钟设计报告 本文关键词:多功能,时钟,报告,设计,电子

c51多功能电子时钟设计报告 本文简介:机电工程系课程设计报告题目:数字时钟课程设计专业:通信技术班级:07通信学号:0706090111姓名:庄再标指导老师:郑晓青时间:2010年1月10日目录一、设计目的、设计题目……………………………………………3二、设计任务、功能描述……………………………….……………3三、硬件原理分析……………

c51多功能电子时钟设计报告 本文内容:

题目:

数字时钟课程设计

业:

通信技术

级:

07通信

号:

0706090111

名:

庄再标

指导老师:

郑晓青

间:2010年1月10日

目录

一、

设计目的、设计题目……………………………………………3

二、

设计任务、功能描述……………………………….……………3

三、

硬件原理分析…………………………………………………….3

四、

软件设计………………………………………………………….7

1

地址空间分配……………………………………………………….7

2

软件整体架构分析………………………………………………….8

2.1总体架构说明:设计思路………………………………………8

2.2主程序功能描述及分析、主程序流程图………………………9

2.3各子程序功能描述及子程序入口出口、各程序流程图………9

五、

程序清单………………………………………………………….12

一、

设计题目:数字时钟。

设计的时钟能够实现日常的时钟显示,同时具有时钟调整、两个闹钟及正点报时功能。

二、

设计任务、功能描述

整体设计任务:本电子时钟设计首要的工作是结合以往所学的单片机程序编写理论和编写规则来编写电子时钟的软件部分,编写时要结合所配的AT89S52芯片的管脚功能和其他硬件电路,该部分运用keil单片机软件来完成。在编写完软件并检测完正确后再编译成.hex载入用Isis仿真软件布好的仿真硬件中运行检测程序是否正确,并调试。待这一切工作做好后再利用已焊接好的小系统板硬件电路来实践实现软件功能与硬件的结合。此步骤要用progisp单片机烧写软件来实现。

在硬件设计上:

(1)用四个电位按键来实现对电子时钟的调试工作,当按第一下总控键时进入时钟的调整状态,有两个电位按键分别来调整时钟的分和时,在调整时秒正常运行;当按第二下总控键时时钟进入闹钟一设置,有两个电位按键分别来调整时钟的分和时的设定,另外有一个时钟控键来实现闹钟是否开启;当按第三下总控键时时钟进入闹钟二设置,其余操作同闹钟一设置操作,当按第四下总控键时时钟退出调整模式进入正常时钟走势。

(2)用两个四位数码管来实现设计的显示部分,其演示模式是:

时时-分分-秒秒

该数码管组合的功能管脚是八个位选择连接芯片的p2引脚,八个显示管位并联再接入到芯片p0引脚。从而在功能上区分开,实现数码管的显示功能。

(3)用一个led灯和电阻组成的简易电路结合设计来实现正点报时的功能,当时钟走到正点时,该led灯便能够闪烁五秒刚好是五下,之后进入暗的状态,等到下一个整点到来。

(4)用一个喇叭和三极管等配件组成一个闹钟电路,再与芯片的p1.0引脚连接。当时钟到设定的报时点时便会发出“嘟嘟嘟嘟….‘的声音来实现闹钟功能。

(5)用一个按键和其他部件组成的复位电路与芯片连接来实现整个程序及硬件的重新复位功能。

三、

硬件原理分析

电路设计分析

电路原理设计是基于小系统包括电源电路、复位电路、按键电路、时钟电路、数码管显示驱动电路、输出控制电路。电源部分是用电池来提供的3v-5v,晶体振荡器采用的是12MHz的石英晶体振荡器。

总体硬件设计框图如下:

AT89S52系列单片机芯片

电源

复位电路

按键电路

时钟振荡电路

七段数码管

数码管显示驱动电路

输出控制电路

1.1复位电路

本次设计采用按键电平复位,按键电平复位相当于按复位键后,复位端通过电阻与Vcc电源接通;

1.2振荡器和时钟电路设计

1.21振荡器和时钟电路工作原理

80C51系列单片机内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟,外部还需附加电路。XTAL1引脚为反相放大器和时钟发生电路的输入端,XTAL2引脚为反相放大器的输出端。片内时钟发生器实质是个2分频的触发其输入来自振荡器的fosc,输出为2相时钟信号,即节拍信号P1、P2,器频率为fosc/2。2个节拍为1个状态时钟S。状态时钟再3分频后为ALE信号,其频率为fosc/6,状态时钟6分频后为机器周期信号,器频率为fosc/12。特殊功能寄存器PCON的PD位可以控制振荡器的工作,当PD=0时,振荡器停止工作,单片机进入低功耗工作状态,复位后,PD=0,振荡器正常工作。

1.22

本次设计采用常用的内部时钟方式接法:通过在引脚XTAL1和XTAL2两端跨接晶体或陶瓷谐振器,再利用芯片内部的振荡电路,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路,如图所示,外接晶振时,C5和C6的值通常选择为20-30pf。C5、C6对频率有微调作用,影响振荡的稳定性和起振速度。所采用的晶体或陶瓷谐振器得频率选择0-24/33MHz。为了减小寄生电容,更好的保证振荡器稳定、可靠的工作,谐振器和电容赢尽可能与单片机芯片靠近安装。

1.3电源

因为该电路所需电压为3-5v,可直接用电池供应或也可以用直流电源供应,但需经过变压才行。

1.4数码管显示电路

采用LED共阳极数码管的发光二极管接到高电平(电压为5V),用LED动态扫描显示方式,在单片机电路里,芯片的驱动电流很小,一般为微安级别的,要通过三极管(可驱动电流为毫安级别,甚至更大)来驱动LED(正常工作电流为几十毫安)发光,本设计由P2端口扫描数码管的选通,P0口送数据显示。

1.5按键电路

S1按键接在P3.0口,用于切换正常走时、调时间、设定闹钟;S2按键接在P3.1口,用于调整时钟分加一和调闹钟时间分加一的功能;S3按键接在P3.2口,用于调整时钟时加一和调闹钟时加一的功能;S4按键接在P3.3口,用于设定是否开启闹钟。

1.6输出控制电路

在P1.1和P1.0端口分别接一个发光二极管,用于整点报时,和一个蜂鸣器,用于响闹铃。

1.7整体布局图

四、

软件设计分析

1、地址空间及端口分配

30h—37h地址空间分别分配给led1、led2、led3、led7、led4、led8、led5、led6.用于数码管显示。

38h地址空间分配给gn,定义38h空间为按键次数读取的缓存空间。

3bh地址空间分配给nk1,定义3bh空间是闹钟开启开关按键次数读取缓存空间。

39h地址空间分配给nao1f,用于存储调整闹钟一分加一按键次数读取缓存。

3ah地址空间分配给nao1s,用于存储调整闹钟一时加一按键次数读取缓存。

3dh地址空间分配给nao2f,用于存储调整闹钟二分加一按键次数读取缓存。

3eh地址空间分配给nao2s,用于存储调整闹钟二时加一按键次数读取缓存。

50h地址空间用于存放50ms中断寄存。

51h地址空间用与存放秒的十位和个位。

52h地址空间用与存放分的十位和个位。

53h地址空间用与存放时的十位和个位。

p1.1端口分配给zdled

,定义灯接到p1.1.利用setb和clr

zdled控制灯的亮暗起到整点报时显示作用。

p1.0

端口分配给nb,定义蜂鸣器接到p1.0

利来实现闹肿

p0端口分配给数码管显示控制

p2端口分配给数码管选择显示控制。

2、总体架构说明

该时钟程序设计思路如下:

(1)、在程序头将设计中的一些固定空间进行分配并注释。

(2)、初始化程序,如设定时钟初始显示00—59—56

以便一开始就能进入整点报时状态,显示该功能;设定使用定时器1;将一些未到时钟设计功能的功能端口关闭等。

(3)开始主程序进行程序扫描,先扫描拆字子程序,将分配好的时分秒等高地位的数字调入到显示子程序中。——>显示子程序通过分配的空间对应口将拆字子程序的内容在七段数码管上显示相应的时分秒,再调用走时程序使时钟进行读秒等工作。——>进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。如进入时间调整、闹钟一设置、闹钟开启与否等。——>进入闹钟一、二的判断,在时分上与设置的闹铃时间吻合的话就做相对应的判断,再依据是否有开启闹钟而进行响铃与否,如果有响铃则设置其一直响铃知道有人为按取消按键取消闹铃。——>进入整点报时扫描,判断是否在时分上都进入了整点,如果是就报时显示灯闪烁五下(5s),然后就退出整点报时,等到下一个整点的到来。——>最后返回主程序头重新依次扫描。显示过程设有消隐,按键设有去斗。

(4)、子程序部分。在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。这些子程序包括显示子程序、拆字子程序、延时子程序、走时间子程序、整点报时子程序、按键处理子程序、调时间子程序、闹钟设置子程序、闹钟子程序、闹钟开启子程序。

3、各子程序功能及出入口地址

(1)各子程序功能:

显示子程序:将拆分好的高低位时分秒拆分码放入相对应的数码管,调用tab选通相应的七段数码显示时分秒当前数字。

拆字子程序:将空间51h、52h、53h内的秒时分拆成高低字节分配到,30h、31h、33h、34h、36h、37h实现时分秒的显示。

延时子程序:该子程序是为了实现八个七段数码管显示的顺序显示选通时间,2ms的显示时间频率是的显示效果稳定,同时作为按键开关扫描判断去抖

走时间子程序:该程序功能是使得秒程序走动,走到59后进位分,后变00从新开始计时,分走到59后进位时,分从新开始00计时,时走到23,分走到59,秒走到59后进入从新日期周期计时。

整点报时子程序:在达到整点时该程序的功能实现报时,报时以led灯闪烁显示为报时信号。

按键处理子程序:该程序进行按键处理的功能判断分别是有调试按键处理,闹钟设置按键处理,闹钟开启与否按键处理。

调时间子程序:该程序功能实现时间的调整。

调闹钟子程序:该程序闹钟程序设计与按键结合实现闹钟设置调整的功能。

闹钟开启子程序:该功能实现闹钟开启与否而达到闹钟响铃功能。

4、程序流程图

开始

调用拆字节子程序

调用延时显示时分秒

调用按键子程序

调用闹钟1.2判断闹钟

调用闹钟子程序

调用整点报时子程序

结束,循环子程序

Led1—>r0

tab—>dptr

查表

#07—>r2,显示控制

#0feh—>r3,秒个位显示

a—>@r0,@a+dptr

—>a,查表

#0ffh—>p2

消隐

a—>p0,显示当前文字

R3—>a,a—>p2,选通相应数码管

Inc

r0,指向下一位显示

a—>r3,保存下一位选码

延时2ms显示当前数字

R2-1=?0

拆字子程序

Y

N

(一)主程序流程图

(二)显示子程序

显示闹钟二

A=?#3

显示闹钟二的时分秒

Lcall

bcd处理led3,led6显示

显示闹钟一时分秒

显示闹钟一

调用bcd

调用bcd

ACC、PSW入栈保存

Chaizi1.显示

A=?#2

ret

bcd程序

ret

Y

Y

N

(三)拆字子程序

T1.重新赋值

Th150h,重新赋值,再定时1s

PSW

.ACC出栈

reti

50h-1=?0

51h=?60

52h=?60

53h=?24

Y

Y

Y

Y

N

N

N

N

(四)走时间子程序

#0FF—>a,a—>p1

调用延时

ret

#0—>gn

gn+1

gn—>a

P2.0=?1

P2.0=?1

调用延时

P2.0=?1

a=?4

调时间程序

N

Y

N

Y

Y

N

N

Y

(五)按键处理

五、

程序清单

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

初始化

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

led1

equ

30h

;定义30h

=

第8个数码管(最右边第1个数码管)的显示内容

=LED1=秒的个位

led2

equ

31h

;定义31h

=

第7个数码管显示内容

=LED2=秒的十位

led3

equ

32h

;定义32h

=

第6个数码管显示内容

=LED3=时分秒中间的一个横杆

led7

equ

33h

;定义33h

=

第5个数码管显示内容

=LED7=分的个位

led4

equ

34h

;定义34h

=

第4个数码管显示内容

=LED4=分的十位

led8

equ

35h

;定义35h

=

第3个数码管显示内容

=LED8=时分秒中间的一个横杆

led5

equ

36h

;定义36h

=

第2个数码管显示内容

=LED5=时的个位

led6

equ

37h

;定义37h

=

第1个数码管显示内容

=LED6=时的十位

gn

equ

38h

;定义38h空间为按键次数读取的缓存空间

bssj

equ

3fh

;

zdled

bit

p1.1

;定义灯接到p1.1.利用setb和clr

zdled控制灯的亮暗

nb

bit

p1.0

;定义蜂鸣器接到p1.0

利来实现闹铃响

nk1

equ

3bh

nao1f

equ

39h

nao1s

equ

3ah

nao2f

equ

3dh

nao2s

equ

3eh

org

00h

;

这句话把下面那条指令定位到(烧写到)00h这个地址去

sjmp

main

;这里是单片机复位后运行的第一条指令,这句话使单片机跳到main那里继续执行程序

org

001bh

;这句话把下面那条指令定位到(烧写到)001b这个地址去.

ljmp

zoushijian

;这句话是定时器50毫秒定时到之后,TH0,TL0记数到FFFFH时单片机自动跳到

这里运行,我们再把它跳到zoushijian

继续执行,因为这个时候主程序已经暂停运行,我们称主程序发生了中断,而zuoshijian就是中断服务主程序.

org

40h

;把主程序main定位到40h这个地址

main:

mov

sp,#5FH;设置堆栈指针,存放进入50ms中断时的PC值

mov

50h,#01;50h存放定时器中断的次数,现在定时器每50ms中断一次,所以

;赋初值20,利用djnz减,减到0时自然就是1秒到了

mov

51h,#55;51h存放秒的十位和个位,现在给32h等于十进制的50,相当于一开始让

;第7个,第8个数码管显示50秒,尽快到达整点,利于调试整点报时.

mov

52h,#59;52h存放分的十位和个位,现在给3bh等于十进制的59,相当于一开始让

;第4个,第5个数码管显示59分,尽快到达整点,利于调试整点报时.

mov

53h,#00;53h存放小时的十位和个位,现在给00h等于十进制的00,相当于一开始让

;第1个,第2个数码管显示00小时,mov

tmod,#10h;使定时器1工作在工作模式1,即16位定时器工作模式

mov

th1,#3ch;65536us-50000us=15536微秒,刚好是3cb0h,这样定时器1每50ms进入中断一次

mov

tl1,#0afh

setb

zdled

;

还没到整点,先让灯暗

mov

a,#0

mov

r1,a

mov

bssj,#10

clr

rs0

clr

rs1

clr

gn

clr

nao1f

clr

nao1s

clr

nk1

setb

nb

setb

tr1

;开启定时器1,使TH1,TL1不断加1

setb

et1

;开启定时器1中断,使TH1,TL1加到FFFF时让单片机自动跳到001bh去执行,如果不

开启这个中断标志,那么即使单片机TH1,TL1记数到FFFF,单片机也不会跳到001bh去的.

setb

ea

;开启总中断

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

主程序

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

l5:

nop

lcall

chaizi;把当前的时分秒的值(即53h~51h的内容)按照十位,个位拆到35h~30h中

lcall

display;把拆好的时分秒的十位,个位分别显示到相应的数码管上面.

lcall

anjian

;理按键

lcall

xiang1

;判断闹钟

lcall

xiang2

lcall

nk

;设置闹钟是否开

lcall

zdbs

;整点报时

sjmp

l5;主循环结束,又跳到主循环开始处

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;显示子程序,把拆好的时分秒的十位,个位分别显示到相应的数码管上面

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:r2、r3

;出口地址:p0、p2

display:mov

r0,#led1;从LED1开始显示,即从第8个数码管秒的个位开始

mov

dptr,#tab

mov

r2,#08;8个数码管同时显示

mov

r3,#0feh;选通第8个数码管,关闭其他的数码管

disp_1:

mov

a,@r0;把当前要显示的数放到A里面

movc

a,@a+dptr;得到当前要显示数的7段码

mov

p2,#0ffh

;关掉所有数码管显示,消隐,把残留在数码管上面的乱码消去

mov

p0,a;显示当前的数,运行到这里,人的眼睛应该看到显示内容

mov

a,r3;位选给A

mov

p2,a;选通相应的数码管

rl

a;得到新的位选码

inc

r0;指针指向下一个要显示的内容

mov

r3,a;保存下一个位选码,以便选通下一个数码管.

lcall

delay;延时4毫秒显示当前的数码管

djnz

r2,disp_1;跳回去,进入下一个数码管的显示

ret

tab:

db

0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0bfh,0ffh,8ch,3fh,7fh

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

采用除法指令实现的拆字程序

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:38h、

;出口地址:30h—38h、3bh

chaizi:

mov

a,gn

;显示闹钟二

cjne

a,#3,chaizi2

mov

a,nao2f

mov

b,#10

div

ab

mov

led2,a

mov

led1,b

mov

a,nao2s

mov

b,#10

div

ab

mov

led4,a

mov

led7,b

mov

led5,#02h

mov

led6,#0ch

ret

chaizi2:mov

a,gn

;显示闹钟一

cjne

a,#2,chaizi1

mov

a,nao1f

mov

b,#10

div

ab

mov

led2,a

mov

led1,b

mov

a,nao1s

mov

b,#10

div

ab

mov

led4,a

mov

led7,b

mov

led5,#01h

mov

led6,#0ch

lcall

bcd

ret

chaizi1:mov

a,51h;把51h这个秒的数值拆成个位和十位

mov

b,#10

div

ab

mov

led2,a;秒的十位进入LED2保存

mov

led1,b;秒的个位进入LED1保存

mov

a,52h;把52h这个分的数值拆成个位和十位

mov

b,#10

div

ab

mov

led4,a;分的十位进入LED4保存

mov

led7,b;分的个位进入LED7保存

mov

a,53h;把53h这个时的数值拆成个位和十位

mov

b,#10

div

ab

mov

led6,a;时的十位进入LED6保存

mov

led5,b;时的个位进入LED5保存

lcall

bcd1

lcall

bcd2;处理第3个和第6个数码管的显示

ret

bcd1:

mov

a,gn

cjne

a,#0,l3

cjne

r1,#0,l3

mov

a,50h;读取50ms中断的次数,看看经过了几次50ms的中断

cjne

a,#09,l1

l1:

jc

l3

mov

a,nk1

cjne

a,#1,k_1

mov

led3,#0dh

ret

k_1:

mov

led3,#0bh;没到0.5秒,显示横杆

ret

;是否经过了0.5秒(即是否经过了10次的50ms中断)

l3:

mov

a,nk1

cjne

a,#1,k_2

mov

led3,#0eh

ret

k_2:

mov

led3,#0ah;已经到了0.5秒,让两个横杆消失,这样造成两个横杆一闪一闪效果

ret

bcd2:

mov

a,gn

cjne

a,#0,l13

cjne

r1,#0,l13

mov

a,50h;读取50ms中断的次数,看看经过了几次50ms的中断

cjne

a,#09,l11

l11:

jc

l13

mov

a,nk1

cjne

a,#1,k_11

mov

led8,#0dh

ret

k_11:

mov

led8,#0bh;没到0.5秒,显示横杆

ret

;是否经过了0.5秒(即是否过了10次50ms中断)

l13:

mov

a,nk1

cjne

a,#1,k_21

mov

led8,#0eh

ret

k_21:

mov

led8,#0ah;已经到了0.5秒,让两个横杆消失,这样造成两个横杆一闪一闪效果

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

延时程序

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:r6、r7

;出口地址:r6

delay:

mov

r6,#5

;这是一个((1+1+2)*100+2+1)*5=2015微秒=2毫秒的延时程序

dl2:

mov

r7,#100

;1微秒

dl1:

nop

;1

微秒

nop

;1微秒

djnz

r7,dl1

;2微秒

djnz

r6,dl2

;2微秒

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

走时间

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:acc、psw

;出口地址:acc

zoushijian:

PUSH

acc

;0E0H就是A,见课本44页,因为这个时候SP=5fh,故把A的值保存在5fh里面去

PUSH

psw

;因为0D0H就是PSW(见课本44页),此时SP=60H,所以这句话是把PSW的值保存到60h中去

mov

th1,#3ch

;重新给定时器赋初值,让它再定时50ms

mov

tl1,#0afh

djnz

50h,l2

;判断是否到了1秒没有,50h减到0表示已经进行了20次的50ms,刚好1秒

mov

50h,#20

;已经到1秒,重新赋次数,再定时记数一秒

inc

51h

mov

a,51h

;从51h读取秒的值(包含十位,个位)

cjne

a,#60,l2

;判断是否到60秒,没到60秒,中断返回退到主程序

mov

51h,#0

;到60秒,重新从0秒加起,分钟加1

inc

52h

mov

a,52h

;读取分钟

cjne

a,#60,l2

;判断是否到了60分钟,没到60分钟,中断返回退到主程序

mov

52h,#0

;到60分钟,重新从0分钟加,小时加1

inc

53h

mov

a,53h

;读取小时值

cjne

a,#24,l2

;判断是否到了24小时,没到24小时街卸戏祷赝说街鞒绦?

mov

53h,#0

;到了24小时,重新清零小时,从00小时又开始新一天定时

l2:

POP

psw

;把放在60h的东西放回到PSW里面,因为这个时候SP=60h,0D0H就是PSW

POP

acc

;把放在60h的东西放回到PSW里面,因为这个时候SP=5fh,0E0H就是A

reti

;PC指针变回进入中断时的下一条指令的值

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;

整点报时子程序

?报时时间为

5

;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:51h、52h

;出口地址:p1.1

zdbs:

mov

a,52h

cjne

a,#0,zdbs_1

mov

a,50h

cjne

a,#10,zdbs_2

zdbs_2:

jc

zdbs_3

mov

a,51h

cjne

a,#5,zdbs_4

zdbs_4:

jnc

zdbs_1

clr

p1.1

ret

zdbs_3:

mov

a,51h

cjne

a,#5,zdbs_5

zdbs_5:

jnc

zdbs_1

setb

p1.1

ret

;打开整点报时的指示灯

zdbs_1:

setb

zdled

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

按键处理

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:38h、p3

;出口地址:p3.0

anjian:

mov

a,#0ffh

mov

p3,a

;0000给P1口上拉高电频

jb

p3.0,js_1

lcall

delay

jb

p3.0,js_1

a_1:

jnb

p3.0,a_1

lcall

delay

jnb

p3.0,a_1

inc

gn

mov

a,gn

cjne

a,#4,js_1

mov

gn,#0

ret

fanhui:

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

调时间

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:38h、52h、53h

;出口地址:38h、p3.1、p3.2

js_1:

mov

a,gn

cjne

a,#1,jn1_1

js1_2:

jb

p3.1,js2_2

lcall

delay

jb

p3.1,js2_2

js1_1:

jnb

p3.1,js1_1

lcall

delay

jnb

p3.1,js1_1

inc

52h

mov

a,52h

cjne

a,#60,anjian

mov

52h,#0

ret

js2_2:

jb

p3.2,jn1_1

lcall

delay

jb

p3.2,jn1_1

js2_1:

jnb

p3.2,js2_1

lcall

delay

jnb

p3.2,js2_1

inc

53h

mov

a,53h

cjne

a,#24,anjian

mov

53h,#0

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

调闹钟一

;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:38h

;出口地址:p3.1、p3.2

jn1_1:

mov

a,gn

cjne

a,#2,en1_1

jb

p3.1,jn1_3

lcall

delay

jb

p3.1,jn1_3

jn1_2:

jnb

p3.1,jn1_2

lcall

delay

jnb

p3.1,jn1_2

inc

nao1f

mov

a,nao1f

cjne

a,#60,jn1_3

mov

nao1f,#0

ret

jn1_3:

jb

p3.2,en1_1

lcall

delay

jb

p3.2,en1_1

jn2_2:

jnb

p3.2,jn2_2

lcall

delay

jnb

p3.2,jn2_2

inc

nao1s

mov

a,nao1s

cjne

a,#24,en1_1

mov

nao1s,#0

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

调闹钟二

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:38h

;出口地址:p3.1、p3.2

en1_1:

mov

a,gn

cjne

a,#3,bd_1

jb

p3.1,en1_3

lcall

delay

jb

p3.1,en1_3

en1_2:

jnb

p3.1,en1_2

lcall

delay

jnb

p3.1,en1_2

inc

nao2f

mov

a,nao2f

cjne

a,#60,en1_3

mov

nao2f,#0

ret

en1_3:

jb

p3.2,bd_1

lcall

delay

jb

p3.2,bd_1

en2_2:

jnb

p3.2,en2_2

lcall

delay

jnb

p3.2,en2_2

inc

nao2s

mov

a,nao2s

cjne

a,#24,bd_1

mov

nao2s,#0

ret

bd_1:

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;

响闹钟

;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

:入口地址:3bh、53h、52h

;出口地址:p1.0

xiang1:

mov

a,nk1

cjne

a,#1,x_1

mov

a,53h

cjne

a,nao1s,x_1

mov

a,52h

cjne

a,nao1f,x_1

mov

a,50h

cjne

a,#10,x_2

x_2:

jnc

x_3

clr

nb

ret

x_3:

setb

nb

ret

x_1:

setb

p1.0

ret

xiang2:

mov

a,nk1

cjne

a,#1,x2_1

mov

a,53h

cjne

a,nao2s,x2_1

mov

a,52h

cjne

a,nao2f,x2_1

mov

a,50h

cjne

a,#10,x2_2

x2_2:

jnc

x2_3

clr

nb

ret

x2_3:

setb

nb

ret

x2_1:

setb

p1.0

ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;

是否开启闹钟

;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口地址:3bh

;出口地址:p3.3

nk:

jb

p3.3,nk_1

lcall

delay

jb

p3.3,nk_1

nk_2:

jnb

p3.3,nk_2

lcall

delay

jnb

p3.3,nk_2

inc

nk1

mov

a,nk1

cjne

a,#2,nk_1

mov

nk1,#0

ret

nk_1:

ret

end

23

推荐访问:多功能 时钟 报告