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

📄 lcd.asm.asm

📁 液晶显示屏应用源程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+
; 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 + -