📄 lcd.asm.asm
字号:
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+
; PROGRAMMER: BAOTAO NING; DIRECTOR: CHANGDONG MU|
; ORIGINALITY: QIHAN, TINGZHANG, GOULIANG DONG; +
; BOARD MAKER: SHAOCHUN MU; |
; START DATA: 2002.10.9; +
; END DATA: 2003.1.9 +
; GENERAL TIME: 40 DAYS; +
; LCD DISPLAY SUBROUTINE SYSTEM +
;////////////////////////////////////////////////|
;
run_led bit p1.5
buzzer bit p1.6
cs_sram bit p1.4 ; sram chip seclect.
cs_25 bit p3.2
so_25 bit p3.5
si_25 bit p3.4
sck_25 bit p3.3
;================================================; key board
cs_244 bit p1.7 ; chip select of 74ls244
screen_data equ 00001111b
key_add_h data 80h
key_add_l data 00h
row data p0
column data p1
column_input data 00001111b
con0 bit p1.0 ; column
con1 bit p1.1
con2 bit p1.2
con3 bit p1.3
; ; watchdog
wren data 00000110b
wrdi data 00000100b
rdsr data 00000101b
wrsr data 00000001b
read_0 data 00000011b ; read 0-ffh
read_1 data 00001011b ; read 100-1ffh
write_0 data 00000010b ; write 0-ffh
write_1 data 00001010b ; write 100-1ffh
;
;------------------------------------------------|
system_set equ 40h ; system initialize set
disp_area equ 44h ; that is scroll command: display area set
sleep_in equ 53h ; idle model set
disp_on equ 59h ; display_on state set
disp_off equ 58h ; close display
ovlay equ 5bh ; display synthesize
hdot_set equ 5ah ; dot position set
csrform equ 5dh ; cursor form set
cgram_add equ 5ch ; cgram first addres set
csrdir_right equ 4ch ; cursor direction: move forward right
csrdir_left equ 4dh ; cursor move forward left
csrdir_up equ 4eh ; cursor move forward up
csrdir_down equ 4fh ; cursor move forward down
csrw equ 46h ; cursor pointer set
csrr equ 47h ; read cursor pointer
mwrite equ 42h ; write data command
mread equ 43h ; read data command
;
wc_add equ 0100h ; write command code address
wd_add equ 0000h ; write parameter or data code address
rd_add equ 0100h ; read parameter or data code address
rb_add equ 0000h ; read busy statur address
;
;
need_sel_char equ 00h ; 需要选择充放电标志
input_para_flag bit 01h ; 输入参数标志
add_flag bit 02h
selected_char_flag bit 03h ; 选择完充放电标志
add2_flag bit 04h
f00 bit 05h
run_cp_flag bit 06h ; 运行恒功率充放电标志
run_ca_flag bit 07h ; 运行恒流充放电标志
rx_flag bit 08h
run_flag bit 09h ; 系统运行程序标志
disp_real_data bit 0ah
;
ap equ 40d ; 9th parameter of system_set
id_buf equ 30h
code equ 31h
count1 equ 32h
count2 equ 33h
oxl equ 34h ; 横坐标
oy equ 35h ; 纵坐标
;
set_v1 equ 36h ; 设定电压参数1
set_v2 equ 37h ; 设定电压参数2
set_a1 equ 38h ; 设定电流参数1
set_a2 equ 39h ; 设定电流参数2
set_h equ 3ah ; 设定单步小时数
set_m equ 3bh ; 设定单步分钟数
set_s equ 3ch ; 设定单步秒钟数
sample_h equ 3dh ; 设定采集间隔小时数
sample_m equ 3eh ; 设定采集间隔分钟数
sample_s equ 3fh ; 设定采集间隔秒钟数
set_c equ 40h ; 设定指令
;
key_code equ 41h ; 键代码
key_state equ 42h ; 键状态
program_p equ 43h
comp_disp_r equ 44h
dh_25 equ 45h
dly_time equ 46h
scroll_row equ 47h
count equ 48h
count_key equ 49h
count_data equ 4ah
disp_para_tab equ 4bh
step_num equ 4ch
program_buf equ 50h
data_buf equ 80h
now_sec equ 110h
now_min equ 111h
now_hour equ 112h
now_year equ 113h
now_month equ 114h
now_date equ 115h
;
debug equ 1
;
;================================================|
;
org 0000h
ajmp start
org 000bh
ajmp timer0_int ; 定时器中断
org 0023h
ajmp uart_int ; 接收中断
org 0030h
;
start:
mov sp, #70h
cpl run_led
acall sys_init ; 系统初始化
acall ram_clear ; ram 清零
mov dh_25, #00110000b ; stop watchdog
lcall write_sr
lcall lcd_init ; lcd 初始化
lcall disp_trademark ; 显示商标
lcall disp_main_menu ; 系统主菜单
;
;
test:
;
main:
acall key_scan ; 扫描键盘
jnb disp_real_data, main
jb rx_flag, main
lcall sub_disp_real_data ; 显示实时数据
jmp main
;
;++++++++++++++++++++++++++++++++++++++++++++++++|
; receive service interrupt subroutine. +
;接收起始标志为: ST +
;++++++++++++++++++++++++++++++++++++++++++++++++|
uart_int:
push a
push psw
setb rs0
jb rx_flag, rx_data
mov r0, #data_buf
mov @r0, sbuf
cjne @r0, #'S', exit_uart_int
clr ri
clr es
jnb ri, $
clr ri
setb es
mov @r0, sbUf
cjne @r0, #'T', exit_uart_int
setb rx_flag
ljmp rx_next_data
rx_data:
mov @r0, sbuf
clr ri
cjne @r0, #0dh, rx_next_data
clr rx_flag
;
exit_uart_int:
clr ri
clr rs0
pop psw
pop a
reti
;
rx_next_data:
inc r0
clr rs0
pop psw
pop a
reti
;
;++++++++++++++++++++++++++++++++++++++++++++++++|
; TIMER0 INTERRUPT SERVICE SUBROUTINE. +
;++++++++++++++++++++++++++++++++++++++++++++++++|
timer0_int:
push a
push psw
dec dly_time
pop psw
pop a
reti
;
;================================================|
; system initialize service subroutine +
;================================================|
sys_init:
mov tl0, #05h ;定时器0 初始化
mov th0, #05h
mov tmod, #00100000b
mov th1, #0fdh ; 9600hz
mov tl1, #0fdh ; 定时器1, 初始化
mov scon, #50h ; mode 1
setb tr1
setb tr0
setb et0
setb es
setb ps
setb ea
ret
;
;================================================|
; 键盘扫描子程序.
;================================================|
key_scan:
clr cs_244
mov p0, #00h
orl p1, #00001111b
mov a, p1
anl a, #screen_data
cjne a, #0fh, key_yes
ajmp no_key
;
key_yes:
lcall dly_10ms
orl p1, #00001111b
mov a, p1
anl a, #screen_data
cjne a, #0fh, cal_key_code
ajmp no_key
;
cal_key_code:
cpl run_led
mov p0, #00001110b
orl column, #column_input
mov a, column
anl a, #screen_data
cjne a, #0fh, rd_id_d
ljmp chk_nxt_1
;
rd_id_d:
jb con0, rd_id_e
mov a, #0dh ; 按键 D
ljmp load_key_code
;
rd_id_e:
jb con1, rd_id_f
mov a, #0eh ; 按键 E
ljmp load_key_code
;
rd_id_f:
jb con2, rd_id_0
mov a, #0fh ; 按键 F
ljmp load_key_code
;
rd_id_0:
jb con3, no_key
mov a, #00h ; 按键 0
ljmp load_key_code
;
chk_nxt_1:
mov p0, #00001101b
orl column, #column_input
mov a, column
anl a, #screen_data
cjne a, #0fh, rd_id_c
ajmp chk_nxt_2
;
rd_id_c:
jb con0, rd_id_9
mov a, #0ch ; 按键 C
ajmp load_key_code
;
rd_id_9:
jb con1, rd_id_8
mov a, #09h ;按键 9
ajmp load_key_code
;
rd_id_8:
jb con2, rd_id_7
mov a, #08h ; 8
ajmp load_key_code
;
rd_id_7:
jb con3, no_key
mov a, #07h ; 7
ajmp load_key_code
;
no_key:
cpl run_led
setb cs_244
ret
;
chk_nxt_2:
mov p0, #00001011b
orl column, #column_input
mov a, column
anl a, #screen_data
cjne a, #0fh, rd_id_b
ajmp next_row
;
rd_id_b:
jb con0, rd_id_6
mov a, #0bh ; B
ajmp load_key_code
;
rd_id_6:
jb con1, rd_id_5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -