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

📄 lcd_drv.obj

📁 89c51 可以使用的LCD 驱动源码 ...LCD2_driver
💻 OBJ
📖 第 1 页 / 共 3 页
字号:
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 + -