📄 main.lis
字号:
00E6 ;
00E6 ; // Set output bits on port B,设置输出口;
00E6 ; DDRB |= LCD_RST_PIN | LCD_DC_PIN | LCD_CE_PIN | SPI_MOSI_PIN | SPI_CLK_PIN;
00E6 87B3 in R24,0x17
00E8 876A ori R24,167
00EA 87BB out 0x17,R24
00EC .dbline 143
00EC ;
00EC ; Delay();
00EC 4BD0 xcall _Delay
00EE .dbline 146
00EE ;
00EE ; // Toggle display reset pin.
00EE ; PORTB &= ~LCD_RST_PIN; //上电复位;
00EE C098 cbi 0x18,0
00F0 .dbline 147
00F0 ; Delay();
00F0 49D0 xcall _Delay
00F2 .dbline 148
00F2 ; PORTB |= LCD_RST_PIN; //复位完;
00F2 C09A sbi 0x18,0
00F4 .dbline 151
00F4 ;
00F4 ; // SPI初始化;Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4
00F4 ; SPCR = BIT(SPE)|BIT(MSTR); //使能SPI,主机模式;
00F4 80E5 ldi R24,80
00F6 8DB9 out 0xd,R24
00F8 .dbline 156
00F8 ; //SPSR = 0x00; //似乎不用这几句也能正常运行;
00F8 ; //Clear= SPSR;
00F8 ; //Clear= SPDR;
00F8 ; // Disable LCD controller
00F8 ; PORTB |= LCD_CE_PIN;
00F8 C19A sbi 0x18,1
00FA .dbline 158
00FA ;
00FA ; LcdSend( 0x21, 0 ); // LCD Extended Commands.
00FA 2227 clr R18
00FC 01E2 ldi R16,33
00FE 37D0 xcall _LcdSend
0100 .dbline 159
0100 ; LcdSend( 0xC8, 0 ); // Set LCD Vop (Contrast).
0100 2227 clr R18
0102 08EC ldi R16,200
0104 34D0 xcall _LcdSend
0106 .dbline 160
0106 ; LcdSend( 0x06, 0 ); // Set Temp coefficent.
0106 2227 clr R18
0108 06E0 ldi R16,6
010A 31D0 xcall _LcdSend
010C .dbline 161
010C ; LcdSend( 0x13, 0 ); // LCD bias mode 1:48.
010C 2227 clr R18
010E 03E1 ldi R16,19
0110 2ED0 xcall _LcdSend
0112 .dbline 162
0112 ; LcdSend( 0x20, 0 ); // LCD Standard Commands, Horizontal addressing mode.
0112 2227 clr R18
0114 00E2 ldi R16,32
0116 2BD0 xcall _LcdSend
0118 .dbline 163
0118 ; LcdSend( 0x0C, 0 ); // LCD in normal mode.
0118 2227 clr R18
011A 0CE0 ldi R16,12
011C 28D0 xcall _LcdSend
011E .dbline 165
011E ;
011E ; LcdClear();
011E 01D0 xcall _LcdClear
0120 .dbline -2
0120 L32:
0120 .dbline 0 ; func end
0120 0895 ret
0122 .dbend
0122 .dbfunc e LcdClear _LcdClear fV
0122 ; i -> R20,R21
.even
0122 _LcdClear::
0122 0E940000 xcall push_gset1
0126 .dbline -1
0126 .dbline 177
0126 ;
0126 ; }
0126 ;
0126 ;
0126 ; /*--------------------------------------------------------------------------------------------------
0126 ; Name : LcdClear
0126 ; Description : Clears the display.
0126 ; Argument(s) : None.
0126 ; Return value : None.
0126 ; --------------------------------------------------------------------------------------------------*/
0126 ; void LcdClear(void)
0126 ; {
0126 .dbline 180
0126 ; unsigned int i;
0126 ;
0126 ; LcdSend(0x0c, 0);
0126 2227 clr R18
0128 0CE0 ldi R16,12
012A 21D0 xcall _LcdSend
012C .dbline 181
012C ; LcdSend(0x80, 0); //此时默认操作为清屏
012C 2227 clr R18
012E 00E8 ldi R16,128
0130 1ED0 xcall _LcdSend
0132 .dbline 183
0132 ;
0132 ; for (i=0; i<504; i++)
0132 4427 clr R20
0134 5527 clr R21
0136 05C0 xjmp L37
0138 L34:
0138 .dbline 184
0138 21E0 ldi R18,1
013A 0027 clr R16
013C 18D0 xcall _LcdSend
013E L35:
013E .dbline 183
013E 4F5F subi R20,255 ; offset = 1
0140 5F4F sbci R21,255
0142 L37:
0142 .dbline 183
0142 483F cpi R20,248
0144 E1E0 ldi R30,1
0146 5E07 cpc R21,R30
0148 B8F3 brlo L34
014A .dbline -2
014A L33:
014A 0E940000 xcall pop_gset1
014E .dbline 0 ; func end
014E 0895 ret
0150 .dbsym r i 20 i
0150 .dbend
0150 .dbfunc e LcdGotoXY _LcdGotoXY fV
0150 ; Y -> R22
0150 ; X -> R20
.even
0150 _LcdGotoXY::
0150 0E940000 xcall push_gset2
0154 622F mov R22,R18
0156 402F mov R20,R16
0158 .dbline -1
0158 .dbline 196
0158 ; LcdSend(0, 1);
0158 ; }
0158 ;
0158 ;
0158 ;
0158 ; /*--------------------------------------------------------------------------------------------------
0158 ; Name : LcdGotoXY 设置块坐标
0158 ; Description : Sets cursor location to xy location corresponding to basic font size.
0158 ; Argument(s) : x, y -> Coordinate for new cursor position. Range: 1,1 .. 14,6
0158 ; Return value : None.
0158 ; --------------------------------------------------------------------------------------------------*/
0158 ; void LcdGotoXY(unsigned char X, unsigned char Y)
0158 ; {
0158 .dbline 197
0158 ; LcdSend(0x40 | Y, 0); // column
0158 2227 clr R18
015A 062F mov R16,R22
015C 0064 ori R16,64
015E 07D0 xcall _LcdSend
0160 .dbline 198
0160 ; LcdSend(0x80 | X, 0); // row
0160 2227 clr R18
0162 042F mov R16,R20
0164 0068 ori R16,128
0166 03D0 xcall _LcdSend
0168 .dbline -2
0168 L38:
0168 0E940000 xcall pop_gset2
016C .dbline 0 ; func end
016C 0895 ret
016E .dbsym r Y 22 c
016E .dbsym r X 20 c
016E .dbend
016E .dbfunc s LcdSend _LcdSend fV
016E ; command -> R18
016E ; data -> R16
.even
016E _LcdSend:
016E .dbline -1
016E .dbline 209
016E ; }
016E ;
016E ; /*--------------------------------------------------------------------------------------------------
016E ; Name : LcdSend
016E ; Description : Sends data to display controller.
016E ; Argument(s) : data -> Data to be sent
016E ; cd -> Command or data (see/use enum)
016E ; Return value : None.
016E ; --------------------------------------------------------------------------------------------------*/
016E ; static void LcdSend (unsigned char data, unsigned char command)
016E ; {
016E .dbline 210
016E ; PORTB &= ~LCD_CE_PIN ; // 使能LCD
016E C198 cbi 0x18,1
0170 .dbline 211
0170 ; if (command == 0)
0170 2223 tst R18
0172 11F4 brne L40
0174 .dbline 212
0174 ; PORTB &= ~LCD_DC_PIN ; // 传送命令
0174 C298 cbi 0x18,2
0176 01C0 xjmp L41
0178 L40:
0178 .dbline 214
0178 ; else
0178 ; PORTB |= LCD_DC_PIN ; // 传送数据
0178 C29A sbi 0x18,2
017A L41:
017A .dbline 216
017A ;
017A ; SPDR = data; // 传送数据到SPI寄存器
017A 0FB9 out 0xf,R16
017C L42:
017C .dbline 218
017C L43:
017C .dbline 218
017C ;
017C ; while ((SPSR & 0x80) == 0); // 等待数据传送完毕
017C 779B sbis 0xe,7
017E FECF rjmp L42
0180 .dbline 220
0180 ;
0180 ; PORTB |= LCD_CE_PIN ; // 关闭LCD
0180 C19A sbi 0x18,1
0182 .dbline -2
0182 L39:
0182 .dbline 0 ; func end
0182 0895 ret
0184 .dbsym r command 18 c
0184 .dbsym r data 16 c
0184 .dbend
0184 .dbfunc s Delay _Delay fV
0184 ; i -> R16,R17
.even
0184 _Delay:
0184 .dbline -1
0184 .dbline 229
0184 ; }
0184 ; /*--------------------------------------------------------------------------------------------------
0184 ; Name : Delay
0184 ; Description : Uncalibrated delay for LCD init routine.
0184 ; Argument(s) : None.
0184 ; Return value : None.
0184 ; --------------------------------------------------------------------------------------------------*/
0184 ; static void Delay ( void )
0184 ; {
0184 .dbline 231
0184 00E2 ldi R16,-12000
0186 11ED ldi R17,-47
0188 L46:
0188 .dbline 231
0188 L47:
0188 .dbline 231
0188 ; int i;
0188 ; for ( i = -12000; i < 12000; i++ );
0188 0F5F subi R16,255 ; offset = 1
018A 1F4F sbci R17,255
018C .dbline 231
018C 003E cpi R16,224
018E EEE2 ldi R30,46
0190 1E07 cpc R17,R30
0192 D4F3 brlt L46
0194 .dbline -2
0194 L45:
0194 .dbline 0 ; func end
0194 0895 ret
0196 .dbsym r i 16 I
0196 .dbend
0196 .dbfunc e lcd_show _lcd_show fV
0196 ; tmp -> R20
0196 ; i -> R22
0196 ; DOT -> R10,R11
0196 ; r -> R12,R13
.even
0196 _lcd_show::
0196 0E940000 xcall push_gset4
019A 5901 movw R10,R18
019C 6801 movw R12,R16
019E .dbline -1
019E .dbline 235
019E ; }
019E ;
019E ; void lcd_show(unsigned int r,unsigned int DOT)
019E ; {
019E .dbline 236
019E ; unsigned char tmp=0,i=0;
019E 4427 clr R20
01A0 .dbline 236
01A0 6627 clr R22
01A2 .dbline 237
01A2 ; if(r >1000)
01A2 88EE ldi R24,1000
01A4 93E0 ldi R25,3
01A6 8C15 cp R24,R12
01A8 9D05 cpc R25,R13
01AA C0F4 brsh L51
01AC .dbline 238
01AC ; {
01AC .dbline 239
01AC ; tmp=r/1000;
01AC 28EE ldi R18,1000
01AE 33E0 ldi R19,3
01B0 8601 movw R16,R12
01B2 0E940000 xcall div16u
01B6 402F mov R20,R16
01B8 .dbline 240
01B8 ; for(i=0;i<5;i++)
01B8 0FC0 xjmp L56
01BA L53:
01BA .dbline 241
01BA 21E0 ldi R18,1
01BC 85E0 ldi R24,5
01BE 849F mul R24,R20
01C0 1001 movw R2,R0
01C2 80E0 ldi R24,<_FontLookup
01C4 90E0 ldi R25,>_FontLookup
01C6 280E add R2,R24
01C8 391E adc R3,R25
01CA E62F mov R30,R22
01CC FF27 clr R31
01CE E20D add R30,R2
01D0 F31D adc R31,R3
01D2 0491 lpm R16,Z
01D4 CCDF xcall _LcdSend
01D6 L54:
01D6 .dbline 240
01D6 6395 inc R22
01D8 L56:
01D8 .dbline 240
01D8 6530 cpi R22,5
01DA 78F3 brlo L53
01DC .dbline 242
01DC ; LcdSend(FontLookup[tmp][i],1);
01DC ; }
01DC L51:
01DC .dbline 243
01DC ; if(r >100)
01DC 84E6 ldi R24,100
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -