📄 lcd_driver.lis
字号:
.module LCD_DRIVER.c
.area text(rom, con, rel)
0000 .dbfile C:\ygksb0108\programme2_can_run\LCD_DRIVER.c
0000 .dbfunc e lcd_out_dat_l _lcd_out_dat_l fV
0000 ; dat -> R20
.even
0000 _lcd_out_dat_l::
0000 0E940000 xcall push_gset1
0004 402F mov R20,R16
0006 .dbline -1
0006 .dbline 18
0006 ; //**********************************************************
0006 ; //本文件实现了用于驱动KS0108B/HD61202的基本常量和
0006 ; //函数,用于基本的读写操作(没有实现读的函数,
0006 ; //当然你可以自己实现).
0006 ; // ---北京交通大学电气学院 杨罡 2008.8
0006 ; //**********************************************************
0006 ;
0006 ; #include "LCD_DRIVER.H"
0006 ;
0006 ; //***********************************************************
0006 ; //if you want it to run on the protues then define this below
0006 ; //***********************************************************
0006 ; #define debug_protues
0006 ; //***********************************************************
0006 ;
0006 ; void lcd_out_dat_l( unsigned char dat)
0006 ;
0006 ; {
0006 .dbline 19
0006 ; choose_left_screen();
0006 6ED0 xcall _choose_left_screen
0008 .dbline 20
0008 ; LCD_DATA_MODE(); //D_I = CMD_MODE;
0008 C29A sbi 0x18,2
000A .dbline 21
000A ; LCD_WRITE_MODE(); //R_W=WRITE_MODE;
000A C398 cbi 0x18,3
000C .dbline 22
000C ; LCD_E_HIGH(); //E=1;
000C C49A sbi 0x18,4
000E .dbline 23
000E ; DATA_PORT=dat;
000E 4BBB out 0x1b,R20
0010 .dbline 24
0010 ; _delay_us(2);
0010 02E0 ldi R16,2
0012 0E940000 xcall __delay_us
0016 .dbline 25
0016 ; LCD_E_LOW(); //E=0;
0016 C498 cbi 0x18,4
0018 .dbline 26
0018 ; _delay_us(2);
0018 02E0 ldi R16,2
001A 0E940000 xcall __delay_us
001E .dbline -2
001E L1:
001E 0E940000 xcall pop_gset1
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbsym r dat 20 c
0024 .dbend
0024 .dbfunc e lcd_out_dat_r _lcd_out_dat_r fV
0024 ; dat -> R20
.even
0024 _lcd_out_dat_r::
0024 0E940000 xcall push_gset1
0028 402F mov R20,R16
002A .dbline -1
002A .dbline 30
002A ; }
002A ;
002A ; void lcd_out_dat_r( unsigned char dat)
002A ; {
002A .dbline 31
002A ; choose_right_screen() ;
002A 5FD0 xcall _choose_right_screen
002C .dbline 32
002C ; LCD_DATA_MODE(); //D_I = CMD_MODE;
002C C29A sbi 0x18,2
002E .dbline 33
002E ; LCD_WRITE_MODE(); //R_W=WRITE_MODE;
002E C398 cbi 0x18,3
0030 .dbline 34
0030 ; LCD_E_HIGH(); //E=1;
0030 C49A sbi 0x18,4
0032 .dbline 35
0032 ; DATA_PORT=dat;
0032 4BBB out 0x1b,R20
0034 .dbline 36
0034 ; _delay_us(2);
0034 02E0 ldi R16,2
0036 0E940000 xcall __delay_us
003A .dbline 37
003A ; LCD_E_LOW(); //E=0;
003A C498 cbi 0x18,4
003C .dbline 38
003C ; _delay_us(2);
003C 02E0 ldi R16,2
003E 0E940000 xcall __delay_us
0042 .dbline -2
0042 L2:
0042 0E940000 xcall pop_gset1
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r dat 20 c
0048 .dbend
0048 .dbfunc e lcd_out_ctl_l _lcd_out_ctl_l fV
0048 ; cmd -> R20
.even
0048 _lcd_out_ctl_l::
0048 0E940000 xcall push_gset1
004C 402F mov R20,R16
004E .dbline -1
004E .dbline 41
004E ; }
004E ; void lcd_out_ctl_l( unsigned char cmd)
004E ; {
004E .dbline 42
004E ; choose_left_screen();
004E 4AD0 xcall _choose_left_screen
0050 .dbline 43
0050 ; LCD_CMD_MODE(); //D_I = CMD_MODE;
0050 C298 cbi 0x18,2
0052 .dbline 44
0052 ; LCD_WRITE_MODE(); //R_W=WRITE_MODE;
0052 C398 cbi 0x18,3
0054 .dbline 45
0054 ; LCD_E_HIGH(); //E=1;
0054 C49A sbi 0x18,4
0056 .dbline 46
0056 ; DATA_PORT=cmd;
0056 4BBB out 0x1b,R20
0058 .dbline 47
0058 ; _delay_us(2);
0058 02E0 ldi R16,2
005A 0E940000 xcall __delay_us
005E .dbline 48
005E ; LCD_E_LOW(); //E=0;
005E C498 cbi 0x18,4
0060 .dbline 49
0060 ; _delay_us(2);
0060 02E0 ldi R16,2
0062 0E940000 xcall __delay_us
0066 .dbline -2
0066 L3:
0066 0E940000 xcall pop_gset1
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r cmd 20 c
006C .dbend
006C .dbfunc e lcd_out_ctl_r _lcd_out_ctl_r fV
006C ; cmd -> R20
.even
006C _lcd_out_ctl_r::
006C 0E940000 xcall push_gset1
0070 402F mov R20,R16
0072 .dbline -1
0072 .dbline 52
0072 ; }
0072 ; void lcd_out_ctl_r( unsigned char cmd)
0072 ; {
0072 .dbline 53
0072 ; choose_right_screen() ;
0072 3BD0 xcall _choose_right_screen
0074 .dbline 54
0074 ; LCD_CMD_MODE(); //D_I = CMD_MODE;
0074 C298 cbi 0x18,2
0076 .dbline 55
0076 ; LCD_WRITE_MODE(); //R_W=WRITE_MODE;
0076 C398 cbi 0x18,3
0078 .dbline 56
0078 ; LCD_E_HIGH(); //E=1;
0078 C49A sbi 0x18,4
007A .dbline 57
007A ; DATA_PORT=cmd;
007A 4BBB out 0x1b,R20
007C .dbline 58
007C ; _delay_us(2);
007C 02E0 ldi R16,2
007E 0E940000 xcall __delay_us
0082 .dbline 59
0082 ; LCD_E_LOW(); //E=0;
0082 C498 cbi 0x18,4
0084 .dbline 60
0084 ; _delay_us(2);
0084 02E0 ldi R16,2
0086 0E940000 xcall __delay_us
008A .dbline -2
008A L4:
008A 0E940000 xcall pop_gset1
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbsym r cmd 20 c
0090 .dbend
0090 .dbfunc e lcd_out_ctl _lcd_out_ctl fV
0090 ; nctrl -> R22
0090 ; cmd -> R20
.even
0090 _lcd_out_ctl::
0090 0E940000 xcall push_gset2
0094 622F mov R22,R18
0096 402F mov R20,R16
0098 .dbline -1
0098 .dbline 63
0098 ; }
0098 ; void lcd_out_ctl( unsigned char cmd, unsigned char nctrl)
0098 ; {
0098 .dbline 64
0098 ; if(nctrl==1)lcd_out_ctl_l(cmd);
0098 6130 cpi R22,1
009A 11F4 brne L6
009C .dbline 64
009C 042F mov R16,R20
009E D4DF xcall _lcd_out_ctl_l
00A0 L6:
00A0 .dbline 65
00A0 ; if(nctrl==2)lcd_out_ctl_r(cmd);
00A0 6230 cpi R22,2
00A2 11F4 brne L8
00A4 .dbline 65
00A4 042F mov R16,R20
00A6 E2DF xcall _lcd_out_ctl_r
00A8 L8:
00A8 .dbline 66
00A8 6330 cpi R22,3
00AA 21F4 brne L10
00AC .dbline 66
00AC .dbline 67
00AC 042F mov R16,R20
00AE CCDF xcall _lcd_out_ctl_l
00B0 .dbline 68
00B0 042F mov R16,R20
00B2 DCDF xcall _lcd_out_ctl_r
00B4 .dbline 69
00B4 L10:
00B4 .dbline -2
00B4 L5:
00B4 0E940000 xcall pop_gset2
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbsym r nctrl 22 c
00BA .dbsym r cmd 20 c
00BA .dbend
00BA .dbfunc e lcd_out_dat _lcd_out_dat fV
00BA ; nctrl -> R22
00BA ; dat -> R20
.even
00BA _lcd_out_dat::
00BA 0E940000 xcall push_gset2
00BE 622F mov R22,R18
00C0 402F mov R20,R16
00C2 .dbline -1
00C2 .dbline 72
00C2 ; if(nctrl==3){
00C2 ; lcd_out_ctl_l(cmd);
00C2 ; lcd_out_ctl_r(cmd);
00C2 ; }
00C2 ; }
00C2 ; void lcd_out_dat( unsigned char dat, unsigned char nctrl)
00C2 ; {
00C2 .dbline 73
00C2 ; if(nctrl==1)lcd_out_dat_l(dat);
00C2 6130 cpi R22,1
00C4 11F4 brne L13
00C6 .dbline 73
00C6 042F mov R16,R20
00C8 9BDF xcall _lcd_out_dat_l
00CA L13:
00CA .dbline 74
00CA ; if(nctrl==2)lcd_out_dat_r(dat);
00CA 6230 cpi R22,2
00CC 11F4 brne L15
00CE .dbline 74
00CE 042F mov R16,R20
00D0 A9DF xcall _lcd_out_dat_r
00D2 L15:
00D2 .dbline 75
00D2 6330 cpi R22,3
00D4 21F4 brne L17
00D6 .dbline 75
00D6 .dbline 76
00D6 042F mov R16,R20
00D8 93DF xcall _lcd_out_dat_l
00DA .dbline 77
00DA 042F mov R16,R20
00DC A3DF xcall _lcd_out_dat_r
00DE .dbline 78
00DE L17:
00DE .dbline -2
00DE L12:
00DE 0E940000 xcall pop_gset2
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r nctrl 22 c
00E4 .dbsym r dat 20 c
00E4 .dbend
00E4 .dbfunc e choose_left_screen _choose_left_screen fV
.even
00E4 _choose_left_screen::
00E4 .dbline -1
00E4 .dbline 81
00E4 ; if(nctrl==3){
00E4 ; lcd_out_dat_l(dat);
00E4 ; lcd_out_dat_r(dat);
00E4 ; }
00E4 ; }
00E4 ; void choose_left_screen(void)
00E4 ; {
00E4 .dbline 86
00E4 ; #ifndef debug_protues
00E4 ; LCD_LEFT_SELECT();
00E4 ; LCD_RIGHT_STOP();
00E4 ; #else
00E4 ; LCD_LEFT_STOP();
00E4 C09A sbi 0x18,0
00E6 .dbline 87
00E6 ; LCD_RIGHT_SELECT();
00E6 C198 cbi 0x18,1
00E8 .dbline -2
00E8 L19:
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbend
00EA .dbfunc e choose_right_screen _choose_right_screen fV
.even
00EA _choose_right_screen::
00EA .dbline -1
00EA .dbline 91
00EA ; #endif
00EA ; }
00EA ; void choose_right_screen(void)
00EA ; {
00EA .dbline 96
00EA ; #ifndef debug_protues
00EA ; LCD_LEFT_STOP();
00EA ; LCD_RIGHT_SELECT();
00EA ; #else
00EA ; LCD_LEFT_SELECT();
00EA C098 cbi 0x18,0
00EC .dbline 97
00EC ; LCD_RIGHT_STOP();
00EC C19A sbi 0x18,1
00EE .dbline -2
00EE L20:
00EE .dbline 0 ; func end
00EE 0895 ret
00F0 .dbend
00F0 .dbfunc e choose_full_screen _choose_full_screen fV
.even
00F0 _choose_full_screen::
00F0 .dbline -1
00F0 .dbline 101
00F0 ; #endif
00F0 ; }
00F0 ; void choose_full_screen(void)
00F0 ; {
00F0 .dbline 102
00F0 ; LCD_LEFT_SELECT();
00F0 C098 cbi 0x18,0
00F2 .dbline 103
00F2 ; LCD_RIGHT_SELECT();
00F2 C198 cbi 0x18,1
00F4 .dbline -2
00F4 L21:
00F4 .dbline 0 ; func end
00F4 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -