⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jifeng_jieshou.lis

📁 Mega16单片机与nRF-905芯片之间的通信程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -