📄 bc7281i.asm
字号:
; this is TIMER CONTROLL USE bc7281a x5045 DS1302
; USE ;at89c4051 F=11.059MHz(24mhz)
;2006.3.19 改时间设置次序:北京时间--长度--开始时间
;2006.3.22 ;加使用限制(试用版)除霜250, 70h
;2006.4.1 加看门狗
;2007.1.12 刷新LED灯
;******************************************************************************************
clk bit p3.5 ;7281
dat bit p3.7 ;
key bit p3.3 ;
TIMECLK bit P1.3 ;1302-7
TIMEIO bit P1.2 ; 6
TIMERST bit P1.1 ; 5
cs bit p1.7 ;5045--1
sout bit p1.6 ; 2
slk bit p1.5 ; 6
sin bit p1.4 ; 5
buzzer bit p3.2 ;6--喇叭
jk2 BIT P3.4 ;8--J2 吸合除霜
jk1 BIT P3.1 ;3--J1 常闭制冷
KIN BIT P1.0 ;12--swich 外接除霜保护,低电平输入停止除霜
;*************************BIT**************************************************
bit_huas BIT 00H ;设定化霜位
bit_del3m BIT 01H ;3分钟延时开始
setbit bit 08h ;进入设置状态
wrbit1 bit 09h ;25045
;************************RAM********************************************
S7281_IN data 13h
S7281_OUT data 14h
WAIT_S DATA 15H ;按键等待时间
key_step data 16h ;"设置"键操作记数
KEYRAM DATA 17H ;读键值-保存
T0RAM DATA 1AH ;T0 定时
timer data 1bh ;延时单元
timer1 data 1ch ;
timer2 data 1dh ;
bit_count data 1Eh ;BC7281接收记数单元
temp data 1Fh ;
timer_h data 25h ;hou
timer_m data 26h ;min
timer_s data 27h ;sec
TIM_STOP_H DATA 28H ;关闭除霜时间
TIM_STOP_M DATA 29H ;
SUBTIMER DATA 2AH ;除霜剩余时间
;30H--4BH 通用单元
qishi data 4ch ;4CH-63H 12段设定起始时间 ROM 00H--17H
zushu data 64H ;设定控制段数 ROM 18H
changdu data 65h ;65h 设定时间长度 ROM 19H
changdu_H data 66h ;66-67H CHANGDU 的时钟表示
changdu_M data 67h
;**********************************************************************************************************
org 0000h
start: mov sp,#68h ;at89c4051
MOV P1,#0FFH
MOV P3,#0FFH
MOV PSW,#00H
MOV IE,#00H
; ljmp flash_led ;+++++++++++++++++++++++
mov r0,#20h
mov r2,#48h
clr a
slp000: mov @r0,a
inc r0
djnz r2,slp000
LCALL DEL50MS ;延时确保7281上电复位
acall black_ALL ;全部熄灭
lcall init1302
ACALL INI7281 ;7281初始化
;************************************位扫描程序**
clr cs ;
nop ;
setb cs ;
BITSCAN: MOV TEMP,#00H
MOV R2,#5bH
BITSLOOP: mov S7281_OUT,#18h ;写段码寄存器指令
call semit
MOV A,TEMP ;点亮
MOV S7281_OUT,A
call semit
INC A
MOV TEMP,A
LCALL DEL50MS ; DEL50MS
clr cs ;
nop ;
setb cs ;
DJNZ R2,BITSLOOP
mov r2,#05 ;保持全亮
bilp0: Lcall DEL50MS
djnz r2,bilp0
Lcall xiang1 ;响1声
clr cs ;
nop ;
setb cs ;
;******************************* ;读时钟 30h-32h***********
READCLOCK: LCALL READ_CLOCK
MOV A,30H
CLR C
SUBB A,#24H
JNC INCLOCK ;若时钟错误则写初始值
MOV A,31H
CLR C
SUBB A,#60H
JNC INCLOCK
MOV A,32H
CLR C
SUBB A,#60H
JC INCLOCKB ;正常
INCLOCK: MOV TIMER_H,#00
MOV TIMER_M,#00
mov timer_s,#00
LCALL WRIT_CLOCK ;写时,分,秒
MOV 30H,#00
MOV 31H,#00
MOV 32H,#00
INCLOCKB: mov timer_h,30h
mov timer_m,31h
mov timer_s,32h
;********************************读设定时间到RAM
readrom: mov r1,#00 ; rom地址:00H-1aH
mov r0,#qishi
mov r3,#1ch
clr wrbit1
readlp00: lcall readbb ;r1-r0 r3
LCALL CHAN_2BETY ;将长度变换成2字节时钟模式
;****************************** ;检查读数错误
acall black_ALL ;全部熄灭
lcall SET_24LED ;关闭24个灯,点亮设定灯
MOV R1,#TIMER_h
lcall disp_mh ;显示4个十进制数字,R1--数据高位地址;使用R2R3
mov r1,changdu
lcall DISP_2data_r1 ;显示两个数字 R1
acall WREN ;写容许
LCALL ondog ;写状态积存器--启动看门狗
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
main0: jb setbit,main03 ;从设置参数返回
lcall disp_changled ;从程序返回;只亮长度灯
lcall flash_sc0 ;闪烁秒灯
JB bit_del3m,main01 ;延时3分钟到吗
JB bit_huas,main02 ;如正在除霜
ajmp main
main01: LCALL OFFALL_LED ;关闭所有功能指示灯 ;扩展不闪烁
LCALL disp_subtim ;显示剩余时间 SUBTIMER
ajmp main
main02: LCALL FLASH_CS ;闪烁除霜灯
LCALL disp_subtim ;显示剩余时间 SUBTIMER
ajmp main
main03: clr setbit
mov 20h,#00 ;清位
SETB JK1 ;制冷开始(开机状态)
SETB JK2
mov r1,changdu ;显示时间长度
lcall DISP_2data_r1
lcall disp_changled ;只亮长度灯
lcall flash_sc0 ;闪烁秒灯
sjmp main
;-------------------------------------
main: clr cs ;
nop ;
setb cs ;
LCALL DEL200MS
lcall flash_led ;刷新LED灯 +++++++++++++++++++++++++++++++++++++++++
LCALL DEL200MS
LCALL READ_CLOCK ;读时钟
MOV A,31H ;分变了?
XRL A,TIMER_M
JNZ DISP_MH0 ;分变,则显示分和时;检查动作否;不变返回
chk_key1: jnb kin,stop_hs ;化霜保护转
chk_key2: jb key,MAIN ;无键--返回
ajmp deal_key ;键处理
stop_hs: JNB bit_huas,chk_key2 ;不在除霜状态不处理
lcall DEL50MS ;50ms
lcall DEL50MS ;50ms
jb kin,chk_key2 ;非低电平返回
ajmp DELAY3MINIT ;外部终止除霜
;*************************************** 分钟小时显
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -