📄 128641.asm
字号:
;液晶驱动
lcd_wz_ad equ 0f3ffh ;写指令地址
lcd_rz_ad equ 0f8ffh ;读状态地址
lcd_ws_za equ 0f6ffh ;写数据地址(右)
lcd_ws_ya equ 0f5ffh ;写数据地址(左)
lcd_rs_za equ 0feffh ;读数据地址(右)
lcd_rs_ya equ 0fdffh ;读数据地址(左)
jp_clk bit p1.4
jp_data bit p1.5
time_y equ 070h ;定时服务计数器
jp_key equ 071h
count_k equ 072h
lcd_on data 3fh ;开显示
lcd_off data 3eh ;关显示 ;绘图标志
dot bit 00h
radf equ 020h
radw equ 021h
cd_min equ 051h ;当前菜单层的最小菜单号
cd_max equ 052h ;当前菜单层的最大菜单号
cd_js equ 053h ;菜单计数器
yb_js equ 054h
Column equ 04dh ;列地址
Line equ 04eh ;行地址
com equ 04fh ;液晶指令寄存
dat equ 050h ;液晶数据寄存
a_page equ Line ;显示的页寄存器
xstal equ 040h ;以下与绘图相关
xstah equ 041h
ystal equ 042h
ystah equ 043h
xendl equ 044h
xendh equ 045h
yendl equ 046h
yendh equ 047h
d_xl equ 048h
; d_xh equ 049h
d_yl equ 049h
; d_yh equ 04bh
errl equ 04ah
errh equ 04bh
rad equ 04ch
w_code equ xstal
count equ xstah
arcx1 equ xendl
arcy1 equ xendh
arcx2 equ yendl
arcy2 equ yendh
cirxl equ d_xl
; cirxh equ d_xh
ciryl equ d_yl
; ciryh equ d_yh
wave_buf equ 080h
org 0000h
ajmp main
org 0013h
ajmp jp_int
org 002bh
ajmp time_int ;去系统定时中断服务
org 0030h
main: mov sp,#0e0h
mov tmod,#021h
mov tcon,#05h
mov th2,0fch
mov tl2,065h
mov rcap2h,#0fch
mov rcap2l,#065h
setb tr2
mov ie,#0a0h
mov com,#lcd_on
lcall lcd_we_zl
lcall lcd_rst
tt: acall z_dis
tt1: acall jpfw1
mov a,jp_key
cjne a,#10,tt1
mov cd_min,#8
mov cd_max,#15
ajmp cd_ql
mov a,#0
acall w_asii_c
mov a,#1
acall w_asii_c
mov a,#2
acall w_asii_c
mov a,#3
acall w_asii_c
mov a,#4
acall w_asii_c
mov a,#5
acall w_asii_c
mov a,#6
acall w_asii_c
mov a,#7
acall w_asii_c
power: acall jpfw1
mov a,jp_key
cjne a,#2,power
lcall lcd_rst
mov a,#8
acall w_asii_c
;菜单驱动子程序
;需要用菜单跳转表
cd_ql: mov cd_js,cd_min
mov yb_js,#0 ;游标计数器
cd_qls: acall cd_dis ;菜单显示子程序
cd_qla: acall jpfw1 ;读取键值
mov a,jp_key
cjne a,#12,cd_ql1
;菜单向下
mov a,yb_js ;游标向下处理
cjne a,#3,cd_qld
sjmp cd_qle
cd_qld: inc yb_js
cd_qle: mov a,cd_js ;菜单向下计数处理
cjne a,cd_max,cd_qlc
mov cd_js,cd_min
sjmp cd_qls
cd_qlc: inc cd_js
sjmp cd_qls
cd_ql1: cjne a,#13,cd_ql2
;菜单向上
mov a,yb_js ;游标计数处理
cjne a,#0,cd_qlf
sjmp cd_qlg
cd_qlf: dec yb_js
cd_qlg: mov a,cd_js ;菜单计数处理
cjne a,cd_min,cd_qlh
mov cd_js,cd_max
sjmp cd_qls
cd_qlh: dec cd_js
sjmp cd_qls
cd_ql2: cjne a,#10,cd_ql3
;菜单确认
;进入下一层
; mov cd_bufl,cd_min ;存储当前层参数
; mov cd_bufh,cd_max
sjmp cd_sz ;去菜单散转表
cd_ql3: cjne a,#11,cd_qla
;菜单操作取消 ,根椐cd_min设置返回参数
mov a,cd_min
cjne a,#8,cd_fa
mov cd_min,#0ffh
mov cd_max,#0ffh
sjmp cd_fend
cd_fa: cjne a,#0,cd_fb
mov cd_min,#8
mov cd_max,#15
cd_fb:
cd_fend: mov a,cd_min
cjne a,#0ffh,cd_ql4
;退出菜单设置
lcall lcd_rst
ajmp tt ;回到主参界面
cd_ql4: mov a,cd_max
cjne a,#0ffh,cd_ql5
;退出菜单设置
lcall lcd_rst
ajmp tt ;回到主参界面
cd_ql5: sjmp cd_ql ;返回上一层
cd_sz: mov a,cd_js ;菜单散转表
mov b,#2
mul ab
mov dptr,#sz_tab ;散转表首址
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
clr a
jmp @a+dptr
sz_tab: ajmp cd_dz00
ajmp cd_dz01
ajmp cd_dz02
ajmp cd_dz03
ajmp cd_dz04
ajmp cd_dz05
ajmp cd_dz06
ajmp cd_dz07
ajmp cd_dz08
ajmp cd_dz09
ajmp cd_dz10
ajmp cd_dz11
ajmp cd_dz12
ajmp cd_dz13
ajmp cd_dz14
ajmp cd_dz15
cd_dz00:
cd_dz01:
cd_dz02:
cd_dz03:
cd_dz04:
cd_dz05:
cd_dz06:
cd_dz07:
cd_dz08: lcall lcd_rst ;八号菜单处理,参数设置界面
mov a_page,#1
mov a,#17
acall w_asii_c
mov a_page,#3
mov a,#18
acall w_asii_c
cd_dz08a: acall jpfw1
mov a,jp_key
cjne a,#10,cd_dz08a
lcall lcd_rst
ajmp cd_ql
cd_dz09: mov cd_min,#0 ;九号菜单处理
mov cd_max,#7
ajmp cd_ql
cd_dz10:
cd_dz11:
cd_dz12:
cd_dz13:
cd_dz14:
cd_dz15:
;菜单显示子程序
cd_dis: lcall lcd_rst
clr c
mov a,cd_js
subb a,yb_js
jc cd_disx
cjne a,cd_min,cd_disa
cd_disa: jnc cd_disc
cd_disx: clr c
mov a,cd_max
subb a,cd_min
add a,cd_js
subb a,yb_js
add a,#1
cd_disc: mov rad,a
mov count_k,#0
cd_disd: mov a,count_k
rl a
mov a_page,a
mov a,rad
acall w_asii_c
mov a,rad
cjne a,cd_max,cd_dise
mov rad,cd_min
sjmp cd_disf
cd_dise: inc rad
cd_disf: inc count_k
mov a,count_k
cjne a,#4,cd_disd
mov a,yb_js ;显示游标
rl a
orl a,#080h
mov a_page,a
mov column,#110
mov W_code,#'~'+1
acall w_asii
ret
;主界面显示
z_dis: mov a_page,#3
mov a,#16
acall w_asii_c
ret
;系统定时中断服务
time_int: clr tf2
dec time_y
;其它的定时有关的代码
reti
;键盘中断服务
jp_int: jnb p3.3,kk1
reti
kk1: mov time_y,#10
acall y_time
jnb p3.3,kk2
reti
kk2: acall jpfw
;键盘服务
;在中断工作时也是调用这个程序
;jp_key为键值寄存器
;Y_TIME10:延时程式
JPFW1: acall urt_all0
jpfw2: jb p3.3,$
mov time_y,#10
acall y_time
jb p3.3,jpfw2
JPFW: MOV jp_key,#0h
acall urt_all1
MOV count_k,#16
clr jp_data
setb jp_clk
clr jp_clk
setb jp_data
jp_cjcx1: jb p3.3,key1
clr c
mov a,#16
subb a,count_k
cjne a,#8,key_j
key_j: jc key_k
subb a,#8
sjmp key_l
key_k: add a,#8
key_l: mov jp_key,a
sjmp keyy
key1: setb jp_clk
clr jp_clk
djnz count_k,jp_cjcx1
keyy: JNB P3.3,$
mov time_y,#10
acall y_time
JNB P3.3,KEYY
acall urt_all0
ret
urt_all0: mov count_k,#16
clr jp_data
urt0_a: setb jp_clk
clr jp_clk
djnz count_k,urt0_a
ret
urt_all1: mov count_k,#16
setb jp_data
urt0_b: setb jp_clk
clr jp_clk
djnz count_k,urt0_b
ret
;延时子程序
;最长时间为255*定时常数
y_time: push acc
push psw
y_time1: mov a,time_y
cjne a,#0,y_time1
pop psw
pop acc
ret
;占用b,a,count,r0,c,与画直线有关的寄存器
;堆栈占用11字节
;波形显示子程序,和多边形显示 (没有问题)
w_wave: mov r0,#wave_buf
mov a,@r0
mov b,a
jnb acc.7,w_wave_a ;去波形显示
mov b,#0
w_db: mov a,b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -