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