📄 jifeng_jieshou.lis
字号:
014C _LCD_Delay::
014C 00D0 rcall push_gset1
014E .dbline -1
014E .dbline 311
014E ; }
014E ; //******************************************************************************
014E ; //以下为LCD驱动
014E ; //******************************************************************************
014E ; //------------------------------------------------------------------------------
014E ; void LCD_Delay(uint time)
014E ; {
014E .dbline 313
014E 402F mov R20,R16
0150 512F mov R21,R17
0152 02C0 rjmp L48
0154 L45:
0154 .dbline 313
0154 L46:
0154 .dbline 313
0154 4150 subi R20,1
0156 5040 sbci R21,0
0158 L48:
0158 .dbline 313
0158 ; uint i;
0158 ; for(i=time;i>0;i--);
0158 4030 cpi R20,0
015A 4507 cpc R20,R21
015C D9F7 brne L45
015E X1:
015E .dbline -2
015E L44:
015E 00D0 rcall pop_gset1
0160 .dbline 0 ; func end
0160 0895 ret
0162 .dbsym r i 20 i
0162 .dbsym r time 16 i
0162 .dbend
0162 .dbfunc e Lcd_init _Lcd_init fV
.even
0162 _Lcd_init::
0162 .dbline -1
0162 .dbline 317
0162 ; }
0162 ; //---------------------------LCD初始化---------------------------------------
0162 ; void Lcd_init(void)
0162 ; {
0162 .dbline 318
0162 ; DDRC=0xF8;
0162 88EF ldi R24,248
0164 84BB out 0x14,R24
0166 .dbline 320
0166 ; //ASSR &= ~(1 <<AS2);
0166 ; Hign_LCD_CS;
0166 AF9A sbi 0x15,7
0168 .dbline 320
0168 .dbline 321
0168 ; Low_LCD_RESET; //硬复位
0168 AE98 cbi 0x15,6
016A .dbline 321
016A .dbline 322
016A ; LCD_Delay(50);
016A 02E3 ldi R16,50
016C 10E0 ldi R17,0
016E EEDF rcall _LCD_Delay
0170 .dbline 323
0170 ; Hign_LCD_RESET;
0170 AE9A sbi 0x15,6
0172 .dbline 323
0172 .dbline 325
0172 ; ////////////////////////////////////////////////////////
0172 ; Lcd_Write_command(0xe2); //软复位RESet:initialize the internal functions
0172 02EE ldi R16,226
0174 4AD0 rcall _Lcd_Write_command
0176 .dbline 326
0176 ; LCD_Delay(100);
0176 04E6 ldi R16,100
0178 10E0 ldi R17,0
017A E8DF rcall _LCD_Delay
017C .dbline 327
017C ; Lcd_Write_command(0xae); //DISPLAY OFF
017C 0EEA ldi R16,174
017E 45D0 rcall _Lcd_Write_command
0180 .dbline 328
0180 ; Lcd_Write_command(0xa1); //ADC SELECT ON
0180 01EA ldi R16,161
0182 43D0 rcall _Lcd_Write_command
0184 .dbline 329
0184 ; Lcd_Write_command(0xc0); //SHL SELECT COM64-COM1
0184 00EC ldi R16,192
0186 41D0 rcall _Lcd_Write_command
0188 .dbline 330
0188 ; Lcd_Write_command(0xa2); //SET LCD BIAS(1/9)
0188 02EA ldi R16,162
018A 3FD0 rcall _Lcd_Write_command
018C .dbline 332
018C ; //////////////////////////////////////////////////////
018C ; Lcd_Write_command(0x2c);//SET POWER CONTROL(VC=1)
018C 0CE2 ldi R16,44
018E 3DD0 rcall _Lcd_Write_command
0190 .dbline 333
0190 ; Lcd_Write_command(0x2e); //SET POWER CONTROL(VR=1)
0190 0EE2 ldi R16,46
0192 3BD0 rcall _Lcd_Write_command
0194 .dbline 334
0194 ; Lcd_Write_command(0x2f); //SET POWER CONTROL(VF=1)
0194 0FE2 ldi R16,47
0196 39D0 rcall _Lcd_Write_command
0198 .dbline 336
0198 ; ////////////////////////////////////////////////////////
0198 ; Lcd_Write_command(0x26); //REGULATOR RESISTOR SELECT(R2 R1 R0)=110
0198 06E2 ldi R16,38
019A 37D0 rcall _Lcd_Write_command
019C .dbline 337
019C ; Lcd_Write_command(0x81); //SET REFERENCE VOLTAGE MODE
019C 01E8 ldi R16,129
019E 35D0 rcall _Lcd_Write_command
01A0 .dbline 338
01A0 ; Lcd_Write_command(0x3f); //SET REFERENCE VOLTAGE REGISTER 2ch
01A0 0FE3 ldi R16,63
01A2 33D0 rcall _Lcd_Write_command
01A4 .dbline 340
01A4 ; //////////////////////////////////////////////////////
01A4 ; Lcd_Write_command(0x7f); //START DISPLAY LINE(COM1) 起始行
01A4 0FE7 ldi R16,127
01A6 31D0 rcall _Lcd_Write_command
01A8 .dbline 342
01A8 ; //////////////////////////////////////////////////////
01A8 ; Lcd_Write_command(0xe0); //写入数据时地址自动加1,读数据时不变
01A8 00EE ldi R16,224
01AA 2FD0 rcall _Lcd_Write_command
01AC .dbline 344
01AC ; //////////////////////////////////////////////////////////
01AC ; Lcd_Write_command(0xaf); //DISPLAY ON
01AC 0FEA ldi R16,175
01AE 2DD0 rcall _Lcd_Write_command
01B0 .dbline -2
01B0 L49:
01B0 .dbline 0 ; func end
01B0 0895 ret
01B2 .dbend
01B2 .dbfunc e Lcd_Write_Data _Lcd_Write_Data fV
01B2 ; i -> R20,R21
01B2 ; temp -> R22,R23
01B2 ; DATA -> R20
.even
01B2 _Lcd_Write_Data::
01B2 00D0 rcall push_gset2
01B4 402F mov R20,R16
01B6 .dbline -1
01B6 .dbline 348
01B6 ; }
01B6 ; //--------------------------------LCD写数据函数---------------------------------
01B6 ; void Lcd_Write_Data(uchar DATA) //写一个字节,再加一列,正好在一页
01B6 ; { //定好一页后,再一列一列的写
01B6 .dbline 350
01B6 ; int i,temp;
01B6 ; temp=DATA;
01B6 642F mov R22,R20
01B8 7727 clr R23
01BA .dbline 351
01BA ; Low_LCD_RS;
01BA AD98 cbi 0x15,5
01BC .dbline 351
01BC .dbline 352
01BC ; Hign_LCD_CS;
01BC AF9A sbi 0x15,7
01BE .dbline 352
01BE .dbline 353
01BE ; Hign_LCD_SCL;
01BE AC9A sbi 0x15,4
01C0 .dbline 353
01C0 .dbline 354
01C0 ; LCD_Delay(1);
01C0 01E0 ldi R16,1
01C2 10E0 ldi R17,0
01C4 C3DF rcall _LCD_Delay
01C6 .dbline 355
01C6 ; Low_LCD_CS;
01C6 AF98 cbi 0x15,7
01C8 .dbline 355
01C8 .dbline 356
01C8 ; Low_LCD_SCL;
01C8 AC98 cbi 0x15,4
01CA .dbline 356
01CA .dbline 357
01CA ; Hign_LCD_RS; //RS=1 时为写数据
01CA AD9A sbi 0x15,5
01CC .dbline 357
01CC .dbline 358
01CC ; LCD_Delay(1);
01CC 01E0 ldi R16,1
01CE 10E0 ldi R17,0
01D0 BDDF rcall _LCD_Delay
01D2 .dbline 359
01D2 ; for(i=0;i<8;i++)
01D2 4427 clr R20
01D4 5527 clr R21
01D6 L51:
01D6 .dbline 360
01D6 ; {
01D6 .dbline 361
01D6 ; Low_LCD_SCL;
01D6 AC98 cbi 0x15,4
01D8 .dbline 361
01D8 .dbline 362
01D8 ; if(temp&0x80)
01D8 67FF sbrs R22,7
01DA 02C0 rjmp L55
01DC .dbline 363
01DC ; {
01DC .dbline 364
01DC ; Hign_LCD_SI;
01DC AB9A sbi 0x15,3
01DE .dbline 364
01DE .dbline 365
01DE ; }
01DE 01C0 rjmp L56
01E0 L55:
01E0 .dbline 367
01E0 ; else
01E0 ; {
01E0 .dbline 368
01E0 ; Low_LCD_SI;
01E0 AB98 cbi 0x15,3
01E2 .dbline 368
01E2 .dbline 369
01E2 ; }
01E2 L56:
01E2 .dbline 370
01E2 01E0 ldi R16,1
01E4 10E0 ldi R17,0
01E6 B2DF rcall _LCD_Delay
01E8 .dbline 371
01E8 660F lsl R22
01EA 771F rol R23
01EC .dbline 372
01EC AC9A sbi 0x15,4
01EE .dbline 372
01EE .dbline 373
01EE 01E0 ldi R16,1
01F0 10E0 ldi R17,0
01F2 ACDF rcall _LCD_Delay
01F4 .dbline 374
01F4 AC98 cbi 0x15,4
01F6 .dbline 374
01F6 .dbline 375
01F6 L52:
01F6 .dbline 359
01F6 4F5F subi R20,255 ; offset = 1
01F8 5F4F sbci R21,255
01FA .dbline 359
01FA 4830 cpi R20,8
01FC E0E0 ldi R30,0
01FE 5E07 cpc R21,R30
0200 54F3 brlt L51
0202 .dbline 376
0202 ; LCD_Delay(1);
0202 ; temp=temp<<1;
0202 ; Hign_LCD_SCL;
0202 ; LCD_Delay(1);
0202 ; Low_LCD_SCL;
0202 ; }
0202 ; Low_LCD_RS;
0202 AD98 cbi 0x15,5
0204 .dbline 376
0204 .dbline 377
0204 ; Hign_LCD_CS; //先cs置0,然后把数据都送到口上准备好(产生上升沿),最后才置片选cs为1
0204 AF9A sbi 0x15,7
0206 .dbline 377
0206 .dbline -2
0206 L50:
0206 00D0 rcall pop_gset2
0208 .dbline 0 ; func end
0208 0895 ret
020A .dbsym r i 20 I
020A .dbsym r temp 22 I
020A .dbsym r DATA 20 c
020A .dbend
020A .dbfunc e Lcd_Write_command _Lcd_Write_command fV
020
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -