?? lcd_drv.obj
字號:
dco @2:24 u:3 mov _lcd_pos_x,#-1
dhl }else if(lcd_pos_y<0){
dco @2:27 u:2 sjmp ?5
dtx ?4:
dtx
dco @2:29 u:2 mov R7,_lcd_pos_y
dco @2:2b u:1 mov A,R7
dco @2:2c u:3 jnb ACC.7,?6
dtx
dco @2:2f u:3 mov _lcd_pos_y,#3
dhl lcd_pos_y=3;
dhl lcd_pos_x=-1;
dco @2:32 u:3 mov _lcd_pos_x,#-1
dhl }
dtx ?6:
dtx ?5:
dhl
dhl switch(lcd_pos_y){ // Here for a 4x40 Display
dco @2:35 u:2 mov R7,_lcd_pos_y
dco @2:37 u:1 mov A,R7
dco @2:38 u:2 xrl A,#1
dco @2:3a u:2 jz ?10
dco @2:3c u:2 mov R7,_lcd_pos_y
dco @2:3e u:1 mov A,R7
dco @2:3f u:2 xrl A,#2
dco @2:41 u:2 jz ?11
dco @2:43 u:2 mov R7,_lcd_pos_y
dco @2:45 u:1 mov A,R7
dco @2:46 u:2 xrl A,#3
dco @2:48 u:2 jz ?12
dco @2:4a u:2 sjmp ?8
dtx
dtx ?10:
dhl case 1: date=64; break;
dco @2:4c u:2 mov R5,#64
dtx ; variable 'date' assigned to register 'R5'
dtx
dco @2:4e u:2 sjmp ?9
dtx ?11:
dhl case 2: date=20; break;
dco @2:50 u:2 mov R5,#20
dtx
dco @2:52 u:2 sjmp ?9
dtx ?12:
dhl case 3: date=84; break;
dco @2:54 u:2 mov R5,#84
dtx
dco @2:56 u:2 sjmp ?9
dtx ?8:
dhl default: date=0;
dco @2:58 u:1 clr A
dco @2:59 u:1 mov R5,A
dhl }
dtx ?9:
dhl date|=128;
dco @2:5a u:1 mov A,R5
dco @2:5b u:2 orl A,#128
dco @2:5d u:1 mov R3,A
dtx ; variable 'date' assigned to register 'R3'
dhl if(lcd_pos_x>0) date+=lcd_pos_x;
dco @2:5e u:1 clr A
dco @2:5f u:1 mov R5,A
dco @2:60 u:2 mov R7,_lcd_pos_x
dco @2:62 u:1 setb C
dco @2:63 u:1 mov A,R7
dco @2:64 u:2 xrl A,#128
dco @2:66 u:3 xrl AR5,#128
dco @2:69 u:1 subb A,R5
dco @2:6a u:2 jc ?13
dtx
dco @2:6c u:2 mov R7,_lcd_pos_x
dco @2:6e u:1 mov A,R7
dco @2:6f u:1 add A,R3
dco @2:70 u:1 mov R3,A
dtx ?13:
dhl lcd_combyte(date);
dco @2:71 u:2 mov R7,AR3
dco @2:73 u:3 lcall _lcd_combyte
dco @2:76 u:1 ret
dtx ; end of function lcd_setxy
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .export _lcd_gotoxy ; void lcd_gotoxy(char, char) reentrant
dtx .hide
dtx .show
dtx
dtx .segment __lcd_gotoxy
dtx _lcd_gotoxy: ; void lcd_gotoxy(char, char) reentrant
dtx ; parameter 'nx' in 'R7'
dtx ; parameter 'ny' in 'R5'
dhl }
dhl
dhl /*********************** lcd_gotoxy() *************************/
dhl void lcd_gotoxy(char nx,char ny) reentrant{
dco @3:0 u:2 mov _lcd_pos_x,R7
dhl lcd_pos_x=nx;
dhl lcd_pos_y=ny;
dco @3:2 u:2 mov _lcd_pos_y,R5
dhl lcd_setxy();
dco @3:4 u:3 lcall _lcd_setxy
dco @3:7 u:1 ret
dtx ; end of function lcd_gotoxy
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B
dtx
dtx .export _lcd_putc ; void lcd_putc(unsigned char) reentrant
dtx .hide
dtx .show
dtx
dtx .segment __lcd_putc
dtx _lcd_putc: ; void lcd_putc(unsigned char) reentrant
dco @4:0 u:2 push _local_near+0
dco @4:2 u:2 push _local_near+1
dtx ; parameter 'date' in 'R7' moved and assigned to local '?lcd_putc_date'
dco @4:4 u:2 mov ?lcd_putc_date,R7
dhl }
dhl
dhl
dhl /*****************************************************
dhl * lcd_putc(): send datebyte
dhl *****************************************************/
dhl void lcd_putc(uchar date) reentrant{
dco @4:6 u:2 mov A,#8
dco @4:8 u:2 xrl A,?lcd_putc_date
dco @4:a u:2 jnz ?18
dhl uchar i;
dhl if(date==8){ /* Backspace */
dco @4:c u:1 clr A
dco @4:d u:1 mov R5,A
dco @4:e u:2 mov R7,_lcd_pos_x
dco @4:10 u:1 setb C
dco @4:11 u:1 mov A,R7
dco @4:12 u:2 xrl A,#128
dco @4:14 u:3 xrl AR5,#128
dco @4:17 u:1 subb A,R5
dco @4:18 u:2 jc ?20
dhl if(lcd_pos_x>0) lcd_pos_x--;
dco @4:1a u:2 dec _lcd_pos_x
dtx ?20:
dhl lcd_setxy();
dco @4:1c u:3 lcall _lcd_setxy
dhl }else if(date!='\n'){ /* ASCII char */
dco @4:1f u:2 sjmp ?19
dtx ?18:
dtx
dco @4:21 u:2 mov R7,?lcd_putc_date
dco @4:23 u:1 mov A,R7
dco @4:24 u:2 xrl A,#10
dco @4:26 u:2 jz ?22
dtx
dco @4:28 u:2 mov R7,_lcd_pos_x
dco @4:2a u:1 mov A,R7
dco @4:2b u:3 jnb ACC.7,?24
dhl if(lcd_pos_x<0){
dco @4:2e u:3 mov ?lcd_putc_2_i30,#20
dtx ?26:
dhl for(i=0;i<20;i++){ /* Clear line */
dco @4:31 u:2 mov R7,#32
dco @4:33 u:3 lcall _lcd_databyte
dhl lcd_databyte(' ');
dhl }
dco @4:36 u:3 djnz ?lcd_putc_2_i30,?26
dhl lcd_pos_x=0;
dco @4:39 u:1 clr A
dco @4:3a u:2 mov _lcd_pos_x,A
dhl lcd_setxy();
dco @4:3c u:3 lcall _lcd_setxy
dhl }
dtx ?24:
dhl lcd_databyte(date); /* Highbyte */
dco @4:3f u:2 mov R7,?lcd_putc_date
dco @4:41 u:3 lcall _lcd_databyte
dhl lcd_pos_x++;
dco @4:44 u:2 inc _lcd_pos_x
dhl }
dtx ?22:
dtx ?19:
dhl if(lcd_pos_x>19 || date=='\n'){ /* Newline */
dco @4:46 u:2 mov R5,#19
dco @4:48 u:2 mov R7,_lcd_pos_x
dco @4:4a u:1 setb C
dco @4:4b u:1 mov A,R7
dco @4:4c u:2 xrl A,#128
dco @4:4e u:3 xrl AR5,#128
dco @4:51 u:1 subb A,R5
dco @4:52 u:2 jnc ?33
dco @4:54 u:2 mov A,#10
dco @4:56 u:2 xrl A,?lcd_putc_date
dco @4:58 u:2 jnz ?31
dtx ?33:
dtx
dco @4:5a u:3 mov _lcd_pos_x,#-1
dhl lcd_pos_x=-1;
dhl lcd_pos_y++;
dco @4:5d u:2 inc _lcd_pos_y
dhl lcd_setxy();
dco @4:5f u:3 lcall _lcd_setxy
dhl }
dtx ?31:
dco @4:62 u:2 pop _local_near+1
dco @4:64 u:2 pop _local_near+0
dco @4:66 u:1 ret
dtx ; end of function lcd_putc
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B locals:2 bytes
dtx
dtx .segment lit
dtx .export _segment2 ; code unsigned char segment2[]
dtx _segment2: ; code unsigned char segment2[]
dco @5:0 u:2 .dc.b 31,1
dco @5:2 u:2 .dc.b 1,1
dco @5:4 u:2 .dc.b 1,1
dco @5:6 u:2 .dc.b 1,1
dco @5:8 u:2 .dc.b 1,1
dco @5:a u:2 .dc.b 1,1
dco @5:c u:2 .dc.b 1,1
dco @5:e u:2 .dc.b 1,31
dco @5:10 u:2 .dc.b 1,1
dco @5:12 u:2 .dc.b 1,1
dco @5:14 u:2 .dc.b 1,1
dco @5:16 u:2 .dc.b 1,1
dco @5:18 u:2 .dc.b 0,0
dco @5:1a u:2 .dc.b 0,0
dco @5:1c u:2 .dc.b 0,0
dco @5:1e u:2 .dc.b 0,1
dco @5:20 u:2 .dc.b 31,1
dco @5:22 u:2 .dc.b 1,1
dco @5:24 u:2 .dc.b 1,1
dco @5:26 u:2 .dc.b 1,31
dco @5:28 u:2 .dc.b 0,0
dco @5:2a u:2 .dc.b 0,0
dco @5:2c u:2 .dc.b 0,0
dco @5:2e u:2 .dc.b 0,31
dco @5:30 u:2 .dc.b 31,0
dco @5:32 u:2 .dc.b 0,0
dco @5:34 u:2 .dc.b 0,0
dco @5:36 u:2 .dc.b 0,31
dco @5:38 u:2 .dc.b 1,0
dco @5:3a u:2 .dc.b 0,0
dco @5:3c u:2 .dc.b 0,0
dco @5:3e u:2 .dc.b 0,0
dtx _dig2_tab: ; code unsigned char dig2_tab[]
dco @5:40 u:2 .dc.b 2,1
dco @5:42 u:2 .dc.b 2,0
dco @5:44 u:2 .dc.b " ",2
dco @5:46 u:2 .dc.b " ",2
dco @5:48 u:2 .dc.b 2,5
dco @5:4a u:2 .dc.b 3,4
dco @5:4c u:2 .dc.b " ",1
dco @5:4e u:2 .dc.b " ",4
dco @5:50 u:2 .dc.b " ",2
dco @5:52 u:2 .dc.b 2,1
dco @5:54 u:2 .dc.b " ",1
dco @5:56 u:2 .dc.b 2,6
dco @5:58 u:2 .dc.b 2,1
dco @5:5a u:2 .dc.b 2,6
dco @5:5c u:2 .dc.b " ",2
dco @5:5e u:2 .dc.b " ",0
dco @5:60 u:2 .dc.b 2,1
dco @5:62 u:2 .dc.b 2,4
dco @5:64 u:2 .dc.b " ",1
dco @5:66 u:2 .dc.b 2,4
dco @5:68 u:2 .dc.b " "
dco @5:6a u:2 .dc.b " "
dco @5:6c u:2 .dc.b " -"
dco @5:6e u:2 .dc.b " "
dtx .export _lcd_cgchars ; void lcd_cgchars(unsigned char *)
dtx .hide
dtx .show
dtx
dtx .segment __lcd_cgchars
dtx _lcd_cgchars: ; void lcd_cgchars(unsigned char *)
dtx ; parameter 'cdat' in 'RL4567' moved and assigned to local '?lcd_cgchars_cdat'
dco @8:0 u:2 mov A,#?lcd_cgchars_cdat
dco @8:2 u:3 lcall __st_a_r47
dhl }
dhl
dhl
dhl // Character-Graphics for 2-line Display thin lines
dhl code unsigned char segment2[]={
dhl 31,1,1,1,1,1,1,1,
dhl 1,1,1,1,1,1,1,31,
dhl 1,1,1,1,1,1,1,1,
dhl 0,0,0,0,0,0,0,1,
dhl 31,1,1,1,1,1,1,31,
dhl 0,0,0,0,0,0,0,31,
dhl 31,0,0,0,0,0,0,31,
dhl 1,0,0,0,0,0,0,0
dhl };
dhl
dhl // List of segment-positions for 2-line Display
dhl static code uchar dig2_tab[]={
dhl 2,1,2,0, // 0
dhl 32,2,32,2, // 1
dhl 2,5,3,4, // 2
dhl 32,1,32,4, // 3
dhl 32,2,2,1, // 4
dhl 32,1,2,6, // 5
dhl 2,1,2,6, // 6
dhl 32,2,32,0, // 7
dhl 2,1,2,4, // 8
dhl 32,1,2,4, // 9
dhl 32,32,32,32, // Space
dhl 32,'-',32,32, // -
dhl };
dhl
dhl
dhl
dhl /******************** lcd_cgchars() ******************/
dhl void lcd_cgchars(uchar *cdat){
dco @8:5 u:2 mov R7,#64
dco @8:7 u:3 lcall _lcd_combyte
dhl uchar i,c;
dhl lcd_combyte(64); /* Set CG RAM addr. 0 */
dhl for(i=0;i<64;i++){
dco @8:a u:3 mov ?lcd_cgchars_i39,#64
dtx ?35:
dtx
dco @8:d u:3 mov AR8,?lcd_cgchars_cdat
dco @8:10 u:3 mov AR9,?lcd_cgchars_cdat+1
dco @8:13 u:3 mov AR10,?lcd_cgchars_cdat+2
dco @8:16 u:3 mov AR11,?lcd_cgchars_cdat+3
dco @8:19 u:1 clr A
dco @8:1a u:1 mov R0,A
dco @8:1b u:1 mov R1,A
dco @8:1c u:1 mov R2,A
dco @8:1d u:2 mov R3,#1
dco @8:1f u:3 lcall __movel_8_4
dco @8:22 u:3 lcall __add_i4
dco @8:25 u:2 mov A,#?lcd_cgchars_cdat
dco @8:27 u:3 lcall __st_a_r47
dco @8:2a u:3 lcall __movel_8_4
dco @8:2d u:3 lcall __gen_read32_i1
dtx ; variable 'c' assigned to register 'R7'
dhl c=*cdat++;
dhl lcd_databyte(c); /* Write Bytes */
dco @8:30 u:3 lcall _lcd_databyte
dhl }
dco @8:33 u:3 djnz ?lcd_cgchars_i39,?35
dhl lcd_setxy(); /* Restore old cursor position */
dco @8:36 u:3 lcall _lcd_setxy
dco @8:39 u:1 ret
dtx ; end of function lcd_cgchars
dtx ; used: R01234567 BR01234567 DPTR ACC PSW B locals:5 bytes
dtx
dtx .export _lcd_clear ; void lcd_clear(void)
dtx .hide
dtx .show
dtx
dtx .segment __lcd_clear
dtx _lcd_clear: ; void lcd_clear(void)
dhl }
dhl
dhl /******************** lcd_clear() ****************/
dhl void lcd_clear(void){
dco @b:0 u:2 mov R7,#1
dco @b:2 u:3 lcall _lcd_combyte
dhl lcd_combyte(1);
dhl lcd_pos_x=0;
dco @b:5 u:1 clr A
dco @b:6 u:2 mov _lcd_pos_x,A
dhl lcd_pos_y=0;
dco @b:8 u:1 clr A
dco @b:9 u:2 mov _lcd_pos_y,A
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -