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

📄 7920_16.lis

📁 avr驱动显示屏LCD12864R(7920)
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0144 02E0              ldi R16,2
 0146 10E0              ldi R17,0
 0148 71D0              xcall _Delay
 014A                   .dbline 94
 014A           ;       cmd=0x80;                               //设置DDRAM地址
 014A 40E8              ldi R20,128
 014C                   .dbline 95
 014C           ;       W_1byte(0,0,cmd);                       //写指令
 014C 4883              std y+0,R20
 014E 2227              clr R18
 0150 0027              clr R16
 0152 07D0              xcall _W_1byte
 0154                   .dbline 96
 0154           ;       Delay(2);                               //延时
 0154 02E0              ldi R16,2
 0156 10E0              ldi R17,0
 0158 69D0              xcall _Delay
 015A                   .dbline -2
 015A           L25:
 015A 2196              adiw R28,1
 015C 0E940000          xcall pop_gset1
 0160                   .dbline 0 ; func end
 0160 0895              ret
 0162                   .dbsym r cmd 20 c
 0162                   .dbend
 0162                   .dbfunc e W_1byte _W_1byte fV
 0162           ;         H_data -> R22,R23
 0162           ;           S_ID -> R10,R11
 0162           ;         L_data -> R20,R21
 0162           ;         W_data -> y+6
 0162           ;             RS -> R20
 0162           ;             RW -> R22
                        .even
 0162           _W_1byte::
 0162 0E940000          xcall push_gset3
 0166 422F              mov R20,R18
 0168 602F              mov R22,R16
 016A                   .dbline -1
 016A                   .dbline 109
 016A           ; }
 016A           ; /*******************************************************************
 016A           ; 函 数 名:W_1byte
 016A           ; 入口参数:RW、RS、W_data
 016A           ; 函数作用:写一个字节的数据到12864液晶,包括指令和数据
 016A           ; 说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
 016A           ;        (一般RW都设为0,即只向液晶写数据,不读数据)
 016A           ;           RS=1,写入的是数据;RS=0,写入的是指令;
 016A           ;        一般模式:RW=0,RS=1;写数据
 016A           ;                RW=0,RS=0;写指令
 016A           ; ********************************************************************/
 016A           ; void W_1byte(uchar RW, uchar RS, uchar W_data)
 016A           ; {
 016A                   .dbline 110
 016A           ;       uint H_data,L_data,S_ID = 0xf8;         //11111RWRS0
 016A 88EF              ldi R24,248
 016C 90E0              ldi R25,0
 016E 5C01              movw R10,R24
 0170                   .dbline 111
 0170           ;       if(RW == 0)
 0170 6623              tst R22
 0172 19F4              brne L27
 0174                   .dbline 112
 0174           ;       {
 0174                   .dbline 113
 0174           ;               S_ID &=~ 0x04;
 0174 8B7F              andi R24,251
 0176 5C01              movw R10,R24
 0178                   .dbline 114
 0178           ;       }
 0178 03C0              xjmp L28
 017A           L27:
 017A                   .dbline 116
 017A           ;       else     //if(RW==1)
 017A           ;       {
 017A                   .dbline 117
 017A           ;               S_ID |= 0X04;
 017A C501              movw R24,R10
 017C 8460              ori R24,4
 017E 5C01              movw R10,R24
 0180                   .dbline 118
 0180           ;       }
 0180           L28:
 0180                   .dbline 119
 0180           ;       if(RS == 0)
 0180 4423              tst R20
 0182 21F4              brne L29
 0184                   .dbline 120
 0184           ;       {
 0184                   .dbline 121
 0184           ;               S_ID &=~ 0x02;
 0184 C501              movw R24,R10
 0186 8D7F              andi R24,253
 0188 5C01              movw R10,R24
 018A                   .dbline 122
 018A           ;       }
 018A 03C0              xjmp L30
 018C           L29:
 018C                   .dbline 124
 018C           ;       else     //if(RS==1)
 018C           ;       {
 018C                   .dbline 125
 018C           ;               S_ID |= 0X02;
 018C C501              movw R24,R10
 018E 8260              ori R24,2
 0190 5C01              movw R10,R24
 0192                   .dbline 126
 0192           ;       }
 0192           L30:
 0192                   .dbline 127
 0192           ;       H_data = W_data;
 0192 6E81              ldd R22,y+6
 0194 7727              clr R23
 0196                   .dbline 128
 0196           ;       H_data &= 0xf0;                         //屏蔽低4位的数据
 0196 607F              andi R22,240
 0198 7070              andi R23,0
 019A                   .dbline 129
 019A           ;       L_data = W_data;                        //xxxx0000格式
 019A 4E81              ldd R20,y+6
 019C 5527              clr R21
 019E                   .dbline 130
 019E           ;       L_data &= 0x0f;                         //屏蔽高4位的数据
 019E 4F70              andi R20,15
 01A0 5070              andi R21,0
 01A2                   .dbline 131
 01A2           ;       L_data <<= 4;                           //xxxx0000格式
 01A2 440F              lsl R20
 01A4 551F              rol R21
 01A6 440F              lsl R20
 01A8 551F              rol R21
 01AA 440F              lsl R20
 01AC 551F              rol R21
 01AE 440F              lsl R20
 01B0 551F              rol R21
 01B2                   .dbline 132
 01B2           ;       Set_CS();
 01B2 B89A              sbi 0x17,0
 01B4                   .dbline 132
 01B4 C09A              sbi 0x18,0
 01B6                   .dbline 133
 01B6           ;       Write_8bits(S_ID);                      //发送S_ID
 01B6 8501              movw R16,R10
 01B8 09D0              xcall _Write_8bits
 01BA                   .dbline 134
 01BA           ;       Write_8bits(H_data);                    //发送H_data
 01BA 8B01              movw R16,R22
 01BC 07D0              xcall _Write_8bits
 01BE                   .dbline 135
 01BE           ;       Write_8bits(L_data);                    //发送L_data
 01BE 8A01              movw R16,R20
 01C0 05D0              xcall _Write_8bits
 01C2                   .dbline 136
 01C2           ;       Clr_CS(); 
 01C2 B89A              sbi 0x17,0
 01C4                   .dbline 136
 01C4 C098              cbi 0x18,0
 01C6                   .dbline -2
 01C6           L26:
 01C6 0E940000          xcall pop_gset3
 01CA                   .dbline 0 ; func end
 01CA 0895              ret
 01CC                   .dbsym r H_data 22 i
 01CC                   .dbsym r S_ID 10 i
 01CC                   .dbsym r L_data 20 i
 01CC                   .dbsym l W_data 6 c
 01CC                   .dbsym r RS 20 c
 01CC                   .dbsym r RW 22 c
 01CC                   .dbend
 01CC                   .dbfunc e Write_8bits _Write_8bits fV
 01CC           ;      Temp_data -> R20,R21
 01CC           ;              i -> R22,R23
 01CC           ;         W_bits -> R10,R11
                        .even
 01CC           _Write_8bits::
 01CC 0E940000          xcall push_gset3
 01D0 5801              movw R10,R16
 01D2                   .dbline -1
 01D2                   .dbline 144
 01D2           ; }
 01D2           ; /********************************************************************
 01D2           ; 函 数 名:Write_8bits
 01D2           ; 入口参数:W_bits
 01D2           ; 函数作用:负责串行输出8个bit位
 01D2           ; ********************************************************************/
 01D2           ; void Write_8bits(uint W_bits)
 01D2           ; {
 01D2                   .dbline 146
 01D2           ;       uint i,Temp_data;
 01D2           ;       for(i=0; i<8; i++)
 01D2 6627              clr R22
 01D4 7727              clr R23
 01D6 23C0              xjmp L35
 01D8           L32:
 01D8                   .dbline 147
 01D8           ;       {
 01D8                   .dbline 148
 01D8           ;               Temp_data = W_bits;
 01D8 A501              movw R20,R10
 01DA                   .dbline 149
 01DA           ;               Temp_data <<= i;
 01DA 9B01              movw R18,R22
 01DC 8A01              movw R16,R20
 01DE 0E940000          xcall lsl16
 01E2 A801              movw R20,R16
 01E4                   .dbline 150
 01E4           ;               if((Temp_data&0x80)==0)  //bit7 is zero
 01E4 07FD              sbrc R16,7
 01E6 0DC0              rjmp L36
 01E8                   .dbline 151
 01E8           ;               {
 01E8                   .dbline 152
 01E8           ;                       Clr_SID();
 01E8 B99A              sbi 0x17,1
 01EA                   .dbline 152
 01EA C198              cbi 0x18,1
 01EC                   .dbline 153
 01EC           ;                       nop();
 01EC 0000              nop
 01EE                   .dbline 154
 01EE           ;                       Set_SCLK();
 01EE BA9A              sbi 0x17,2
 01F0                   .dbline 154
 01F0 C29A              sbi 0x18,2
 01F2                   .dbline 155
 01F2           ;                       nop();
 01F2 0000              nop
 01F4                   .dbline 156
 01F4           ;                       nop();
 01F4 0000              nop
 01F6                   .dbline 157
 01F6           ;                       Clr_SCLK();
 01F6 BA9A              sbi 0x17,2
 01F8                   .dbline 157
 01F8 C298              cbi 0x18,2
 01FA                   .dbline 158
 01FA           ;                       nop();
 01FA 0000              nop
 01FC                   .dbline 159
 01FC           ;                       Clr_SID();
 01FC B99A              sbi 0x17,1
 01FE                   .dbline 159
 01FE C198              cbi 0x18,1
 0200                   .dbline 160
 0200           ;               }
 0200 0CC0              xjmp L37
 0202           L36:
 0202                   .dbline 162
 0202           ;               else         //bit7 is one
 0202           ;               {
 0202                   .dbline 163
 0202           ;                       Set_SID();
 0202 B99A              sbi 0x17,1
 0204                   .dbline 163
 0204 C19A              sbi 0x18,1
 0206                   .dbline 164
 0206           ;                       nop();
 0206 0000              nop
 0208                   .dbline 165
 0208           ;                       Set_SCLK();
 0208 BA9A              sbi 0x17,2
 020A                   .dbline 165
 020A C29A              sbi 0x18,2
 020C                   .dbline 166
 020C           ;                       nop();
 020C 0000              nop
 020E                   .dbline 167
 020E           ;                       nop();
 020E 0000              nop
 0210                   .dbline 168
 0210           ;                       Clr_SCLK();
 0210 BA9A              sbi 0x17,2
 0212                   .dbline 168
 0212 C298              cbi 0x18,2
 0214                   .dbline 169
 0214           ;                       nop();
 0214 0000              nop
 0216                   .dbline 170
 0216           ;                       Clr_SID();
 0216 B99A              sbi 0x17,1
 0218                   .dbline 170
 0218 C198              cbi 0x18,1
 021A                   .dbline 171
 021A           ;               } 
 021A           L37:
 021A                   .dbline 172
 021A           L33:
 021A                   .dbline 146
 021A 6F5F              subi R22,255  ; offset = 1
 021C 7F4F              sbci R23,255
 021E           L35:
 021E                   .dbline 146
 021E 6830              cpi R22,8
 0220 E0E0              ldi R30,0
 0222 7E07              cpc R23,R30
 0224 C8F2              brlo L32
 0226                   .dbline -2
 0226           L31:
 0226 0E940000          xcall pop_gset3
 022A                   .dbline 0 ; func end
 022A 0895              ret
 022C                   .dbsym r Temp_data 20 i
 022C                   .dbsym r i 22 i
 022C                   .dbsym r W_bits 10 i
 022C                   .dbend
 022C                   .dbfunc e Delay _Delay fV
 022C           ;              i -> R20,R21
 022C           ;             ms -> R16,R17
                        .even
 022C           _Delay::
 022C 0E940000          xcall push_gset1
 0230                   .dbline -1
 0230                   .dbline 180
 0230           ;       }
 0230           ; }
 0230           ; /********************************************************************
 0230           ; 函 数 名:Delay
 0230           ; 入口参数:ms
 0230           ; 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
 0230           ; ********************************************************************/
 0230           ; void Delay(uint ms) 
 0230           ; { 
 0230 09C0              xjmp L40
 0232           L39:
 0232                   .dbline 183
 0232           ;       uint i; 
 0232           ;       while(ms--)    
 0232           ;       { 
 0232                   .dbline 184
 0232           ;               for(i=1;i<(uint)(xtal*143-2);i++) 
 0232 41E0              ldi R20,1
 0234 50E0              ldi R21,0
 0236 02C0              xjmp L45
 0238           L42:
 0238                   .dbline 185
 0238           L43:
 0238                   .dbline 184
 0238 4F5F              subi R20,255  ; offset = 1
 023A 5F4F              sbci R21,255
 023C           L45:
 023C                   .dbline 184
 023C 4637              cpi R20,118
 023E E4E0              ldi R30,4
 0240 5E07              cpc R21,R30
 0242 D0F3              brlo L42
 0244                   .dbline 186
 0244           L40:
 0244                   .dbline 182
 0244 1801              movw R2,R16
 0246 0150              subi R16,1
 0248 1040              sbci R17,0
 024A 2220              tst R2
 024C 91F7              brne L39
 024E 3320              tst R3
 0250 81F7              brne L39
 0252           X1:
 0252                   .dbline -2
 0252           L38:
 0252 0E940000          xcall pop_gset1
 0256                   .dbline 0 ; func end
 0256 0895              ret
 0258                   .dbsym r i 20 i
 0258                   .dbsym r ms 16 i
 0258                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -