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

📄 12-16aj.asm

📁 详细介绍了C语言开发DSP嵌入式系统
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;*******************************************
;12-16   aj:adjust. 12-16调整过的程序,调整内容1:r2作为换行号保存单元
;r5列扫描初值
;r6扫描列号
;r3键值
;r0显示参数首地址
;r7显示参数字节个数
;28h
;f0=1,进入参数输入界面
;r4 键入参数时或者删除键时,坐标disp_y存放单元
;20H,页码保存单元(字节)
;r2,行号保存单元,用在换行键中
;r1,一行数字的个数(不超过6)
;********************************************
D_I	EQU	P2.0				;Data or Instrument Select,H:写数据,L:写指令
R_W	EQU	P2.1				;Write or Read,H:read,L:write
E	EQU	P2.7				;读写使能
CS1	EQU	P2.2				;CS1=H,选择左半屏
CS2	EQU	P2.3		                ;CS2=H,选择右半屏
RESET	EQU	P2.4				;Lcm reset,低有效

DISP_X	EQU	30H
DISP_Y	EQU	31H
DISP_Z	EQU	32H
LONG	EQU	33H
WIDE	EQU	34H
DATA1_WR	EQU	35H
DATA2_WR	EQU	36H
COUNTER1	EQU	37H
COUNTER2	EQU	38H
COUNTER3	EQU	39H
        ORG 0000H
        LJMP MAIN
        ORG 0003H
        LJMP KEYVAL


        ORG 0030H
MAIN:   MOV SP,#3AH
        SETB EA
        SETB EX0
        SETB IT0
	mov r0,#50h              ;参数首地址
        lcall clears
        ;mov r4,#40h             ;用户参数输入时的DISP_Y坐标保存单元
        ;lcall start
        MOV  20H,#00H           ;页码保存单元
        
;********************模拟显示参数**************
        mov  a,#00h
        mov  r1,#50h
        mov r4,#06h
loopp1: mov  @r1,a
        inc a
        inc r1
        djnz r4,loopp1

        mov  a,#00h
        mov  r1,#56h
        mov r4,#06h
loopp2: mov  @r1,a
        inc a
        inc r1
        djnz r4,loopp2

        mov  a,#00h
        mov  r1,#5ch
        mov r4,#06h
loopp3: mov  @r1,a
        inc a
        inc r1
        djnz r4,loopp3

        mov  a,#00h
        mov  r1,#62h
        mov r4,#06h
loopp4: mov  @r1,a
        inc a
        inc r1
        djnz r4,loopp4
;********************模拟显示参数**************
        mov r2,#00h             ;初始为第0行
        mov r1,#00h             ;初始每行数字键个数为0
        mov r4,#40h             ;用户参数输入时的DISP_Y坐标保存单元
	MOV  P1,#0F0H
        SJMP $


KEYVAL: MOV r5,#0F7H    ;送扫描初值
        MOV r6,#00H     ;扫描列号

LK:     MOV A,r5
        MOV P1,A        ;扫描值送入p1口
        MOV A,P1        ;读出p1口数据判断键值

        JB ACC.7,LONE   ;第一行 P1.7
        MOV A,#01H
        AJMP LKP

LONE:   JB ACC.6,LTWO    ;第二行 P1.6
        MOV A,#05H
        AJMP LKP

LTWO:   JB ACC.5,LTHR   ;第三行  P1.5
        MOV A,#09H
        AJMP LKP

LTHR:   JB ACC.4,NEXT   ;第四行  P1.4
        MOV A,#0dH

LKP:    ADD A,r6
        push a
waitrl: lcall delay3
        lcall wkeyr
        jnz waitrl      ;不等于0,见没有释放,转到等待键释放
        pop a
        MOV r3,A        ;键值存入R3中
        LCALL KEYDW
        RETI

NEXT:   INC r6
        MOV A,r5
        JNB ACC.0,KND
        RR A
        MOV r5,A
        AJMP LK
KND:    MOV P1,#0F0H
        RETI

;键处理子程序
KEYDW:  MOV A,R3
        CLR C
        RLC A
        MOV DPTR,#TAB
        JMP @A+DPTR

TAB:    db   00h,01h
        AJMP NUM1
        AJMP NUM2
        AJMP NUM3
        AJMP NUM4
        AJMP NUM5
        AJMP NUM6
        AJMP NUM7
        AJMP NUM8
        AJMP NUM9
        AJMP NUM0
        AJMP FUNC1
        AJMP FUNC2
        AJMP FUNC3
        AJMP FUNC4
        AJMP FUNC5
        AJMP FUNC6

num1:	jb f0,ninput1		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput1:inc r1           ;number input 1
	;lcall cwline
numone:	mov a,r3
	mov @r0,a
	;inc r0
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

num2:	jb f0,ninput2		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput2:inc r1           ;number input 2
	;lcall cwline
numtwo:	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret
NUM3:   jb f0,ninput3		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput3:inc r1           ;number input 3
	;lcall cwline
numthr:	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

NUM4:   jb f0,ninput4		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput4:inc r1           ;number input 4
	;lcall cwline
	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret
NUM5:   jb f0,ninput5		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput5:inc r1           ;number input 5
	;lcall cwline
	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

NUM6:   jb f0,ninput6		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput6:inc r1           ;number input 6
	;lcall cwline
	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

NUM7:   jb f0,ninput7		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput7:inc r1           ;number input 7
	;lcall cwline
	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

NUM8:   jb f0,ninput8		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput8:inc r1           ;number input 8
	;lcall cwline
	mov a,r3
	mov @r0,a
	;inc r0
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

NUM9:   jb f0,ninput9		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput9:inc r1           ;number input 9
	;lcall cwline
	mov a,r3
	mov @r0,a
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret

NUM0:   jb f0,ninput0		;f0=1,进入参数输入界面
	MOV P1,#0F0H
	ret

ninput0:inc r1           ;number input 0
	;lcall cwline
	mov a,r3
	mov @r0,a
	;inc r0
	;lcall  inpara1           ;输入参数显示,input parameter display
	lcall line0
	lcall cwline
        inc r0
        MOV P1,#0F0H
        ret




;*************************function key*****************************
func1:  setb f0
        lcall clears
        lcall userpara
	lcall zbini
	mov r0,#50h             ;12-17,输入的参数保存到50h为首的地址单元中
        MOV P1,#0F0H
        RET


func2:  push a
        inc 20H
        mov a,20h
scr1:	cjne a,#01h,scr2	;页码保存单元内容为1,显示第一屏,否则显示第二屏
        pop a
        lcall clears
	lcall firsts
        ret
scr2:	cjne a,#02h,rets1     	;scr3	;页码保存单元内容为2,显示第二屏,否则显示第三屏
        pop a
        lcall clears
	lcall start
        ret             	;做实验   暂时改成  初始界面
;scr3:	cjne 20h,#03h,rets1	;页码保存单元内容为3,显示第三屏,否则到返回第一屏子程序
;	mov 20h,#00h
;	lcall threes


rets1:  pop a
        mov 20h,#00h		;页码内容清零,从第一页开始显示return to screen1
        MOV P1,#0F0H
        RET

        lcall firsts
        MOV P1,#0F0H
        RET
;**************删除键*********************
func3:  mov disp_x,#0b8h
        lcall clrcur
        clr c
	mov disp_x,#0b8h
	push a                      	;暂存键值
	mov a,disp_y
	subb a,#08h
	mov disp_y,a
        mov r4,disp_y               	;删除数字后,下次显示数字时的坐标
	pop a
	lcall cursor
	ret

func4:  inc r4                      	;换行键
        inc r2
        cjne r2,#04h,return
        mov r2,#00h			;R2清零,并且调用第二屏(未实现)
return: ret

func5:

func6:

;*****************键释放wait key released*************************

wkeyr:  mov p1,#0f0h
        mov a,p1
        orl a,#0fh
        cpl a                   ;p1.~p1.7取反后为全0,说明键释放
        ret


;******************输入参数所在行判断程序*******************
line0:	cjne    r2,#0,line1
        lcall  inpara1           ;输入参数显示,input parameter display
        ret

line1:	cjne    r2,#1,line2
        lcall  inpara2           ;输入参数显示,input parameter display
        ret


line2:	cjne    r2,#2,line3
        lcall  inpara3           ;输入参数显示,input parameter display
        ret

line3:	cjne    r2,#3,clrr2
	lcall  inpara4           ;输入参数显示,input parameter display
        ret
clrr2:  mov r2,#00h
        ret


;*******************judge the line based on the number of the number*****************
cwline:	cjne r1,#06h,cw12	;compare with number of the input number	
	inc r2
	mov disp_x,#0bah
	mov disp_y,#40h
	lcall cursor
	ret

cw12:	jnc cw_12	
	ret
cw_12:	cjne r1,#12,cw18	;compare with 12
	inc r2
	mov disp_x,#0bch
	mov disp_y,#40h
	lcall cursor	
	ret

cw18:	jnc cw_18	
	ret
cw_18:	cjne r1,#18,cw24	;compare with 18
	inc r2
	mov disp_x,#0beh
	mov disp_y,#40h	
	ret

cw24:	jnc cw_24	
	ret
cw_24:	cjne r1,#24,clrr1	;compare with 24
	mov r1,#0		;clear r1 and wait for the next key
	ret

clrr1:	nop			;lcall inpara4			
	ret

;*********************************************************************************
;**********************清屏***********************
clears:         MOV	DISP_Z,#0C0H
                SETB	CS1
		CLR	CS2
		MOV	DISP_X,#0B8H
		MOV	DISP_Y,#40H
		MOV	LONG,#40H
		MOV	WIDE,#02H
		MOV	DPTR,#clear
		LCALL	para_DISP
		MOV	DISP_X,#0BAH
		MOV	DPTR,#clear
		LCALL	para_DISP
		MOV	DISP_X,#0BCH
		MOV	DPTR,#clear
		LCALL	para_DISP
		MOV	DISP_X,#0BEH
		MOV	DPTR,#clear
		LCALL	para_DISP

		CLR	CS1
		SETB	CS2
		MOV	DISP_X,#0B8H
		MOV	DISP_Y,#40H
		MOV	LONG,#40H
		MOV	WIDE,#02H
		MOV	DPTR,#clear
		LCALL	para_DISP
		MOV	DISP_X,#0BAH
		MOV	DPTR,#clear
		LCALL	para_DISP
		MOV	DISP_X,#0BCH
		MOV	DPTR,#clear
		LCALL	para_DISP
		MOV	DISP_X,#0BEH
		MOV	DPTR,#clear
		LCALL	para_DISP

		ret



;***********************用户参数值输入************
inpara1:	SETB	CS2			;输入参数子程序
		clr	CS1

		MOV	DISP_X,#0B8H
		MOV	DISP_Y,r4
		MOV	LONG,#08H
		MOV	WIDE,#02H
		lcall   ipd1
		ret

inpara2:	MOV	DISP_X,#0BaH
		MOV	DISP_Y,r4
		MOV	LONG,#08H
		MOV	WIDE,#02H
		lcall   ipd2
		ret
inpara3:	MOV	DISP_X,#0BcH
		MOV	DISP_Y,r4
		MOV	LONG,#08H
		MOV	WIDE,#02H
		lcall   ipd3
		ret
inpara4:	MOV	DISP_X,#0BeH
		MOV	DISP_Y,r4
		MOV	LONG,#08H
		MOV	WIDE,#02H
		lcall   ipd4
                ret

;********************第一行参数输入显示*********************
ipd1:           clr cs1
                setb cs2

loopif:         mov     a,@r0


numif0:         cjne    a,#10,numif1
                mov     dptr,#numtab0
                lcall   para_disp
		lcall	parazbif
                MOV	DISP_X,#0B8H            ;第一行行坐标
		MOV	DISP_Y,r4

⌨️ 快捷键说明

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