📄 24c08seg.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;本程序使用24C08存储七段码的实时状态
;///////////////////////////////////////////
i2c_clk bit p3.4 ;时钟信号
i2c_data bit p3.5 ;数据信号
org 0000h
ajmp main
org 0030h
main:
CLR P2.0 ;选中个位
mov dptr,#tab ;表头
mov r0,#30h ;r0为指针
mov 2bh,#00h ;2bh为地址L
lcall r_d ;调用读EEPROM子程序
lcall delay10ms ;延时10ms
mov a,30h
cjne a,#0Ah,com1
com1:
jc loop
mov 30h,#00h
loop:
mov a,30h
movc a,@a+dptr
mov p0,a
mov r4,#100
tt3:
lcall delay10ms
djnz r4,tt3
inc 30h
mov r0,#30h
mov 2bh,#00h
lcall w_t
lcall delay10ms
mov a,30h
cjne a,#10,loop
mov 30h,#00h
mov a,30h
ajmp loop
delay10ms:
mov r6,#100
tt2:
mov r5,#50
djnz r5,$
djnz r6,tt2
ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 2bh为地址L r0为指针
w_t:
a067EH: SETB i2c_data ;;;;写
SETB i2c_clk ;;;clk
CLR i2c_data ;;;sda//start
LCALL a0799H
CLR i2c_clk
LCALL a0799H
MOV A, #0A0H ;a0h,a2h,a4h,a6h
LCALL a06EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall ledb;;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
MOV A, 2bh ;;;;;写地址L
LCALL a06EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall ledb;;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
a06BDH: MOV A, @R0 ;;;;写数据
LCALL a06EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall ledb;;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
CLR i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
SETB i2c_data
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06EEH: MOV R6, #08H
a06F0H: RLC A ;;;
MOV i2c_data, C
lcall a0799h
SETB i2c_clk
lcall a0799h
CLR i2c_clk
lcall a0799h
DJNZ R6, a06F0H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
ae6EEH: MOV R6, #08H
ae6F0H: RLC A ;;;
MOV i2c_data, C
lcall a0799h
SETB i2c_clk
lcall a0799h
CLR i2c_clk
lcall a0799h
DJNZ R6, ae6F0H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
r_d:
a0718H: SETB i2c_data ;;;;写
SETB i2c_clk
CLR i2c_data
LCALL a0799H
CLR i2c_clk
LCALL a0799H
MOV A, #0A0H
LCALL ae6EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall leda;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
MOV A, 2bh ;;;;;写地址L
LCALL ae6EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall leda;; JB i2c_data, $
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
CLR i2c_clk
LCALL a0799H
CLR i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
SETB i2c_data
lcall delay10ms
SETB i2c_data ;;;;;;;读
SETB i2c_clk
CLR i2c_data
LCALL a0799H
CLR i2c_clk
LCALL a0799H
MOV A, #0A1H
LCALL ae6EEH
LCALL a0799H
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall leda;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
NOP
NOP
a0747H: MOV R6, #08H ;;;
CLR A
CLR C
SETB i2c_data
LCALL a0799H
a0750H: SETB i2c_clk ;;;
LCALL a0799H
MOV C, i2c_data
RLC A
CLR i2c_clk
LCALL a0799H
DJNZ R6, a0750H
MOV @R0, A
INC R1
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
CLR i2c_clk
LCALL a0799H
CLR i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
SETB i2c_data
RET
a0784H: CLR i2c_data ;;;
LCALL a0799H
SETB i2c_clk
LCALL a0799H
CLR i2c_clk
LJMP a0747H
;;;;;;
a0799H: NOP
NOP
NOP
nop
NOP
NOP
NOP
nop
NOP
NOP
NOP
nop
NOP
NOP
NOP
nop
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leda: mov b, #50h
led1: jnb i2c_data, led0
lcall a0799h
djnz b, led1
;mov 4ch, #0ddh
nop
led0: ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ledb: mov b, #50h
led0b: jnb i2c_data, led0a
lcall a0799h
djnz b, led0b
nop
led0a: ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -