📄 3310.lis
字号:
0008 2223 tst R18
000A 11F4 brne L3
000C .dbline 36
000C ; {
000C .dbline 37
000C ; LCD_PORT&= ~LCD_DC ; // 传送命令
000C A898 cbi 0x15,0
000E .dbline 38
000E ; }
000E 01C0 xjmp L4
0010 L3:
0010 .dbline 40
0010 ; else
0010 ; {
0010 .dbline 41
0010 ; LCD_PORT|= LCD_DC ; // 传送数据
0010 A89A sbi 0x15,0
0012 .dbline 42
0012 ; }
0012 L4:
0012 .dbline 44
0012 ;
0012 ; SPDR = data; // 传送数据到SPI寄存器
0012 0FB9 out 0xf,R16
0014 L5:
0014 .dbline 46
0014 L6:
0014 .dbline 46
0014 ;
0014 ; while ((SPSR & 0x80) == 0); // 等待数据传送完毕
0014 779B sbis 0xe,7
0016 FECF rjmp L5
0018 .dbline 48
0018 ;
0018 ; LCD_PORT|= LCD_CE ; // 关闭LCD
0018 A99A sbi 0x15,1
001A .dbline -2
001A L2:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbsym r command 18 c
001C .dbsym r data 16 c
001C .dbend
001C .dbfunc e LCD_set_XY _LCD_set_XY fV
001C ; Y -> R22
001C ; X -> R20
.even
001C _LCD_set_XY::
001C 0E940000 xcall push_gset2
0020 622F mov R22,R18
0022 402F mov R20,R16
0024 .dbline -1
0024 .dbline 57
0024 ; }
0024 ; /*-----------------------------------------------------------------------
0024 ; LCD_set_XY : 设置LCD坐标函数
0024 ;
0024 ; 输入参数:X :0-83
0024 ; Y :0-5
0024 ; -----------------------------------------------------------------------*/
0024 ; void LCD_set_XY(unsigned char X, unsigned char Y)
0024 ; {
0024 .dbline 58
0024 ; LCD_write_byte(0x40 | Y, 0); // column
0024 2227 clr R18
0026 062F mov R16,R22
0028 0064 ori R16,64
002A EDDF xcall _LCD_write_byte
002C .dbline 59
002C ; LCD_write_byte(0x80 | X, 0); // row
002C 2227 clr R18
002E 042F mov R16,R20
0030 0068 ori R16,128
0032 E9DF xcall _LCD_write_byte
0034 .dbline -2
0034 L8:
0034 0E940000 xcall pop_gset2
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbsym r Y 22 c
003A .dbsym r X 20 c
003A .dbend
003A .dbfunc e LCD_write_char _LCD_write_char fV
003A ; line -> R20
003A ; c -> R22
.even
003A _LCD_write_char::
003A 0E940000 xcall push_gset2
003E 602F mov R22,R16
0040 .dbline -1
0040 .dbline 68
0040 ; }
0040 ;
0040 ; /*-----------------------------------------------------------------------
0040 ; LCD_write_char : 显示英文字符
0040 ;
0040 ; 输入参数:c :显示的字符;
0040 ; -----------------------------------------------------------------------*/
0040 ; void LCD_write_char(unsigned char c)
0040 ; {
0040 .dbline 70
0040 ; unsigned char line;
0040 ; c -= 32;
0040 6052 subi R22,32
0042 .dbline 71
0042 ; for (line=0; line<6; line++)
0042 4427 clr R20
0044 0FC0 xjmp L13
0046 L10:
0046 .dbline 72
0046 21E0 ldi R18,1
0048 86E0 ldi R24,6
004A 869F mul R24,R22
004C 1001 movw R2,R0
004E 80E0 ldi R24,<_font6x8
0050 90E0 ldi R25,>_font6x8
0052 280E add R2,R24
0054 391E adc R3,R25
0056 E42F mov R30,R20
0058 FF27 clr R31
005A E20D add R30,R2
005C F31D adc R31,R3
005E 0491 lpm R16,Z
0060 D2DF xcall _LCD_write_byte
0062 L11:
0062 .dbline 71
0062 4395 inc R20
0064 L13:
0064 .dbline 71
0064 4630 cpi R20,6
0066 78F3 brlo L10
0068 .dbline -2
0068 L9:
0068 0E940000 xcall pop_gset2
006C .dbline 0 ; func end
006C 0895 ret
006E .dbsym r line 20 c
006E .dbsym r c 22 c
006E .dbend
006E .dbfunc e LCD_write_english_string _LCD_write_english_string fV
006E ; s -> R20,R21
006E ; Y -> R10
006E ; X -> R22
.even
006E _LCD_write_english_string::
006E 0E940000 xcall push_gset3
0072 A22E mov R10,R18
0074 602F mov R22,R16
0076 4E81 ldd R20,y+6
0078 5F81 ldd R21,y+7
007A .dbline -1
007A .dbline 81
007A ; LCD_write_byte(font6x8[c][line], 1);
007A ; }
007A ; /*-----------------------------------------------------------------------
007A ; LCD_write_english_String : 英文字符串显示函数
007A ;
007A ; 输入参数:*s :英文字符串指针;
007A ; X、Y : 显示字符串的位置,x 0-83 ,y 0-5
007A ; -----------------------------------------------------------------------*/
007A ; void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
007A ; {
007A .dbline 82
007A ; LCD_set_XY(X,Y);
007A 2A2D mov R18,R10
007C 062F mov R16,R22
007E CEDF xcall _LCD_set_XY
0080 05C0 xjmp L16
0082 L15:
0082 .dbline 84
0082 .dbline 85
0082 FA01 movw R30,R20
0084 0081 ldd R16,z+0
0086 D9DF xcall _LCD_write_char
0088 .dbline 86
0088 4F5F subi R20,255 ; offset = 1
008A 5F4F sbci R21,255
008C .dbline 87
008C L16:
008C .dbline 83
008C ; while (*s)
008C FA01 movw R30,R20
008E 2080 ldd R2,z+0
0090 2220 tst R2
0092 B9F7 brne L15
0094 .dbline -2
0094 L14:
0094 0E940000 xcall pop_gset3
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r s 20 pc
009A .dbsym r Y 10 c
009A .dbsym r X 22 c
009A .dbend
009A .dbfunc e LCD_clear _LCD_clear fV
009A ; i -> R20,R21
.even
009A _LCD_clear::
009A 0E940000 xcall push_gset1
009E .dbline -1
009E .dbline 93
009E ; {
009E ; LCD_write_char(*s);
009E ; s++;
009E ; }
009E ; }
009E ; /*-----------------------------------------------------------------------
009E ; LCD_clear : LCD清屏函数
009E ; -----------------------------------------------------------------------*/
009E ; void LCD_clear(void)
009E ; {
009E .dbline 96
009E ; unsigned int i;
009E ;
009E ; LCD_write_byte(0x0c, 0); //普通显示模式
009E 2227 clr R18
00A0 0CE0 ldi R16,12
00A2 B1DF xcall _LCD_write_byte
00A4 .dbline 97
00A4 ; LCD_write_byte(0x80, 0); //设置RAM的X地址
00A4 2227 clr R18
00A6 00E8 ldi R16,128
00A8 AEDF xcall _LCD_write_byte
00AA .dbline 99
00AA ;
00AA ; for (i=0; i<504; i++)
00AA 4427 clr R20
00AC 5527 clr R21
00AE 05C0 xjmp L22
00B0 L19:
00B0 .dbline 100
00B0 21E0 ldi R18,1
00B2 0027 clr R16
00B4 A8DF xcall _LCD_write_byte
00B6 L20:
00B6 .dbline 99
00B6 4F5F subi R20,255 ; offset = 1
00B8 5F4F sbci R21,255
00BA L22:
00BA .dbline 99
00BA 483F cpi R20,248
00BC E1E0 ldi R30,1
00BE 5E07 cpc R21,R30
00C0 B8F3 brlo L19
00C2 .dbline -2
00C2 L18:
00C2 0E940000 xcall pop_gset1
00C6 .dbline 0 ; func end
00C6 0895 ret
00C8 .dbsym r i 20 i
00C8 .dbend
00C8 .dbfunc e LCD_init _LCD_init fV
.even
00C8 _LCD_init::
00C8 .dbline -1
00C8 .dbline 106
00C8 ; LCD_write_byte(0, 1); //写0数据
00C8 ; }
00C8 ; /*-----------------------------------------------------------------------
00C8 ; LCD_init : 3310LCD初始化
00C8 ; -----------------------------------------------------------------------*/
00C8 ; void LCD_init(void)
00C8 ; {
00C8 .dbline 107
00C8 ; DDRC|= LCD_RST | LCD_DC | LCD_CE ;
00C8 84B3 in R24,0x14
00CA 8760 ori R24,7
00CC 84BB out 0x14,R24
00CE .dbline 108
00CE ; DDRB |= SPI_MOSI | SPI_CLK;
00CE 87B3 in R24,0x17
00D0 806A ori R24,160
00D2 87BB out 0x17,R24
00D4 .dbline 109
00D4 ; PORTC &= ~LCD_RST; // 产生一个让LCD复位的低电平脉冲
00D4 AA98 cbi 0x15,2
00D6 .dbline 110
00D6 ; delay_1us();
00D6 94DF xcall _delay_1us
00D8 .dbline 111
00D8 ; PORTC |= LCD_RST;
00D8 AA9A sbi 0x15,2
00DA .dbline 112
00DA ; delay_1us();
00DA 92DF xcall _delay_1us
00DC .dbline 113
00DC ; PORTC &= ~LCD_CE ; // 关闭LCD
00DC A998 cbi 0x15,1
00DE .dbline 114
00DE ; delay_1us();
00DE 90DF xcall _delay_1us
00E0 .dbline 115
00E0 ; PORTC |= LCD_CE; // 使能LCD
00E0 A99A sbi 0x15,1
00E2 .dbline 116
00E2 ; delay_1us();
00E2 8EDF xcall _delay_1us
00E4 .dbline 118
00E4 ;
00E4 ; LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
00E4 2227 clr R18
00E6 01E2 ldi R16,33
00E8 8EDF xcall _LCD_write_byte
00EA .dbline 119
00EA ; LCD_write_byte(0xc8, 0); // 设置偏置电压
00EA 2227 clr R18
00EC 08EC ldi R16,200
00EE 8BDF xcall _LCD_write_byte
00F0 .dbline 120
00F0 ; LCD_write_byte(0x06, 0); // 温度校正
00F0 2227 clr R18
00F2 06E0 ldi R16,6
00F4 88DF xcall _LCD_write_byte
00F6 .dbline 121
00F6 ; LCD_write_byte(0x13, 0); // 1:48
00F6 2227 clr R18
00F8 03E1 ldi R16,19
00FA 85DF xcall _LCD_write_byte
00FC .dbline 122
00FC ; delay_1us();
00FC 81DF xcall _delay_1us
00FE .dbline 123
00FE ; LCD_write_byte(0x20, 0); // 使用基本命令
00FE 2227 clr R18
0100 00E2 ldi R16,32
0102 81DF xcall _LCD_write_byte
0104 .dbline 124
0104 ; LCD_clear(); // 清屏
0104 CADF xcall _LCD_clear
0106 .dbline 125
0106 ; LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
0106 2227 clr R18
0108 0CE0 ldi R16,12
010A 7DDF xcall _LCD_write_byte
010C .dbline 126
010C ; PORTC &= ~LCD_CE ; // 关闭LCD
010C A998 cbi 0x15,1
010E .dbline -2
010E L23:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -