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

📄 电子时钟日历led程序.asm

📁 12位LED的万年历 51单片机实现
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;电子万年历源程序和电路图     (上传人:陈永飞    QQ:49204743)
;本人在多个网站才好不容易找到,很简单,我已经编译好了HEX文件和BIN文件.
;只要用编程器写入C51就好.
time0   equ   32       ;53ms         
time1   equ   187      ;10s
sel0    equ   0feh     ;秒低位
sel1    equ   0fdh     ;秒高位
sel2    equ   0fbh     ;分低位
sel3    equ   0f7h     ;分高位
sel4    equ   0efh     ;时低位
sel5    equ   0dfh     ;时高位
sel6    equ   0bfh     ;日低位
sel7    equ   07fh     ;日高位
sel8    equ   0feh     ;月低位
sel9    equ   0fdh     ;月高位
sel10   equ   0fbh     ;年低位
sel11   equ   0f7h     ;年高位
selno   equ   0ffh
;---------------------
outPort   data p0
selPort0  data p2
selPort1  data p1

second0   data 08h
second1   data 09h
minute0   data 0ah
minute1   data 0bh
hour0     data 0ch
hour1     data 0dh
date0     data 0eh
date1     data 0fh
month0    data 10h
month1    data 11h
year0     data 12h
year1     data 13h

selled    data 30h           ;led动态扫描计数
seldata   data 31h           ;修改时选择项目
key0Data  data 32h           ;按键状态
key1Data  data 33h
key2Data  data 34h
key3Data  data 35h
tims      data 36h
tims0     data 37h
;---------------------
rst       bit  p3.0
io        bit  p3.1
sclk      bit  p3.2
key0Pin   bit  p1.4
key1Pin   bit  p1.5
key2Pin   bit  p1.6
key3Pin   bit  p1.7
;---------------------
chgMode   bit  20h.0         ;修改状态或平常状态
sel0Dot   bit  21h.0         ;小数点状态
sel1Dot   bit  21h.1
sel2Dot   bit  21h.2
sel3Dot   bit  21h.3
sel4Dot   bit  21h.4
sel5Dot   bit  21h.5
sel6Dot   bit  21h.6
sel7Dot   bit  21h.7
sel8Dot   bit  22h.0
sel9Dot   bit  22h.1
sel10Dot  bit  22h.2
sel11Dot  bit  22h.3
;---------------------
       org     0
       ljmp    main
       org     0bh
;----------------------------------------
tim0:  mov     th0,#0f2h     ;24M-1666us,50Hz刷新率
       mov     tl0,#0fch     ;3332
       push    acc
       push    psw
       push    00h

        mov     a,selled
        rl      a
        jmp     @a+dptr
selLab: ajmp    sel0do
        ajmp    sel1do
        ajmp    sel2do
        ajmp    sel3do
        ajmp    sel4do
        ajmp    sel5do
        ajmp    sel6do
        ajmp    sel7do
        ajmp    sel8do
        ajmp    sel9do
        ajmp    sel10do
        ;ajmp    sel11do
sel11do:mov     selled,#0ffh
        mov     c,sel11Dot
        mov     selPort1,#sel11
        ajmp    sel10a
sel0do: mov     selPort0,#sel0
        mov     c,sel0Dot
        ajmp    sel7a
sel1do: mov     selPort0,#sel1
        mov     c,sel1Dot
        ajmp    sel7a
sel2do: mov     selPort0,#sel2
        mov     c,sel2Dot
        ajmp    sel7a
sel3do: mov     selPort0,#sel3
        mov     c,sel3Dot
        ajmp    sel7a
sel4do: mov     selPort0,#sel4
        mov     c,sel4Dot
        ajmp    sel7a
sel5do: mov     selPort0,#sel5
        mov     c,sel5Dot
        ajmp    sel7a
sel6do: mov     selPort0,#sel6
        mov     c,sel6Dot
        ajmp    sel7a
sel7do: mov     selPort0,#sel7
        mov     c,sel7Dot
sel7a:  mov     selPort1,#selno
        ajmp    _tim0a
sel8do: mov     selPort1,#sel8
        mov     c,sel8Dot
        ajmp    sel10a
sel9do: mov     selPort1,#sel9
        mov     c,sel9Dot
        ajmp    sel10a
sel10do:mov     selPort1,#sel10
        mov     c,sel10Dot
sel10a: mov     selPort0,#selno
        ;ajmp    _tim0a
_tim0a:mov    f0,c
       mov    a,selled
       add    a,#second0
       mov    r0,a
       mov    a,@r0
       add    a,#2
       movc   a,@a+pc
       sjmp   _tim0b
