?? main.asm
字號(hào):
djnz r0,iicread0
call iicrbyte
call iicnack
call iicstop
mov r0,#digital_byte ;時(shí)間數(shù)據(jù)存入顯存
mov a,#date_data
add a,#2
mov r1,a
mov a,@r1 ;秒
anl a,#0fh
mov @r0,a
inc r0
mov a,@r1 ;十秒
swap a
anl a,#0fh
mov @r0,a
inc r0
inc r1
mov a,@r1
anl a,#0fh ;分
mov @r0,a
inc r0
mov a,@r1
swap a
anl a,#0fh ;十分
mov @r0,a
inc r0
inc r1
mov a,@r1
anl a,#0fh ;時(shí)
mov @r0,a
inc r0
mov a,@r1
swap a
anl a,#0fh ;十時(shí)
mov @r0,a
inc r0
mov @r0,#20h
inc r0
mov @r0,#20h
ret
retrdn: call beep3
call iicstop
ret
;*****************************************************
;iic寫字節(jié)
;入口條件:被寫數(shù)據(jù)acc
;*****************************************************
iicwbyte: mov r2,#08H
wlp: rlc a
jc wr1
clr sda ;發(fā)送0
setb scl
nop
nop
clr scl
djnz r2,wlp
ret
wr1: setb sda ;發(fā)送1
setb scl
nop
nop
clr scl
clr sda
djnz r2,wlp
ret
;*****************************************************
;iic讀字節(jié)
;出口參數(shù):所讀數(shù)據(jù)acc
;*****************************************************
iicrbyte: mov r2,#08h
iicr2: setb sda
setb scl
nop
mov c,sda
clr scl
rlc a
djnz r2,iicr2
clr sda
mov @r1,a
ret
;*****************************************************
;iic起始位
;*****************************************************
iicstart: setb sda
nop
setb scl
nop
nop
clr sda
nop
nop
clr scl
ret
;*****************************************************
;停止位
;*****************************************************
iicstop: clr sda
nop
setb scl
nop
nop
setb sda
nop
nop
ret
;*****************************************************
;iic應(yīng)答
;*****************************************************
iicack: clr sda
nop
setb scl
nop
nop
clr scl
ret
;*****************************************************
;iic非應(yīng)答
;*****************************************************
iicnack: setb sda
nop
setb scl
nop
nop
clr scl
ret
;*****************************************************
;iic檢查應(yīng)答
;*****************************************************
iiccack: setb sda
nop
setb scl
nop
mov c,sda
clr scl
clr sda
ret
;*****************************************************
;鍵盤中斷處理程序
;*****************************************************
keys_int: clr ea
clr ie1
clr digital_bit
mov p2,#0
mov a,p1
cpl a
anl a,#0fh
cjne a,#0,keys_reader
clr ie1
setb ea
setb digital_bit
reti
keys_reader: call time10ms
mov a,p1
cpl a
anl a,#0fh
mov keys_byte,a
keys_reader_0: call digital
mov a,p1
cpl a
anl a,#0fh
cjne a,#0,keys_reader_0
clr ie1
setb ea
setb digital_bit
reti
;*****************************************************
;按鍵處理程序
;*****************************************************
keys_management: cjne a,#01h,keys_check_2
sjmp keys_1
keys_check_2: cjne a,#02h,keys_check_3
sjmp keys_2
keys_check_3: cjne a,#04h,keys_check_4
sjmp keys_3
keys_check_4: cjne a,#08h,keys_check_err
sjmp keys_4
keys_check_err: setb digital_bit
ret
keys_1: jmp keys_manage_1
keys_2: jmp keys_manage_2
keys_3: jmp keys_manage_3
keys_4: jmp keys_manage_4
;*****************************************************
;1鍵處理,選擇時(shí)鐘設(shè)置的位置
;*****************************************************
keys_manage_1: clr ex0
call beep1
mov a,aleart_data ;若目前處于鬧鐘設(shè)置狀態(tài)則提示并退出
jnb acc.7,keys_manage_200
call beep2
setb digital_bit
setb ex0
ret
keys_manage_200: mov a,digital_flash_bit ;設(shè)置目前處于時(shí)鐘設(shè)置狀態(tài)
setb acc.7
mov digital_flash_bit,a
anl a,#07h
cjne a,#0,keys_manage_20 ;此字節(jié)為負(fù)邏輯,0為第五位數(shù)碼管,5為第零位數(shù)碼管
mov a,#digital_byte ;將閃爍位的最高位置1
add a,#5
mov r0,a
mov a,@r0
setb acc.7
mov @r0,a
mov r0,#digital_byte ;將閃爍位的高一位的最高位清0
mov a,@r0
clr acc.7
mov @r0,a
inc digital_flash_bit
setb digital_bit
ret
keys_manage_20: cjne a,#1,keys_manage_21
mov a,#digital_byte
add a,#4
mov r0,a
mov a,@r0
setb acc.7
mov @r0,a
inc r0
mov a,@r0
clr acc.7
mov @r0,a
inc digital_flash_bit
setb digital_bit
ret
keys_manage_21: cjne a,#2,keys_manage_22
mov a,#digital_byte
add a,#3
mov r0,a
mov a,@r0
setb acc.7
mov @r0,a
inc r0
mov a,@r0
clr acc.7
mov @r0,a
inc digital_flash_bit
setb digital_bit
ret
keys_manage_22: cjne a,#3,keys_manage_23
mov a,#digital_byte
add a,#2
mov r0,a
mov a,@r0
setb acc.7
mov @r0,a
inc r0
mov a,@r0
clr acc.7
mov @r0,a
inc digital_flash_bit
setb digital_bit
ret
keys_manage_23: cjne a,#4,keys_manage_24
mov a,#digital_byte
add a,#1
mov r0,a
mov a,@r0
setb acc.7
mov @r0,a
inc r0
mov a,@r0
clr acc.7
mov @r0,a
inc digital_flash_bit
setb digital_bit
ret
keys_manage_24: cjne a,#5,keys_manage_25
mov r0,#digital_byte
mov a,@r0
setb acc.7
mov @r0,a
inc r0
mov a,@r0
clr acc.7
mov @r0,a
mov digital_flash_bit,#0
setb digital_bit
ret
keys_manage_25: setb digital_bit
setb ex0
ret
;*****************************************************
;2鍵處理,將調(diào)節(jié)后的數(shù)據(jù)寫至?xí)r鐘芯片中
;*****************************************************
keys_manage_2: call beep1 ;清除所有的閃爍并重置時(shí)鐘
mov a,digital_flash_bit
jb acc.7,keys_manage_100
mov a,aleart_byte
jb acc.7,keys_manage_101
setb digital_bit
setb ex0
ret
keys_manage_100: mov digital_flash_bit,#0 ;清除狀態(tài)
mov r0,#8 ;需要清除閃爍標(biāo)志的數(shù)量
mov r1,#digital_byte
keys_manage_10: mov a,@r1
clr acc.7
mov @r1,a
inc r1
djnz r0,keys_manage_10 ;沒清除完則繼續(xù)清除
mov r1,#digital_byte
mov a,#date_data
add a,#2
mov r0,a
mov b,@r1 ;秒
inc r1
mov a,@r1 ;十秒
swap a
orl a,b
mov @r0,a
inc r0
inc r1
mov b,@r1 ;分
inc r1
mov a,@r1 ;十分
swap a
orl a,b
mov @r0,a
inc r0
inc r1
mov b,@r1 ;時(shí)
inc r1
mov a,@r1 ;十時(shí)
swap a
orl a,b
mov @r0,a
call timer_write
call beep1
setb digital_bit
setb ex0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -