资源描述
安徽工业大学继续教育学院《单片机原理》期末课程设计——单片机计时时钟设计与制作
安徽工业大学继续学院
《单片机原理》期末课程设计
题 目: 单片机计时时钟设计与制作
专 业: 电气工程及其自动化
班 级: 14 电 升
姓 名: 夏 云 飞
学 号: 1410102003035
指导老师: 贺 容 波
成 绩:
( 2015.12 )
目 录
一、绪论… ………………………………………………………………….……1
1.1单片机简介… …………………………………………………….……1
二、硬件系统设计方案………………………………………………………3
2.1 时钟电路的设计 ………………………………………………………3
2.2复位电路的设计…………………………………………………………4
2.3 数码显示电路的设计 …………………………………………………5
2.4按键电路的设计…………………………………………………………7
2.5 蜂鸣器电路的设计 ……………………………………………………8
2.6接线图 ………………………………………………………………9
三、软件系统设计方案
3.1 模块化设计方案………………………………………………………10
3.2 主程序的设计…………………………………………………………11
3.3 LED动态显示程序的设计……………………………………………14
3.4 计时程序模块的设计 ………………………………………………17
3.5 键盘程序的设计………………………………………………………19
3.6 蜂鸣器程序的设计 …………………………………………………22
3.7整个程序 ………………………………………………………………23
四、总结
总结与致谢………………………………………………28
参考文献………………………………………………29
使用说明……………………………………………………29
第29页
安徽工业大学继续教育学院《单片机原理》期末课程设计——单片机计时时钟设计与制作
一 绪论
1.1单片机简介
1.1.1单片机的产生
计算机的发展经历了从电子管到大规模集成电路等几个发展阶段,随着大规模集成电路技术的发展,使计算机向性能稳定可靠、微型化、廉价方向发展,从而出现了单片微型计算机。
所谓单片微型计算机,是指将组成微型计算机的基本功能部件,如中央处理器CPU、存储器ROM和RAM、输入/输出(I/O)接口电路等集成在一块集成电路芯片上的微型计算机,简称单片机。总体来讲,单片机可以用以下“表达式”来表示:
单片机=CPU+ROM+RAM+I/O+功能部件
1.1.2单片机的特点
随着现代科技的发展,单片机的集成度越来越高,CPU的位数也越来越高,已能将所有主要部件都集成在一块芯片上,使其应用模式多、范围广,并具有以下特点:
① 体积小,功耗低,价格便宜,重量轻,易于产品化。
② 控制功能强,运行速度快,能针对性地解决从简单到复杂的各类控制问题,满足工业控制要求,并有很强的位处理和接口逻辑操作等多种功能。
③ 抗干扰能力强,适用温度范围宽。由于许多功能部件集成在芯片内部,受外界影响小,故可靠性高。
④ 虽然单片机内存储器的容量不可能很大,但存储器和I/O接口都易于扩展。
⑤ 可以方便的实现多机和分布式控制。
1.1.3单片机的应用
单片机的应用具有面广量大的特点,目前它广泛的应用于国民经济各个领域,对技术改造和产品的更新起着重要作用。主要表现在以下几个方面:
① 单片机在智能化仪器、仪表中的应用:由于单片机有计算机的功能,它不仅能完成测量,还既有数据处理、温度控制等功能,易于实现仪器、仪表的数字化和智能化。
② 单片机在实时控制中的应用:单片机可以用于各种不太复杂的实时控制系统中,如一般性的温度控制、液面控制、电镀顺序控制等。将测量技术、自动控制技术和单片机技术相结合,充分发挥单片机的数据处理和实时控制功能,使系统工作于最佳状态。
③ 单片机在机电一体化中的应用:单片机有利于机电一体化技术的发展,已广泛应用于数控机床、医疗设备、汽车设备等。
④ 单片机在多机系统中的应用:单片机在多机系统中的应用是将来单片机发展的主要模式,它可以提高单片机的可靠性,使系统运行速度更快。
⑤ 单片机在计算机外围设备中的应用:单片机广泛应用于打印机、绘图机等多种计算机的外围设备,特别是用于智能终端,可大大减轻主机负担,提高系统的运行速度。
⑥ 单片机在家用电器中的应用:单片具有体积小、重量轻、价格便宜等特点,所以家电产品中配上微电脑后,使其身价百倍,功能更强,使用方便,灵活,深得用户欢迎。
⑦ 单片机在通信中的应用:单片机广泛应用于移动通信领域,使移动电话的功能更强大,操作更方便。
二 硬件系统设计方案
2.1 时钟电路的设计
如图2-1所示。单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,如图1所示。
电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数。电路中,电容器C1和C2对振荡器频率有微调作用,通常的取值范围30±10pF;石英晶体选择6MHZ或12MHZ都可以。其结果只是机器周期时间不同,影响计数器的计数初值。
图2-1 时钟电路的设计
2. 2 复位电路的设计
如图2-2所示。单片机的RET引脚为主机提供一个外部复位信号输入端口。复位信号是高电平有效,高电平有效的持续时间应为2个机器周期以上。
复位以后,单片机内各部件恢复到初始状态,单片机从ROM的0000H开始执行程序。
单片机的复位方式有上电自动复位和手工复位两种。图2是51系列单片机常用的上电复位和手动复位的组合电路,只要VCC上升时间不超过1ms,它们都能很好地工作。
阻容器件的参考值为,R1=200Ω,R2=1KΩ,C3=22uF。
图2-2 复位电路的设计
2. 3 数码显示电路的设计
如图2-3所示。单片机应用系统中,通常都需要进行人机对话。这包括人对应用系统的状态干预与数据输入,以及应用系统向人们显示运行结果等。显示器、键盘电路就是用来完成人机对话活动的人机通道。
LED显示器的驱动是一个非常重要的问题,由系统硬件设计框图可知,显示电路由LED显示器、段驱动电路和位驱动电路组成。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏。因此,在实际使用中必须接入LED驱动电路。
LED显示器的显示控制方式分为静态显示和动态显示两种,因此在选择LED驱动器时,一定要先确定显示方式。
静态显示方式就是在任意时刻,所有显示器都按照各自接收的字型码同时显示对应的字符。静态显示方式要求每位LED显示器的公共端必须接地(对共阴极LED),或接高电平(对共阳极LED),而每位LED显示器都由一个具有锁存功能的8位端口去控制。这里所指的8位端口可以直接采用并行I/O接口,也可以采用扩展的串行输入/并行输出移位寄存器。
动态显示是单片机应用系统中最常用的显示方式之一。它是把所有显示器的同名字端互相并联在一起,并把它们接到字形口上。为了防止各个显示器同时显示出相同的字符,每个显示器的公共端还要受另一组信号控制,即把它们接到字位口上。这样,对于一组LED数码显示器需要由两组信号控制:一组是字形口输出的字形码,用来控制显示什么用的字符;另一组是字位口输出的字位码,用来控制将字符显示在第几位显示器上。在这两组信号的控制下,使各位显示器依次从左至右轮流点亮一遍,过一段时间再轮流点亮一遍,如此不断重复。虽然在任一时刻只有一位显示器被点亮,但由于显示器具有余辉效应,而人眼又具有视觉惰性,所以看起来与全部显示器持续点亮效果完全一样。
若选择静态显示,则LED驱动器的选择较为简单,只要驱动器的驱动能力与显示器电流相匹配即可。而且只须考虑段的驱动,因为共阳极接+5V,而共阴极接地,所以位的驱动不需要考虑。
动态显示则不同,由于一位数据的显示是由段选和位选信号共同配合完成的,因此,要同时考虑段和位的驱动能力,而且段的驱动能力决定位的驱动能力。
在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此厂家就生产了位数、尺寸、型号不同的LED显示器供选择。在本设计中,选择4位一体的时钟型LED显示器,简称“4-LED”,前两位显示“天数”的十位和个位,中间两位显示“小时”的十位和个位,后两位显示“分”的十位和个位。
4-LED显示器的引脚如图3所示,是一个共阴极接法的6位时钟型LED显示器。其中a、b、c、d、e、f、g为6位LED各段的公共引出端。D1、D2、D3、D4、D5、D6分别是每一位的共阴极输出端,dp是小数点引出端。
4LED
图2-3 数码显示电路的设计
2. 4 按键电路的设计
如图2-4所示,在倒计时时钟应用系统工作时按钮应具备随时对当前时间进行调整的功能。要实现此功能,可以接入键盘输入电路。
键盘结构的选择:
在单片机组成的测控系统及智能化仪器中,用得最多的是非编码键盘。键盘结构可以分为独立式键盘和矩阵式两类。
在本例中只需要3个按键,因此选择独立式键盘。如图4,电路由按键和三个电阻组成,按键分别命名为day+1、hour+1和minute+1键,按键可以采用轻触开关,电阻采用1KΩ的。
键盘与单片机的接口电路设计:
如图2-4所示,将键盘直接与单片机的P2口连接。用P2.2、P2.1、P2.0引脚分别与day+1、hour+1、minute+1相连。三个按键功能的设计思路如下:
Day+1键功能:设置当前时间离奥运会举行时间的间隔,即天数。
Hour+1键功能:设置当前的时间,即当电子时钟的时间有误差时,需要随时对它进行调整。
Minute+1键功能:与hour+1键的功能一致,将时间达到更精确,以至分秒一
图2-4 按键电路的设计
2.5 蜂鸣器电路的设计
如图2-5所示。设计要求定时时间到时要有声音提醒信号产生,可选择一只蜂鸣器来实现这一功能。压电式蜂鸣器工作时约需10mA的驱动电流,并设计一个相应的驱动及控制电路。电路设计如图5所示,蜂鸣器作为三极管VT1的集电极负载,当VT1导通时,蜂鸣器发出鸣叫声音,VT1截止时,蜂鸣器不发声。
蜂鸣器电路与单片机的接口:VT1的基极接到单片机P2口的P2.3引脚,P2.3引脚作为输出口使用。当P2.3=0时,VT1导通时,使蜂鸣器的两个引脚间获得将近5V的直流电压,蜂鸣器中有电流通过,而产生蜂鸣音。当P2.3=1时,VT1截止,蜂鸣器的两引脚间的直流电压接近于0V,蜂鸣器不发声。
图2-5 蜂鸣器电路的设计
2.6 接线图
三 软件系统设计方案
3.1模块化的方案
进行应用软件设计时可采用模块化程序设计方法,其优点是:
每个模块的程序结构简单,任务明确,易于编写、调试和修改。
程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,便于功能扩充。
对于使用频繁的子程序可以建立子程序库,便于多个模块调用。
便于分工合作,多个人同时进行程序的编写和调试工作,加快软件研制进度。
设计方案及框图:
如图2-6所示。根据设计要求,首先要确定软件设计方案,即确定该软件应该完成哪些功能;其次是规划为了完成这些功能需要分成多少个功能模块,以及每一个程序模块的具体任务是什么。划分模块时应遵循下述原则:
每个模块应具有独立的功能,能产生一个明确的结果。
模块之间的控制参数应尽量简单,数据参数应尽量少。
模块长度适中。
根据模块的划分原则,将该程序划分成6个模块。
主程序
数码管动态扫描模块
当前时间倒计时模块
当前时间调整模块
蜂鸣器自动报时模块
数字转换模块
图2-6 整体设计框图
3.2 主程序的设计
主程序的内容一般包括:主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。
程序的起始地址
MCS-51系列单片机复位后,(PC)=0000H,而0003H—002BH分别为各中断源的入口地址。所以,编程时应在0000H处写一跳转指令。
主程序的初始化内容
所谓初始化,是对将要用到MCS—51系列单片机内部部件或扩展芯片进行初始化工作状态设定。MCS—51系列单片机复位后,特殊功能寄存器IE,IP的内容均为00H,所以应对IE,IP进行初始化编程,以开放CPU中断,允许某些中断源中断和设置中断优先级等。
开始
主程序设计框图
启动定时器
设置初始常数
置定时器模式及工作方式
读取小时值
转换成显示数据
显示数据送缓冲
读取分钟值
转换成显示数据
显示数据送缓冲
调用显示子程序
主程序清单:
ALB_SET BIT P3.2 ;调节闹钟控制器
M_SET BIT P3.3 ;分钟控制位
H_SET BIT P3.4 ;小时控制位
SECOND EQU 30H ;秒计数器
MINUTE EQU 31H ;分钟计数器
HOUR EQU 32H ;小时计数器
TCNT EQU 34H ;50毫秒计数器
ALB_M EQU 35H
ALB_H EQU 36H
;---------------------------------------------------------------------
ORG 0000H
SJMP START
ORG 000BH
LJMP INT_T0
;---------------------------------------------------------------------
ORG 0050H
START: MOV DPTR,#TABLE
MOV ALB_M,#01
MOV ALB_H,#01
MOV HOUR,#0 ;初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#(65536-50000)/256 ;定时50毫秒 取整数-TH0
MOV TL0,#(65536-50000)MOD 256 ;模运算 取尾数-TL0
MOV IE,#82H
SETB TR0
3.3 LED动态显示的设计
在采用动态扫描显示方式时,要使得LED显示得比较均匀,又有足够的亮度,需要设置适当的扫描频率。当扫描频率在70HZ左右时,能够产生足够的图形和较好的显示效果。一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。
本例中,采用软件定时并用的方式,即通过软件延时程序实现1ms的定时。
LED程序清单:
DISPLAY:MOV P1,#01111111B
CJNE R4,#00AH,X1
MOV P1,#11111111B
X1: MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,B
CLR P2.2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P2.5
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.5
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.4
RET
DISPLAY1:
MOV A,ALB_M ;显示分钟
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,B
CLR P2.2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,ALB_H ;显示小时
MOV B,#10
DIV AB
CLR P2.5
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.5
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.4
RET
TABLE: DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,10H
;---------------------------------------------------------
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
b1: mov a,alb_m
cjne a,minute,rt
mov a,alb_h
cjne a,hour,rt
call beep_bl
rt: reti
3.4 计时程序的设计
倒计时时钟系统的主要任务是:采用单片机为核心器件24小时后天数减一,并用LED显示器将它显示出来。
计算定时器T0的计数初值
定时时间 100us
计数初值 = ——————— = ————— = 100
机器周期时间 1us
计数初值 = 256– 100 = 156
计时程序设计框图:
INT_T0: MOV TH0,#(65536-50000)/256
计时程序清单:
MOV TL0,#(65536-50000)MOD 256
INC TCNT ;累计50毫秒
MOV A,TCNT
MOV R4,TCNT
CJNE A,#20,RETUNE ;计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
mov p2,#11111111b
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
3.5 键盘程序的设计
键盘子程序是由KEY子程序组成,此子程序的功能是实现对当前时间的调整和输入倒计时时间。
① KEY子程序的功能是对当前时间进行调整。
② 在程序中,将倒计天数以及时钟的小时位、分钟位分别进行调整。。
③ 按键去抖动的处理。由于机械触点的弹性作用,在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性决定,一般为5—10ms。而按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次,为了确保CPU对键的一次闭合仅作一次处理,键抖动可用硬件或软件两种方法消除。本例中采用软件方法。
键盘程序清单:
;判断是否有控制键按下,是哪一个键按下
A1: ;调用显示子程序
lcall b1
JNB ALB_SET,S4
LCALL DISPLAY
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S2: LCALL DELAY
JB M_SET,A1
K1: INC MINUTE ;分钟值加1
MOV A,MINUTE
CJNE A,#60,J1 ;判断是否加到60分
MOV MINUTE,#0
LJMP K2
S3: LCALL DELAY
JB H_SET,A1
K2: INC HOUR ;小时值加1
MOV A,HOUR
CJNE A,#24,J2 ;判断是否加到24小时
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
S4: LCALL DISPLAY1
JNB M_SET,S5
JNB H_SET,S6
LJMP A1
S5: LCALL DELAY
JB M_SET, A1
INC ALB_M
MOV A,ALB_M
CJNE A,#60,J3
MOV ALB_M,#0
LJMP K3
S6: LCALL DELAY
JB H_SET,A1
K3: INC ALB_H
MOV A,ALB_H
CJNE A,#24,J4
MOV ALB_H,#0
MOV ALB_M,#0
LJMP A1
;-----------------------------------------------------------------
;等待按键抬起
J1: JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2: JB H_SET,A1
LCALL DISPLAY
SJMP J2
J3: JB M_SET,S4
LCALL DISPLAY1
SJMP J3
J4: JB H_SET,S4
LCALL DISPLAY1
SJMP J4
3.6 蜂鸣器程序的设计
当前时间和闹钟设置时间相等后,会激活蜂鸣器程序产生高频间接性的振动,
从而产生“嘟嘟”的闹声。
蜂鸣器程序清单:
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL p2.1
DJNZ R6,BL1
MOV R5,#100
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延时R5×10MS
MOV R6,#10
call display1
BL4: MOV R7,#10
BL5: DJNZ R7,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
END
3.7 整个程序清单
ALB_SET BIT P3.2 ;闹钟调节控制位
M_SET BIT P3.3 ;分钟控制位
H_SET BIT P3.4 ;小时控制位
SECOND EQU 30H ;秒计数器
MINUTE EQU 31H ;分钟计数器
HOUR EQU 32H ;小时计数器
TCNT EQU 34H ;50毫秒计数器
ALB_M EQU 35H
ALB_H EQU 36H
;---------------------------------------------------------------------
ORG 0000H
SJMP START
ORG 000BH
LJMP INT_T0
;---------------------------------------------------------------------
ORG 0050H
START: MOV DPTR,#TABLE
MOV ALB_M,#01
MOV ALB_H,#01
MOV HOUR,#0 ;初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#(65536-50000)/256 ;定时50毫秒 取整数-TH0
MOV TL0,#(65536-50000)MOD 256 ;模运算 取尾数-TL0
MOV IE,#82H
SETB TR0
;----------------------------------------------------------------------
;判断是否有控制键按下,是哪一个键按下
A1: ;调用显示子程序
lcall b1
JNB ALB_SET,S4
LCALL DISPLAY
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S2: LCALL DELAY
JB M_SET,A1
K1: INC MINUTE ;分钟值加1
MOV A,MINUTE
CJNE A,#60,J1 ;判断是否加到60分
MOV MINUTE,#0
LJMP K2
S3: LCALL DELAY
JB H_SET,A1
K2: INC HOUR ;小时值加1
MOV A,HOUR
CJNE A,#24,J2 ;判断是否加到24小时
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
S4: LCALL DISPLAY1
JNB M_SET,S5
JNB H_SET,S6
LJMP A1
S5: LCALL DELAY
JB M_SET, A1
INC ALB_M
MOV A,ALB_M
CJNE A,#60,J3
MOV ALB_M,#0
LJMP K3
S6: LCALL DELAY
JB H_SET,A1
K3: INC ALB_H
MOV A,ALB_H
CJNE A,#24,J4
MOV ALB_H,#0
MOV ALB_M,#0
LJMP A1
;-----------------------------------------------------------------
;等待按键抬起
J1: JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2: JB H_SET,A1
LCALL DISPLAY
SJMP J2
J3: JB M_SET,S4
LCALL DISPLAY1
SJMP J3
J4: JB H_SET,S4
LCALL DISPLAY1
SJMP J4
;-----------------------------------------------------------------
;定时器中断服务程序,对秒,分钟和小时的计数
INT_T0: MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
INC TCNT ;累计50毫秒
MOV A,TCNT
MOV R4,TCNT
CJNE A,#20,RETUNE ;计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
mov p2,#11111111b
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;-------------------------------------------------------------------
;显示控制子程序
DISPLAY:MOV P1,#01111111B
CJNE R4,#00AH,X1
MOV P1,#11111111B
X1: MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,B
CLR P2.2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P2.5
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.5
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.4
RET
DISPLAY1:
MOV A,ALB_M ;显示分钟
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,B
CLR P2.2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,ALB_H ;显示小时
MOV B,#10
DIV AB
CLR P2.5
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.5
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.4
RET
TABLE: DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,10H
;---------------------------------------------------------
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
b1: mov a,alb_m
cjne a,minute,rt
mov a,alb_h
cjne a,hour,rt
call beep_bl
rt: reti
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL p2.1
DJNZ R6,BL1
MOV R5,#100
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延时R5×10MS
MOV R6,#10
call display1
BL4: MOV R7,#10
BL5: DJNZ R7,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
展开阅读全文