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

📄 dz.asm

📁 单片机编程的常用子程序
💻 ASM
字号:
;-----------------------------
;2006年电子设计大赛选拔试题
;制作人:李明星
;完成日期:2006。08。21
;晶震:22。1148
;-----------------------------

	KEY_1 BIT P1.0
	KEY_2 BIT P1.1
	KEY_3 BIT P1.2
	KEY_4 BIT P1.3
	T    EQU 40H
	M    EQU 41H

	ORG 0000H
	AJMP MAIN
	ORG 001BH
	AJMP _T0_
	ORG 0030H

MAIN:	MOV SP,#5FH
	NOP
        lcall init_main
        lcall init_max7219

LM_M:	ACALL DISP
	ACALL D10MS
	ACALL KEY_SCAN
	AJMP LM_M


KEY_SCAN:
	MOV P1,#0FFH
	MOV C,KEY_1
	JNC D1STIME
	MOV C,KEY_2
	JNC D100MSTIME
	MOV C,KEY_3
	JNC D10MSTIME
	MOV C,KEY_4
	JNC D1MSTIME
	RET



init_main:
        mov r1,#8
        mov r0,#30h
lp_main:mov @r0,#00h
        inc r0
        djnz r1,lp_main
        ret

D1STIME:
	MOV M,#0
	CLR F0
	MOV T,#100
	ACALL INIT_T
	JNB F0,$
	RET

D100MSTIME:
	MOV M,#1
	CLR F0
	MOV T,#10
	ACALL INIT_T
	JNB F0,$
	RET

D10MSTIME:
	MOV M,#2
	CLR F0
	MOV T,#1
	ACALL INIT_T
	JNB F0,$
	RET

D1MSTIME:
	MOV M,#2
	CLR F0
	MOV T,#1
	ACALL INIT_T
	JNB F0,$
	RET

INIT_T:
	MOV TMOD,#15H
	MOV TH1,#0B8H
	MOV TL1,#03H
	SETB ET1
	CLR ET0
	SETB EA
	SETB TR0
	SETB TR1
	RET

_T0_:	MOV TH1,#0B8H
	MOV TL1,#03H
	DJNZ T,_T0_NEXT
	CLR TR0
	CLR TR1
	SETB F0
	ACALL DAT_CONVERSION
	MOV TH0,#00H
	MOV TL0,#00H
	ACALL MOVE_M
	ACALL DISP
_T0_NEXT:RETI

MOVE_M: nop
        mov a,m
        cjne a,#00h,move_2
        ret
        mov a,m
move_2: cjne a,#01h,move_3

        mov 35h,34h
        mov 34h,#0
        mov 34h,33h
        mov 33h,#0
        mov 33h,32h
        mov 32h,#0
	mov 32h,31h
	mov 31h,#0
	mov 31h,30h
	mov 30h,0
        ret
        mov a,m
move_3: cjne a,#02h,move_ret
        mov 36h,34h
        mov 34h,#0
        mov 35h,33h
        mov 33h,#0
        mov 34h,32h
        mov 32h,#0
	mov 33h,31h
	mov 31h,#0
	mov 32h,30h
	mov 30h,#0
move_ret:    ret

dat_conversion:

        mov a,th0
        rrc a
        mov r2,a
        mov a,tl0
        rrc a
        mov r3,a
        acall ibtd2
        mov a,r6
        anl a,#0fh
        mov 30h,a
        mov a,r6
        anl a,#0f0h
        swap a
        mov 31h,a
        mov a,r5
        anl a,#0fh
        mov 32h,a
        mov a,r5
        anl a,#0f0h
        swap a
        mov 33h,a
        mov a,r4
        anl a,#0fh
        mov 34h,a
        ret

;*********************************
;*        双字节HEX->BCD         *
;* 入口:R2R3为双字节16位二进制数 *
;* 出口:R4R5R6为转换完的压缩BCD  *
;*********************************
IBTD2:  CLR A
        MOV R4,A
        MOV R5,A
        MOV R6,A
        MOV R7,#16
LM_BCD: CLR C
        MOV A,R3
        RLC A
        MOV R3,A
        MOV A,R2
        RLC A
        MOV R2,A
        MOV A,R6
        ADDC A,R6
        DA A
        MOV R6,A
        MOV A,R5
        ADDC A,R5
        DA A
        MOV R5,A
        MOV A,R4
        ADDC A,R4
        DA A
        MOV R4,A
        DJNZ R7,LM_BCD
        RET


;************************************************
;*                   初始化max7219              *
;* 程序创建时间:2006-04-14                      *
;* 最后修改时间:2006-                           *
;* 影响资源:P1.7--CLK  P1.6--DIN  P1.4--CS7219  *
;* 占用寄存器:50H,51H,52H                       *
;************************************************
        clk bit p1.7
        din bit p1.6
        cs7219 bit p1.4
        scan_lim equ 50h        ;扫描界限
        ctrl_7219 equ 51h       ;控制字
        ctrl_byte equ 52h       ;控制子存储器
init_max7219:
        setb clk
        setb cs7219
        mov scan_lim,#07h
        mov ctrl_7219,#09h      ;译码方式
        mov ctrl_byte,#0ffh
        lcall t_max7219
        mov ctrl_7219,#0ah       ;亮度
        mov ctrl_byte,#0fh
        lcall t_max7219
        mov ctrl_7219,#0bh      ;扫描界限
        mov ctrl_byte,scan_lim
        lcall t_max7219
        mov ctrl_7219,#0ch      ;停机状态
        mov ctrl_byte,#01h
        lcall t_max7219
        mov ctrl_7219,#0fh      ;测试状态
        mov ctrl_byte,#00h
        lcall t_max7219
        ret
;************************
;* 传送16位数据
;*
;************************
t_max7219:
        mov a,ctrl_7219
        mov b,#08h
        clr cs7219
max7219_h8:
        nop
        clr clk
        rlc a
        mov din,c
        nop
        setb clk
        djnz b,max7219_h8
        mov a,ctrl_byte
        mov b,#08h
max7219_l8:
        nop
        clr clk
        rlc a
        mov din,c
        nop
        setb clk
        djnz b,max7219_l8
        setb cs7219
        ret
;*****************************
;* 显示程序
;* 显示缓冲区地址:30H--37H
;************
disp:   setb rs1
        clr rs0
	ORL 33H,#80H      ;<---------------------------------
        ORL 36H,#80H      ;<---------------------------------
        mov r0,scan_lim                 ;循环扫描次数
        inc r0
        mov a,scan_lim
        add a,#30h
        mov r1,a                        ;显示缓冲区地址
lp_disp:mov ctrl_7219,r0
        mov ctrl_byte,@r1
        lcall t_max7219
        dec r0
        dec r1
        cjne r0,#00h,lp_disp
        clr rs1
        clr rs0
        ret

D10MS:	mov r7,#02h
t6:     mov r6,#50
t5:     mov r5,#100
t4:	nop
	djnz r5,t4
	djnz r6,t5
	djnz r7,t6
	ret


⌨️ 快捷键说明

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