NUMLAB:  ;共阳
db 0C0H  ;NUM_0
db 0F9H  ;NUM_1
db 0A4H  ;NUM_2
db 0B0H  ;NUM_3
db 99H   ;NUM_4
db 92H   ;NUM_5
db 82H   ;NUM_6
db 0F8H  ;NUM_7
db 80H   ;NUM_8
db 90H   ;NUM_9
;db 88H   ;NUM_A
;db 83H   ;NUM_B
;db 0C6H  ;NUM_C
;db 0A1H  ;NUM_D
;db 86H   ;NUM_E
;db 8EH   ;NUM_F
_tim0b:mov     c,f0
       mov     acc.7,c
       mov     outPort,a
       inc     selled

       djnz    tims,_tim0c
       mov     tims,#time0
       acall   read1302      ;读1302/53ms
       jnb     chgMode,_tim0c
       djnz    tims0,_tim0c
       clr     chgMode     ;修改模式结束
       mov     a,#0ffh
       mov     21h,a
       mov     22h,a
_tim0c:mov     a,tims
       anl     a,#7
       jnz     _tim0d
       acall   key0        ;按键扫描
       acall   key1
       acall   key2
       acall   key3
_tim0d:pop     00h
       pop     psw
       pop     acc
       reti
;----------------------------------------
main:     mov   sp,#3fh
          mov   tmod,#01h
          setb  tr0
          mov   ie,#82h
          clr   a
          mov   selled,a
          mov   seldata,a
          mov   21h,a
          mov   22h,a
          clr   chgMode
          mov   tims,#time0
          mov   dptr,#selLab
          sjmp  $
;----------------------------------------
_Key0Do:    ;up
       acall   _keyIn
       jnc     _Key0Do0
       ajmp    inc_vale
_Key0Do0:
ret
;----------------------------------------
_Key1Do:    ;down
       acall   _keyIn
       jnc     _Key0Do0
       ajmp    dec_vale
;----------------------------------------
_Key2Do:    ;left
     acall  _keyIn
     jnc    _Key3Do0           ;第一次进入修改模式,不修改内容
     inc    seldata
     mov    a,seldata
     cjne   a,#6,_Key3Do0
     clr    a                  ;秒-0,分-1,时-2,日-3,月-4,年-5
     sjmp   _Key3Do2
;----------------------------------------
_Key3Do:    ;right
     acall  _keyIn
     jnc    _Key3Do0           ;第一次进入修改模式,不修改内容
     dec    seldata
     mov    a,seldata
     cjne   a,#0ffh,_Key3Do0
     mov    a,#5               ;秒-0,分-1,时-2,日-3,月-4,年-5
_Key3Do2:
     mov    seldata,a
_Key3Do0:
     mov    a,seldata
     cjne   a,#4,$+3
     jnc    _Key3Do1
     mov    22h,#0ffh
     mov    21h,#0fch
     jz     _Key3Do0a
     mov    b,a
     mov    a,21h
     rl     a
     rl     a
     djnz   b,$-2
     mov    21h,a
_Key3Do0a:
     ret
_Key3Do1:
     clr    acc.2               ;subb   a,#4
     mov    21h,#0ffh
     mov    22h,#0fch
     jz     _Key3Do1a
     mov    b,a
     mov    a,22h
     rl     a
     rl     a
     djnz   b,$-2
     mov    22h,a
_Key3Do1a:
     ret
;----------------------------------------
_keyIn:
     mov    c,chgMode
     jc     _keyIn0
     setb   chgMode             ;第一次进入修改模式
_keyIn0:mov tims0,#time1
ret
;----------------------------------------
read1302:
     mov    r1,#second1+1
     mov    b,#81h        ;second
     acall  read1302a
     mov    b,#83h        ;minute
     acall  read1302a
     mov    b,#85h        ;hour
     acall  read1302a
     mov    b,#87h        ;date
     acall  read1302a
     mov    b,#89h        ;month
     acall  read1302a
     mov    b,#8dh        ;year
     acall  read1302a
     ret
;----------------------------------------
read1302a:
     setb   rst
     mov    a,b
     acall  wr_1302
     acall  rd_1302
     clr    rst
     mov    b,a
     anl    a,#0fh
     dec    r1
     mov    @r1,a
     xch    a,b
     swap   a
     anl    a,#07h
     dec    r1
     mov    @r1,a
     ret
;---------------------------
wr_cmd:
     setb    rst
     push    acc
     mov     a,b
     acall   wr_1302
     pop     acc
     acall   wr_1302
     clr     rst
     ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -