📄 3310_5110lcd.lis
字号:
0008 C498 cbi 0x18,4
000A .dbline 29
000A ; delay_1us();
000A 0E940000 xcall _delay_1us
000E .dbline 30
000E ; PORTB |= LCD_CE; // 使能LCD
000E C49A sbi 0x18,4
0010 .dbline 31
0010 ; delay_1us();
0010 0E940000 xcall _delay_1us
0014 .dbline 33
0014 ;
0014 ; LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
0014 2227 clr R18
0016 01E2 ldi R16,33
0018 ACD1 xcall _LCD_write_byte
001A .dbline 34
001A ; LCD_write_byte(0xc8, 0); // 设置偏置电压
001A 2227 clr R18
001C 08EC ldi R16,200
001E A9D1 xcall _LCD_write_byte
0020 .dbline 35
0020 ; LCD_write_byte(0x06, 0); // 温度校正
0020 2227 clr R18
0022 06E0 ldi R16,6
0024 A6D1 xcall _LCD_write_byte
0026 .dbline 36
0026 ; LCD_write_byte(0x13, 0); // 1:48
0026 2227 clr R18
0028 03E1 ldi R16,19
002A A3D1 xcall _LCD_write_byte
002C .dbline 37
002C ; LCD_write_byte(0x20, 0); // 使用基本命令
002C 2227 clr R18
002E 00E2 ldi R16,32
0030 A0D1 xcall _LCD_write_byte
0032 .dbline 38
0032 ; LCD_clear(); // 清屏
0032 05D0 xcall _LCD_clear
0034 .dbline 39
0034 ; LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
0034 2227 clr R18
0036 0CE0 ldi R16,12
0038 9CD1 xcall _LCD_write_byte
003A .dbline 41
003A ;
003A ; PORTB &= ~LCD_CE ; // 关闭LCD
003A C498 cbi 0x18,4
003C .dbline -2
003C L1:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E .dbfunc e LCD_clear _LCD_clear fV
003E ; i -> R20,R21
.even
003E _LCD_clear::
003E 0E940000 xcall push_gset1
0042 .dbline -1
0042 .dbline 54
0042 ; }
0042 ; /*************************************************************************
0042 ; ** 函数名称: LCD_clear(void)
0042 ; ** 功能描述: LCD清屏函数
0042 ; ** 输 入:
0042 ; ** 输出 :
0042 ; ** 全局变量: 无
0042 ; ** 调用模块:
0042 ; ** 说明:
0042 ; ** 注意:
0042 ; **************************************************************************/
0042 ; void LCD_clear(void)
0042 ; {
0042 .dbline 57
0042 ; unsigned int i;
0042 ;
0042 ; LCD_write_byte(0x0c, 0);
0042 2227 clr R18
0044 0CE0 ldi R16,12
0046 95D1 xcall _LCD_write_byte
0048 .dbline 58
0048 ; LCD_write_byte(0x80, 0);
0048 2227 clr R18
004A 00E8 ldi R16,128
004C 92D1 xcall _LCD_write_byte
004E .dbline 60
004E ;
004E ; for (i=0; i<504; i++)
004E 4427 clr R20
0050 5527 clr R21
0052 05C0 xjmp L6
0054 L3:
0054 .dbline 61
0054 21E0 ldi R18,1
0056 0027 clr R16
0058 8CD1 xcall _LCD_write_byte
005A L4:
005A .dbline 60
005A 4F5F subi R20,255 ; offset = 1
005C 5F4F sbci R21,255
005E L6:
005E .dbline 60
005E 483F cpi R20,248
0060 E1E0 ldi R30,1
0062 5E07 cpc R21,R30
0064 B8F3 brlo L3
0066 .dbline -2
0066 L2:
0066 0E940000 xcall pop_gset1
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r i 20 i
006C .dbend
006C .dbfunc e LCD_set_XY _LCD_set_XY fV
006C ; Y -> R22
006C ; X -> R20
.even
006C _LCD_set_XY::
006C 0E940000 xcall push_gset2
0070 622F mov R22,R18
0072 402F mov R20,R16
0074 .dbline -1
0074 .dbline 75
0074 ; LCD_write_byte(0, 1);
0074 ; }
0074 ; /*************************************************************************
0074 ; ** 函数名称: LCD_set_XY(unsigned char X, unsigned char Y)
0074 ; ** 功能描述: 设置LCD坐标函数
0074 ; ** 输 入: X :0-83 X 坐标
0074 ; Y :0-5 Y 坐标
0074 ; ** 输出 :
0074 ; ** 全局变量: 无
0074 ; ** 调用模块:
0074 ; ** 说明:
0074 ; ** 注意:
0074 ; **************************************************************************/
0074 ; void LCD_set_XY(unsigned char X, unsigned char Y)
0074 ; {
0074 .dbline 76
0074 ; LCD_write_byte(0x40 | Y, 0); // column
0074 2227 clr R18
0076 062F mov R16,R22
0078 0064 ori R16,64
007A 7BD1 xcall _LCD_write_byte
007C .dbline 77
007C ; LCD_write_byte(0x80 | X, 0); // row
007C 2227 clr R18
007E 042F mov R16,R20
0080 0068 ori R16,128
0082 77D1 xcall _LCD_write_byte
0084 .dbline -2
0084 L7:
0084 0E940000 xcall pop_gset2
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbsym r Y 22 c
008A .dbsym r X 20 c
008A .dbend
008A .dbfunc e LCD_write_char _LCD_write_char fV
008A ; line -> R20
008A ; c -> R22
.even
008A _LCD_write_char::
008A 0E940000 xcall push_gset2
008E 602F mov R22,R16
0090 .dbline -1
0090 .dbline 90
0090 ; }
0090 ; /*************************************************************************
0090 ; ** 函数名称: LCD_write_char(unsigned char c)
0090 ; ** 功能描述: 显示英文字符
0090 ; ** 输 入: c :显示的字符
0090 ; ** 输出 :
0090 ; ** 全局变量: 无
0090 ; ** 调用模块:
0090 ; ** 说明:
0090 ; ** 注意:
0090 ; **************************************************************************/
0090 ; void LCD_write_char(unsigned char c)
0090 ; {
0090 .dbline 93
0090 ; unsigned char line;
0090 ;
0090 ; c -= 32;
0090 6052 subi R22,32
0092 .dbline 95
0092 ;
0092 ; for (line=0; line<6; line++)
0092 4427 clr R20
0094 0FC0 xjmp L12
0096 L9:
0096 .dbline 96
0096 21E0 ldi R18,1
0098 86E0 ldi R24,6
009A 869F mul R24,R22
009C 1001 movw R2,R0
009E 80E0 ldi R24,<_font6x8
00A0 90E0 ldi R25,>_font6x8
00A2 280E add R2,R24
00A4 391E adc R3,R25
00A6 E42F mov R30,R20
00A8 FF27 clr R31
00AA E20D add R30,R2
00AC F31D adc R31,R3
00AE 0491 lpm R16,Z
00B0 60D1 xcall _LCD_write_byte
00B2 L10:
00B2 .dbline 95
00B2 4395 inc R20
00B4 L12:
00B4 .dbline 95
00B4 4630 cpi R20,6
00B6 78F3 brlo L9
00B8 .dbline -2
00B8 L8:
00B8 0E940000 xcall pop_gset2
00BC .dbline 0 ; func end
00BC 0895 ret
00BE .dbsym r line 20 c
00BE .dbsym r c 22 c
00BE .dbend
00BE .dbfunc e LCD_write_english_string _LCD_write_english_string fV
00BE ; s -> R20,R21
00BE ; Y -> R10
00BE ; X -> R22
.even
00BE _LCD_write_english_string::
00BE 0E940000 xcall push_gset3
00C2 A22E mov R10,R18
00C4 602F mov R22,R16
00C6 4E81 ldd R20,y+6
00C8 5F81 ldd R21,y+7
00CA .dbline -1
00CA .dbline 110
00CA ; LCD_write_byte(font6x8[c][line], 1);
00CA ; }
00CA ; /*************************************************************************
00CA ; ** 函数名称: LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
00CA ; ** 功能描述: 英文字符串显示函数
00CA ; ** 输 入: *s :英文字符串指针;
00CA ; X、Y : 显示字符串的位置,x 0-83 ,y 0-5
00CA ; ** 输出 :
00CA ; ** 全局变量: 无
00CA ; ** 调用模块:
00CA ; ** 说明:
00CA ; ** 注意:
00CA ; **************************************************************************/
00CA ; void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
00CA ; {
00CA .dbline 111
00CA ; LCD_set_XY(X,Y);
00CA 2A2D mov R18,R10
00CC 062F mov R16,R22
00CE CEDF xcall _LCD_set_XY
00D0 05C0 xjmp L15
00D2 L14:
00D2 .dbline 113
00D2 .dbline 114
00D2 FA01 movw R30,R20
00D4 0081 ldd R16,z+0
00D6 D9DF xcall _LCD_write_char
00D8 .dbline 115
00D8 4F5F subi R20,255 ; offset = 1
00DA 5F4F sbci R21,255
00DC .dbline 116
00DC L15:
00DC .dbline 112
00DC ; while (*s)
00DC FA01 movw R30,R20
00DE 2080 ldd R2,z+0
00E0 2220 tst R2
00E2 B9F7 brne L14
00E4 .dbline -2
00E4 L13:
00E4 0E940000 xcall pop_gset3
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbsym r s 20 pc
00EA .dbsym r Y 10 c
00EA .dbsym r X 22 c
00EA .dbend
00EA .dbfunc e LCD_write_chinese_string _LCD_write_chinese_string fV
00EA ; p -> R20,R21
00EA ; i -> R22
00EA ; n -> R10
00EA ; s -> y+22
00EA ; row -> R12
00EA ; line -> R14
00EA ; num -> y+16
00EA ; ch_with -> y+14
00EA ; Y -> y+12
00EA ; X -> y+10
.even
00EA _LCD_write_chinese_string::
00EA 0E940000 xcall push_arg4
00EE 0E940000 xcall push_gset5
00F2 EA88 ldd R14,y+18
00F4 CC88 ldd R12,y+20
00F6 .dbline -1
00F6 .dbline 134
00F6 ; {
00F6 ; LCD_write_char(*s);
00F6 ; s++;
00F6 ; }
00F6 ; }
00F6 ; /*************************************************************************
00F6 ; ** 函数名称: LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row,unsigned char (*s)[24])
00F6 ; ** 功能描述: 英文字符串显示函数
00F6 ; ** 输 入: X、Y :显示汉字的起始X、Y坐标;
00F6 ; ch_with :汉字点阵的宽度
00F6 ; num :显示汉字的个数;
00F6 ; line :汉字点阵数组中的起始行数
00F6 ; row :汉字显示的行间距
00F6 ; s : 要显示的汉字
00F6 ; ** 输出 :
00F6 ; ** 全局变量: 无
00F6 ; ** 调用模块:
00F6 ; ** 说明:LCD_write_chinese_string(0,0,12,7,0,0,write_chinese_string);
00F6 ; ** 注意:
00F6 ; **************************************************************************/
00F6 ; void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row,unsigned char (*s)[24])
00F6 ; {
00F6 .dbline 136
00F6 ; unsigned char i,n,(*p)[24];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -