📄 nokia_5110.lis
字号:
004A ; delay_1us();
004A DADF rcall _delay_1us
004C .dbline 49
004C ;
004C ; // LCD_RST = 1;
004C ; LCD_5110_PORT |= (0x01 << LCD_RST);
004C 949A sbi 0x12,4
004E .dbline 53
004E ;
004E ; // 关闭LCD
004E ; //LCD_CE = 0;
004E ; LCD_5110_PORT &= ~(0x01 << LCD_CE);
004E 9398 cbi 0x12,3
0050 .dbline 54
0050 ; delay_1us();
0050 D7DF rcall _delay_1us
0052 .dbline 57
0052 ; // 使能LCD
0052 ; //LCD_CE = 1;
0052 ; LCD_5110_PORT |= (0x01 << LCD_CE);
0052 939A sbi 0x12,3
0054 .dbline 58
0054 ; delay_1us();
0054 D5DF rcall _delay_1us
0056 .dbline 60
0056 ;
0056 ; LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
0056 2227 clr R18
0058 01E2 ldi R16,33
005A 8ED1 rcall _LCD_write_byte
005C .dbline 61
005C ; LCD_write_byte(0xc8, 0); // 设置偏置电压
005C 2227 clr R18
005E 08EC ldi R16,200
0060 8BD1 rcall _LCD_write_byte
0062 .dbline 62
0062 ; LCD_write_byte(0x06, 0); // 温度校正
0062 2227 clr R18
0064 06E0 ldi R16,6
0066 88D1 rcall _LCD_write_byte
0068 .dbline 63
0068 ; LCD_write_byte(0x13, 0); // 1:48
0068 2227 clr R18
006A 03E1 ldi R16,19
006C 85D1 rcall _LCD_write_byte
006E .dbline 64
006E ; LCD_write_byte(0x20, 0); // 使用基本命令
006E 2227 clr R18
0070 00E2 ldi R16,32
0072 82D1 rcall _LCD_write_byte
0074 .dbline 65
0074 ; LCD_clear(); // 清屏
0074 05D0 rcall _LCD_clear
0076 .dbline 66
0076 ; LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
0076 2227 clr R18
0078 0CE0 ldi R16,12
007A 7ED1 rcall _LCD_write_byte
007C .dbline 70
007C ;
007C ; // 关闭LCD
007C ; // LCD_CE = 0;
007C ; LCD_5110_PORT &= ~(0x01 << LCD_CE);
007C 9398 cbi 0x12,3
007E .dbline -2
007E .dbline 71
007E ; }
007E L16:
007E .dbline 0 ; func end
007E 0895 ret
0080 .dbend
0080 .dbfunc e LCD_clear _LCD_clear fV
0080 ; i -> R20,R21
.even
0080 _LCD_clear::
0080 00D0 rcall push_gset1
0082 .dbline -1
0082 .dbline 80
0082 ;
0082 ; /*-----------------------------------------------------------------------
0082 ; LCD_clear : LCD清屏函数
0082 ;
0082 ; 编写日期 :2004-8-10
0082 ; 最后修改日期 :2004-8-10
0082 ; -----------------------------------------------------------------------*/
0082 ; void LCD_clear(void)
0082 ; {
0082 .dbline 83
0082 ; unsigned int i;
0082 ;
0082 ; LCD_write_byte(0x0c, 0);
0082 2227 clr R18
0084 0CE0 ldi R16,12
0086 78D1 rcall _LCD_write_byte
0088 .dbline 84
0088 ; LCD_write_byte(0x80, 0);
0088 2227 clr R18
008A 00E8 ldi R16,128
008C 75D1 rcall _LCD_write_byte
008E .dbline 86
008E ;
008E ; for (i=0; i<504; i++)
008E 4427 clr R20
0090 5527 clr R21
0092 05C0 rjmp L21
0094 L18:
0094 .dbline 87
0094 21E0 ldi R18,1
0096 0027 clr R16
0098 6FD1 rcall _LCD_write_byte
009A L19:
009A .dbline 86
009A 4F5F subi R20,255 ; offset = 1
009C 5F4F sbci R21,255
009E L21:
009E .dbline 86
009E 483F cpi R20,248
00A0 E1E0 ldi R30,1
00A2 5E07 cpc R21,R30
00A4 B8F3 brlo L18
00A6 .dbline -2
00A6 .dbline 88
00A6 ; LCD_write_byte(0, 1);
00A6 ; }
00A6 L17:
00A6 00D0 rcall pop_gset1
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r i 20 i
00AA .dbend
00AA .dbfunc e LCD_set_XY _LCD_set_XY fV
00AA ; Y -> R22
00AA ; X -> R20
.even
00AA _LCD_set_XY::
00AA 00D0 rcall push_gset2
00AC 622F mov R22,R18
00AE 402F mov R20,R16
00B0 .dbline -1
00B0 .dbline 100
00B0 ;
00B0 ; /*-----------------------------------------------------------------------
00B0 ; LCD_set_XY : 设置LCD坐标函数
00B0 ;
00B0 ; 输入参数:X :0-83
00B0 ; Y :0-5
00B0 ;
00B0 ; 编写日期 :2004-8-10
00B0 ; 最后修改日期 :2004-8-10
00B0 ; -----------------------------------------------------------------------*/
00B0 ; void LCD_set_XY(unsigned char X, unsigned char Y)
00B0 ; {
00B0 .dbline 101
00B0 ; LCD_write_byte(0x40 | Y, 0); // column
00B0 2227 clr R18
00B2 062F mov R16,R22
00B4 0064 ori R16,64
00B6 60D1 rcall _LCD_write_byte
00B8 .dbline 102
00B8 ; LCD_write_byte(0x80 | X, 0); // row
00B8 2227 clr R18
00BA 042F mov R16,R20
00BC 0068 ori R16,128
00BE 5CD1 rcall _LCD_write_byte
00C0 .dbline -2
00C0 .dbline 103
00C0 ; }
00C0 L22:
00C0 00D0 rcall pop_gset2
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbsym r Y 22 c
00C4 .dbsym r X 20 c
00C4 .dbend
00C4 .dbfunc e LCD_write_char _LCD_write_char fV
00C4 ; line -> R20
00C4 ; c -> R22
.even
00C4 _LCD_write_char::
00C4 00D0 rcall push_gset2
00C6 602F mov R22,R16
00C8 .dbline -1
00C8 .dbline 114
00C8 ;
00C8 ; /*-----------------------------------------------------------------------
00C8 ; LCD_write_char : 显示英文字符
00C8 ;
00C8 ; 输入参数:c :显示的字符;
00C8 ;
00C8 ; 编写日期 :2004-8-10
00C8 ; 最后修改日期 :2004-8-10
00C8 ; -----------------------------------------------------------------------*/
00C8 ; void LCD_write_char(unsigned char c)
00C8 ; {
00C8 .dbline 117
00C8 ; unsigned char line;
00C8 ;
00C8 ; c -= 32;
00C8 6052 subi R22,32
00CA .dbline 119
00CA ;
00CA ; for (line=0; line<6; line++)
00CA 4427 clr R20
00CC 0FC0 rjmp L27
00CE L24:
00CE .dbline 120
00CE 21E0 ldi R18,1
00D0 86E0 ldi R24,6
00D2 869F mul R24,R22
00D4 1001 movw R2,R0
00D6 80E0 ldi R24,<_font6x8
00D8 90E0 ldi R25,>_font6x8
00DA 280E add R2,R24
00DC 391E adc R3,R25
00DE E42F mov R30,R20
00E0 FF27 clr R31
00E2 E20D add R30,R2
00E4 F31D adc R31,R3
00E6 0491 lpm R16,Z
00E8 47D1 rcall _LCD_write_byte
00EA L25:
00EA .dbline 119
00EA 4395 inc R20
00EC L27:
00EC .dbline 119
00EC 4630 cpi R20,6
00EE 78F3 brlo L24
00F0 .dbline -2
00F0 .dbline 121
00F0 ; LCD_write_byte(font6x8[c][line], 1);
00F0 ; }
00F0 L23:
00F0 00D0 rcall pop_gset2
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbsym r line 20 c
00F4 .dbsym r c 22 c
00F4 .dbend
00F4 .dbfunc e LCD_write_english_string _LCD_write_english_string fV
00F4 ; s -> R20,R21
00F4 ; Y -> R10
00F4 ; X -> R22
.even
00F4 _LCD_write_english_string::
00F4 00D0 rcall push_gset3
00F6 A22E mov R10,R18
00F8 602F mov R22,R16
00FA 4E81 ldd R20,y+6
00FC 5F81 ldd R21,y+7
00FE .dbline -1
00FE .dbline 133
00FE ;
00FE ; /*-----------------------------------------------------------------------
00FE ; LCD_write_english_String : 英文字符串显示函数
00FE ;
00FE ; 输入参数:*s :英文字符串指针;
00FE ; X、Y : 显示字符串的位置,x 0-83 ,y 0-5
00FE ;
00FE ; 编写日期 :2004-8-10
00FE ; 最后修改日期 :2004-8-10
00FE ; -----------------------------------------------------------------------*/
00FE ; void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
00FE ; {
00FE .dbline 134
00FE ; LCD_set_XY(X,Y);
00FE 2A2D mov R18,R10
0100 062F mov R16,R22
0102 D3DF rcall _LCD_set_XY
0104 05C0 rjmp L30
0106 L29:
0106 .dbline 136
0106 .dbline 137
0106 FA01 movw R30,R20
0108 0081 ldd R16,z+0
010A DCDF rcall _LCD_write_char
010C .dbline 138
010C 4F5F subi R20,255 ; offset = 1
010E 5F4F sbci R21,255
0110 .dbline 139
0110 L30:
0110 .dbline 135
0110 ; while (*s)
0110 FA01 movw R30,R20
0112 2080 ldd R2,z+0
0114 2220 tst R2
0116 B9F7 brne L29
0118 .dbline -2
0118 .dbline 140
0118 ; {
0118 ; LCD_write_char(*s);
0118 ; s++;
0118 ; }
0118 ; }
0118 L28:
0118 00D0 rcall pop_gset3
011A .dbline 0 ; func end
011A 0895 ret
011C .dbsym r s 20 pc
011C .dbsym r Y 10 c
011C .dbsym r X 22 c
011C .dbend
011C .dbfunc e LCD_write_chinese_string _LCD_write_chinese_string fV
011C ; i -> R20
011C ; n -> R14
011C ; row -> R10
011C ; line -> R12
011C ; num -> R22
011C ; ch_with -> y+14
011C ; Y -> y+12
011C ; X -> y+10
.even
011C _LCD_write_chinese_string::
011C 00D0 rcall push_arg4
011E 00D0 rcall push_gset5
0120 6889 ldd R22,y+16
0122 CA88 ldd R12,y+18
0124 AC88 ldd R10,y+20
0126 .dbline -1
0126 .dbline 159
0126 ; /*-----------------------------------------------------------------------
0126 ; LCD_write_chinese_string: 在LCD上显示汉字
0126 ;
0126 ; 输入参数:X、Y :显示汉字的起始X、Y坐标;
0126 ; ch_with :汉字点阵的宽度
0126 ; num :显示汉字的个数;
0126 ; line :汉字点阵数组中的起始行数
0126 ; row :汉字显示的行间距
0126 ; 编写日期 :2004-8-11
0126 ; 最后修改日期 :2004-8-12
0126 ; 测试:
0126 ; LCD_write_chi(0,0,12,7,0,0);
0126 ; LCD_write_chi(0,2,12,7,0,0);
0126 ; LCD_write_chi(0,4,12,7,0,0);
0126 ; -----------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -