📄 12-24aj.asm
字号:
;*******************************************
;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,#0b8h
mov disp_y,#70h
lcall clrcur
mov disp_x,#0bah
mov disp_y,#40h
mov r4,#40h
lcall cursor
ret
cw12: jnc cw_12
ret
cw_12: cjne r1,#12,cw18 ;compare with 12
inc r2
mov disp_x,#0bah
mov disp_y,#70h
lcall clrcur
mov disp_x,#0bch
mov disp_y,#40h
mov r4,#40h
lcall cursor
ret
cw18: jnc cw_18
ret
cw_18: cjne r1,#18,cw24 ;compare with 18
inc r2
mov disp_x,#0bch
mov disp_y,#70h
lcall clrcur
mov disp_x,#0beh
mov disp_y,#40h
mov r4,#40h
ret
cw24: jnc cw_24
ret
cw_24: cjne r1,#24,clrr1 ;compare with 24
;clr ea ;关中断,只有再次使用换屏键才可以打开键盘中断
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
;********************第一行参数输入显示*********************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -