?? lcd_drv.obj
字號:
dco @b:b u:1 ret
dtx ; end of function lcd_clear
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .export _lcd_cursor ; void lcd_cursor(unsigned char)
dtx .hide
dtx .show
dtx
dtx .segment __lcd_cursor
dtx _lcd_cursor: ; void lcd_cursor(unsigned char)
dtx ; parameter 'cur' in 'R7'
dhl }
dhl
dhl /******************** lcd_cursor() ****************/
dhl void lcd_cursor(uchar cur){
dco @e:0 u:2 mov A,#12
dco @e:2 u:1 add A,R7
dco @e:3 u:1 mov R7,A
dco @e:4 u:3 lcall _lcd_combyte
dco @e:7 u:1 ret
dtx ; end of function lcd_cursor
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .export _lcd_init ; unsigned char lcd_init(void)
dtx .hide
dtx .show
dtx
dtx .segment __lcd_init
dtx _lcd_init: ; unsigned char lcd_init(void)
dhl lcd_combyte(cur+12);
dhl }
dhl
dhl /******************** lcd_init() *****************/
dhl uchar lcd_init(void){ /* Return 1: ERROR, 0: OK */
dco @12:0 u:3 lcall _lcd_initport
dco @12:3 u:1 mov A,R7
dco @12:4 u:2 jz ?43
dhl
dhl if(lcd_initport()) return 1; // Failed: NO DISPLAY?
dco @12:6 u:2 mov R7,#1
dco @12:8 u:2 sjmp ?42
dtx ?43:
dhl
dhl /* Now visible initialisation */
dhl lcd_combyte(15); /* Display ON, Cursor on & blink */
dco @12:a u:2 mov R7,#15
dco @12:c u:3 lcall _lcd_combyte
dhl lcd_clear();
dco @12:f u:3 lcall _lcd_clear
dhl lcd_cursor(LCD_CURSOR_BLINK);
dco @12:12 u:2 mov R7,#3
dco @12:14 u:3 lcall _lcd_cursor
dhl lcd_combyte(6); /* Entry-Mode: Cursor Shift Right */
dco @12:17 u:2 mov R7,#6
dco @12:19 u:3 lcall _lcd_combyte
dhl lcd_cgchars(segment2); /* Required for LARGE 7-SEGMENT DIGITS */
dco @12:1c u:2 mov R6,#((_segment2)>>8)&255
dco @12:1e u:2 mov R7,#(_segment2)&255
dco @12:20 u:2 mov R4,#COS
dco @12:22 u:3 lcall _lcd_cgchars
dhl return 0; /* OK */
dco @12:25 u:1 clr A
dco @12:26 u:1 mov R7,A
dtx ?42:
dco @12:27 u:1 ret
dtx ; end of function lcd_init
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .hide
dtx .show
dtx
dtx .segment __lcd_digit2
dtx _lcd_digit2: ; void lcd_digit2(unsigned char) reentrant
dco @13:0 u:2 push _local_near+0
dco @13:2 u:2 push _local_near+1
dco @13:4 u:2 push _local_near+2
dtx ; parameter 'dig' in 'R7'
dhl }
dhl
dhl /**************** print a large DIGIT 2 Lines. Must be in LINE >0! ************/
dhl static void lcd_digit2(uchar dig) reentrant{
dco @13:6 u:1 mov A,R7
dco @13:7 u:1 add A,R7
dco @13:8 u:2 add A,ACC
dco @13:a u:1 mov R7,A
dtx ; variable 'dig' assigned to register 'R7'
dhl uchar x,y;
dhl dig*=4;
dhl lcd_putc(dig2_tab[dig++]);
dco @13:b u:2 mov R5,AR7
dco @13:d u:2 mov R7,AR5
dco @13:f u:1 inc R7
dtx ; variable 'dig' allocated as 'auto'
dco @13:10 u:2 mov ?i47,R7
dco @13:12 u:2 mov R4,#0
dco @13:14 u:2 mov R6,#((_dig2_tab)>>8)&255
dco @13:16 u:2 mov R7,#(_dig2_tab)&255
dco @13:18 u:1 mov A,R7
dco @13:19 u:1 add A,R5
dco @13:1a u:1 mov R7,A
dco @13:1b u:1 mov A,R6
dco @13:1c u:1 addc A,R4
dco @13:1d u:1 mov R6,A
dco @13:1e u:3 mov DPH,AR6
dco @13:21 u:3 mov DPL,AR7
dco @13:24 u:1 clr A
dco @13:25 u:1 movc A,@A+DPTR
dco @13:26 u:1 mov R7,A
dco @13:27 u:3 lcall _lcd_putc
dtx ; variable 'x' allocated as 'auto'
dhl x=lcd_pos_x; // Take after 1.st char, might be after NL..
dco @13:2a u:3 mov ?lcd_digit2_x,_lcd_pos_x
dtx ; variable 'y' allocated as 'auto'
dhl y=lcd_pos_y;
dco @13:2d u:3 mov ?lcd_digit2_y,_lcd_pos_y
dhl lcd_putc(dig2_tab[dig++]);
dco @13:30 u:2 mov R5,?i47
dco @13:32 u:2 mov R7,AR5
dco @13:34 u:1 inc R7
dtx ; variable 'dig' allocated as 'auto'
dco @13:35 u:2 mov ?i48,R7
dco @13:37 u:2 mov R4,#0
dco @13:39 u:2 mov R6,#((_dig2_tab)>>8)&255
dco @13:3b u:2 mov R7,#(_dig2_tab)&255
dco @13:3d u:1 mov A,R7
dco @13:3e u:1 add A,R5
dco @13:3f u:1 mov R7,A
dco @13:40 u:1 mov A,R6
dco @13:41 u:1 addc A,R4
dco @13:42 u:1 mov R6,A
dco @13:43 u:3 mov DPH,AR6
dco @13:46 u:3 mov DPL,AR7
dco @13:49 u:1 clr A
dco @13:4a u:1 movc A,@A+DPTR
dco @13:4b u:1 mov R7,A
dco @13:4c u:3 lcall _lcd_putc
dhl lcd_gotoxy(x-1,y-1);
dco @13:4f u:2 mov R7,?lcd_digit2_y
dco @13:51 u:2 mov R5,AR7
dco @13:53 u:1 dec R5
dco @13:54 u:2 mov R7,?lcd_digit2_x
dco @13:56 u:1 dec R7
dco @13:57 u:3 lcall _lcd_gotoxy
dhl lcd_putc(dig2_tab[dig++]);
dco @13:5a u:2 mov R5,?i48
dco @13:5c u:2 mov R7,AR5
dco @13:5e u:1 inc R7
dtx ; variable 'dig' allocated as 'auto'
dco @13:5f u:2 mov ?i49,R7
dco @13:61 u:2 mov R4,#0
dco @13:63 u:2 mov R6,#((_dig2_tab)>>8)&255
dco @13:65 u:2 mov R7,#(_dig2_tab)&255
dco @13:67 u:1 mov A,R7
dco @13:68 u:1 add A,R5
dco @13:69 u:1 mov R7,A
dco @13:6a u:1 mov A,R6
dco @13:6b u:1 addc A,R4
dco @13:6c u:1 mov R6,A
dco @13:6d u:3 mov DPH,AR6
dco @13:70 u:3 mov DPL,AR7
dco @13:73 u:1 clr A
dco @13:74 u:1 movc A,@A+DPTR
dco @13:75 u:1 mov R7,A
dco @13:76 u:3 lcall _lcd_putc
dhl lcd_putc(dig2_tab[dig]);
dco @13:79 u:2 mov R7,?i49
dco @13:7b u:2 mov R5,AR7
dco @13:7d u:2 mov R4,#0
dco @13:7f u:2 mov R6,#((_dig2_tab)>>8)&255
dco @13:81 u:2 mov R7,#(_dig2_tab)&255
dco @13:83 u:1 mov A,R7
dco @13:84 u:1 add A,R5
dco @13:85 u:1 mov R7,A
dco @13:86 u:1 mov A,R6
dco @13:87 u:1 addc A,R4
dco @13:88 u:1 mov R6,A
dco @13:89 u:3 mov DPH,AR6
dco @13:8c u:3 mov DPL,AR7
dco @13:8f u:1 clr A
dco @13:90 u:1 movc A,@A+DPTR
dco @13:91 u:1 mov R7,A
dco @13:92 u:3 lcall _lcd_putc
dhl lcd_gotoxy(x+1,y);
dco @13:95 u:2 mov R5,?lcd_digit2_y
dco @13:97 u:2 mov R7,?lcd_digit2_x
dco @13:99 u:1 inc R7
dco @13:9a u:3 lcall _lcd_gotoxy
dco @13:9d u:2 pop _local_near+2
dco @13:9f u:2 pop _local_near+1
dco @13:a1 u:2 pop _local_near+0
dco @13:a3 u:1 ret
dtx ; end of function lcd_digit2
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B locals:3 bytes
dtx
dtx .export _lcd_printf ; int lcd_printf(far char *, ...)
dtx .hide
dtx .show
dtx
dtx .segment __lcd_printf
dtx _lcd_printf: ; int lcd_printf(far char *, ...)
dtx ; parameter 'pfmt' in 'RL4567'
dhl
dhl }
dhl
dhl /************** lcd_printf() ********************/
dhl int lcd_printf(far char* pfmt, ...){
dco @17:0 u:3 mov __doprnt_formal_near,#?_lcd_printf_va_start
dco @17:3 u:3 lcall __movel_4_0
dco @17:6 u:2 mov R6,#((_lcd_putc)>>8)&255
dco @17:8 u:2 mov R7,#(_lcd_putc)&255
dco @17:a u:3 lcall __doprnt
dco @17:d u:1 ret
dtx ; end of function lcd_printf
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .export _lcd_d2_putc ; void lcd_d2_putc(unsigned char) reentrant
dtx .hide
dtx .show
dtx
dtx .segment __lcd_d2_putc
dtx _lcd_d2_putc: ; void lcd_d2_putc(unsigned char) reentrant
dco @18:0 u:2 push _local_near+0
dtx ; parameter 'date' in 'R7' moved and assigned to local '?lcd_d2_putc_date'
dco @18:2 u:2 mov ?lcd_d2_putc_date,R7
dhl va_list(ap);
dhl va_start(ap,pfmt);
dhl return _doprnt(lcd_putc, pfmt, ap);
dhl }
dhl
dhl /*****************************************************
dhl * lcd_d2_putc(): send datebyte. If digit: print large!
dhl *****************************************************/
dhl void lcd_d2_putc(uchar date) reentrant{
dco @18:4 u:2 mov R5,#48
dco @18:6 u:2 mov R7,?lcd_d2_putc_date
dco @18:8 u:1 clr C
dco @18:9 u:1 mov A,R7
dco @18:a u:1 subb A,R5
dco @18:b u:2 jc ?52
dco @18:d u:2 mov R5,#57
dco @18:f u:2 mov R7,?lcd_d2_putc_date
dco @18:11 u:1 setb C
dco @18:12 u:1 mov A,R7
dco @18:13 u:1 subb A,R5
dco @18:14 u:2 jnc ?52
dhl if(date>='0' && date<='9'){
dco @18:16 u:2 mov R7,?lcd_d2_putc_date
dco @18:18 u:2 mov A,#208
dco @18:1a u:1 add A,R7
dco @18:1b u:1 mov R7,A
dco @18:1c u:3 lcall _lcd_digit2
dhl lcd_digit2(date-'0');
dhl }else if(date==' '){
dco @18:1f u:2 sjmp ?53
dtx ?52:
dtx
dco @18:21 u:2 mov A,#32
dco @18:23 u:2 xrl A,?lcd_d2_putc_date
dco @18:25 u:2 jnz ?54
dtx
dco @18:27 u:2 mov R7,#10
dco @18:29 u:3 lcall _lcd_digit2
dhl lcd_digit2(10);
dhl }else if(date=='-'){
dco @18:2c u:2 sjmp ?55
dtx ?54:
dtx
dco @18:2e u:2 mov A,#45
dco @18:30 u:2 xrl A,?lcd_d2_putc_date
dco @18:32 u:2 jnz ?56
dtx
dco @18:34 u:2 mov R7,#11
dco @18:36 u:3 lcall _lcd_digit2
dhl lcd_digit2(11);
dhl }else{
dco @18:39 u:2 sjmp ?57
dtx ?56:
dtx
dco @18:3b u:2 mov R7,?lcd_d2_putc_date
dco @18:3d u:3 lcall _lcd_putc
dhl lcd_putc(date);
dhl lcd_gotoxy(lcd_pos_x-1,lcd_pos_y-1);
dco @18:40 u:2 mov R7,_lcd_pos_y
dco @18:42 u:2 mov R5,AR7
dco @18:44 u:1 dec R5
dco @18:45 u:2 mov R7,_lcd_pos_x
dco @18:47 u:1 dec R7
dco @18:48 u:3 lcall _lcd_gotoxy
dhl lcd_putc(' ');
dco @18:4b u:2 mov R7,#32
dco @18:4d u:3 lcall _lcd_putc
dhl lcd_gotoxy(lcd_pos_x,lcd_pos_y+1);
dco @18:50 u:2 mov R7,_lcd_pos_y
dco @18:52 u:2 mov R5,AR7
dco @18:54 u:1 inc R5
dco @18:55 u:2 mov R7,_lcd_pos_x
dco @18:57 u:3 lcall _lcd_gotoxy
dhl }
dtx ?57:
dtx ?55:
dtx ?53:
dco @18:5a u:2 pop _local_near+0
dco @18:5c u:1 ret
dtx ; end of function lcd_d2_putc
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B locals:1 bytes
dtx
dtx .export _lcd_d2_printf ; int lcd_d2_printf(far char *, ...)
dtx .hide
dtx .show
dtx
dtx .segment __lcd_d2_printf
dtx _lcd_d2_printf: ; int lcd_d2_printf(far char *, ...)
dtx ; parameter 'pfmt' in 'RL4567'
dhl }
dhl
dhl
dhl /************** lcd_d2_printf() ********************/
dhl int lcd_d2_printf(far char* pfmt, ...){
dco @1b:0 u:3 mov __doprnt_formal_near,#?_lcd_d2_printf_va_start
dco @1b:3 u:3 lcall __movel_4_0
dco @1b:6 u:2 mov R6,#((_lcd_d2_putc)>>8)&255
dco @1b:8 u:2 mov R7,#(_lcd_d2_putc)&255
dco @1b:a u:3 lcall __doprnt
dco @1b:d u:1 ret
dtx ; end of function lcd_d2_printf
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .segment nearbss, sclass dram, notext
dtx _lcd_pos_y: ; near signed char lcd_pos_y
dco @1c:0 u:1 .ds.b 1
dtx _lcd_pos_x: ; near signed char lcd_pos_x
dco @1c:1 u:1 .ds.b 1
dtx .import __doprnt ; int _doprnt(void (*)(unsigned char) reentrant, far char *, near char *)
dtx .import _lcd_initport ; unsigned char lcd_initport(void)
dtx .import _lcd_combyte ; void lcd_combyte(unsigned char) reentrant
dtx .import _lcd_databyte ; void lcd_databyte(unsigned char) reentrant
dtx .import __va_start ; near char _va_start
dtx .end
dhl va_list(ap);
dhl va_start(ap,pfmt);
dhl return _doprnt(lcd_d2_putc, pfmt, ap);
dhl }
dhl
dhl
dhl // EOF
def:_lcd_cursor @e:0
def:_lcd_cgchars @8:0
def:_lcd_d2_putc @18:0
def:_segment2 @5:0
def:_lcd_clear @b:0
def:_lcd_printf @17:0
def:_lcd_putc @4:0
def:_lcd_d2_printf @1b:0
def:_lcd_gotoxy @3:0
def:_lcd_init @12:0
def:_lcd_pos_x @1c:1
def:_lcd_pos_y @1c:0
def:_lcd_setxy @2:0
def:_lcd_digit2 @13:0
def:_dig2_tab @5:40
objectend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -