⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bc7281i.asm

📁 使用BC7281A制作的键盘和LED显示产品 this is TIMER CONTROLL USE bc7281a x5045 DS1302 USE at89c4051 F=11.059MHz(2
💻 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 + -