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

📄 240128.lis

📁 用ATmega88驱动LCD240128
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00EC 2882              std y+0,R2
 00EE 2227              clr R18
 00F0 02E4              ldi R16,66
 00F2 E1DF              rcall _LCD_WR_CODE2
 00F4                   .dbline 124
 00F4           ;     LCD_WR_CODE2(LCD_GRH_WID,30,0);
 00F4 2224              clr R2
 00F6 2882              std y+0,R2
 00F8 2EE1              ldi R18,30
 00FA 03E4              ldi R16,67
 00FC DCDF              rcall _LCD_WR_CODE2
 00FE                   .dbline -2
 00FE           L26:
 00FE 2196              adiw R28,1
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbend
 0102                   .dbfunc e LCD_CLEAR _LCD_CLEAR fV
 0102           ;              i -> R20
 0102           ;              j -> R10
 0102           ;           data -> R22
                        .even
 0102           _LCD_CLEAR::
 0102 00D0              rcall push_gset3
 0104 602F              mov R22,R16
 0106 2197              sbiw R28,1
 0108                   .dbline -1
 0108                   .dbline 130
 0108           ; }
 0108           ; /*******************************************************************************
 0108           ;  清整屏 
 0108           ; *******************************************************************************/
 0108           ; void LCD_CLEAR(unsigned char data)
 0108           ; {
 0108                   .dbline 132
 0108           ;     unsigned char i,j;
 0108           ;     LCD_WR_CODE(0x98);                  //打开图形显示
 0108 08E9              ldi R16,152
 010A C1DF              rcall _LCD_WR_CODE
 010C                   .dbline 133
 010C           ;     LCD_WR_CODE2(LCD_ADD_POS,0,0);
 010C 2224              clr R2
 010E 2882              std y+0,R2
 0110 2227              clr R18
 0112 04E2              ldi R16,36
 0114 D0DF              rcall _LCD_WR_CODE2
 0116                   .dbline 134
 0116           ;     LCD_WR_CODE(LCD_AUT_WR);
 0116 00EB              ldi R16,176
 0118 BADF              rcall _LCD_WR_CODE
 011A                   .dbline 135
 011A           ;     for(i=0;i<128;i++)
 011A 4427              clr R20
 011C 09C0              rjmp L31
 011E           L28:
 011E                   .dbline 136
 011E           ;     {
 011E                   .dbline 137
 011E           ;         for(j=0;j<30;j++)
 011E AA24              clr R10
 0120 03C0              rjmp L35
 0122           L32:
 0122                   .dbline 138
 0122                   .dbline 139
 0122 062F              mov R16,R22
 0124 A9DF              rcall _LCD_WR_DATA
 0126                   .dbline 140
 0126           L33:
 0126                   .dbline 137
 0126 A394              inc R10
 0128           L35:
 0128                   .dbline 137
 0128 8A2D              mov R24,R10
 012A 8E31              cpi R24,30
 012C D0F3              brlo L32
 012E                   .dbline 141
 012E           L29:
 012E                   .dbline 135
 012E 4395              inc R20
 0130           L31:
 0130                   .dbline 135
 0130 4038              cpi R20,128
 0132 A8F3              brlo L28
 0134                   .dbline 142
 0134           ;         {
 0134           ;             LCD_WR_DATA(data);
 0134           ;         }
 0134           ;     }                               
 0134           ;     LCD_WR_CODE(LCD_AUT_OVR);
 0134 02EB              ldi R16,178
 0136 ABDF              rcall _LCD_WR_CODE
 0138                   .dbline -2
 0138           L27:
 0138 2196              adiw R28,1
 013A 00D0              rcall pop_gset3
 013C                   .dbline 0 ; func end
 013C 0895              ret
 013E                   .dbsym r i 20 c
 013E                   .dbsym r j 10 c
 013E                   .dbsym r data 22 c
 013E                   .dbend
 013E                   .dbfunc e PRINT_240128 _PRINT_240128 fV
 013E           ;              i -> R20
 013E           ;              j -> R10
 013E           ;            str -> R22,R23
                        .even
 013E           _PRINT_240128::
 013E 00D0              rcall push_gset3
 0140 B801              movw R22,R16
 0142 2197              sbiw R28,1
 0144                   .dbline -1
 0144                   .dbline 148
 0144           ; }
 0144           ; /*******************************************************************************
 0144           ;  显示一个240*128的图片 图片的大小为3840 。
 0144           ; *******************************************************************************/
 0144           ; void PRINT_240128(const unsigned char *str)
 0144           ; {
 0144                   .dbline 150
 0144           ;     unsigned char i,j;
 0144           ;     LCD_WR_CODE(0x98);
 0144 08E9              ldi R16,152
 0146 A3DF              rcall _LCD_WR_CODE
 0148                   .dbline 151
 0148           ;     LCD_WR_CODE2(LCD_ADD_POS,0,0);
 0148 2224              clr R2
 014A 2882              std y+0,R2
 014C 2227              clr R18
 014E 04E2              ldi R16,36
 0150 B2DF              rcall _LCD_WR_CODE2
 0152                   .dbline 152
 0152           ;     LCD_WR_CODE(LCD_AUT_WR);
 0152 00EB              ldi R16,176
 0154 9CDF              rcall _LCD_WR_CODE
 0156                   .dbline 153
 0156           ;     for(i=0;i<128;i++)
 0156 4427              clr R20
 0158 0DC0              rjmp L40
 015A           L37:
 015A                   .dbline 154
 015A           ;     {
 015A                   .dbline 155
 015A           ;         for(j=0;j<30;j++)
 015A AA24              clr R10
 015C 07C0              rjmp L44
 015E           L41:
 015E                   .dbline 156
 015E                   .dbline 157
 015E 1B01              movw R2,R22
 0160 6F5F              subi R22,255  ; offset = 1
 0162 7F4F              sbci R23,255
 0164 F101              movw R30,R2
 0166 0491              lpm R16,Z
 0168 87DF              rcall _LCD_WR_DATA
 016A                   .dbline 158
 016A           L42:
 016A                   .dbline 155
 016A A394              inc R10
 016C           L44:
 016C                   .dbline 155
 016C 8A2D              mov R24,R10
 016E 8E31              cpi R24,30
 0170 B0F3              brlo L41
 0172                   .dbline 159
 0172           L38:
 0172                   .dbline 153
 0172 4395              inc R20
 0174           L40:
 0174                   .dbline 153
 0174 4038              cpi R20,128
 0176 88F3              brlo L37
 0178                   .dbline 160
 0178           ;         {
 0178           ;             LCD_WR_DATA(*str++);
 0178           ;         }
 0178           ;     }
 0178           ;     LCD_WR_CODE(LCD_AUT_OVR);
 0178 02EB              ldi R16,178
 017A 89DF              rcall _LCD_WR_CODE
 017C                   .dbline -2
 017C           L36:
 017C 2196              adiw R28,1
 017E 00D0              rcall pop_gset3
 0180                   .dbline 0 ; func end
 0180 0895              ret
 0182                   .dbsym r i 20 c
 0182                   .dbsym r j 10 c
 0182                   .dbsym r str 22 pkc
 0182                   .dbend
 0182                   .dbfunc e LCD_SET_ADD _LCD_SET_ADD fV
 0182           ;           ucol -> R20
 0182           ;           urow -> R22
                        .even
 0182           _LCD_SET_ADD::
 0182 00D0              rcall push_gset2
 0184 422F              mov R20,R18
 0186 602F              mov R22,R16
 0188 2197              sbiw R28,1
 018A                   .dbline -1
 018A                   .dbline 166
 018A           ; }
 018A           ; /*******************************************************************************
 018A           ;  设置当前地址,用于起点定位。
 018A           ; *******************************************************************************/
 018A           ; void LCD_SET_ADD(unsigned char urow, unsigned char ucol)
 018A           ; {
 018A                   .dbline 167
 018A           ;     LCD_WR_CODE2(LCD_ADD_POS,(urow*30+ucol) & 0xFF,(urow*30+ucol) / 256);
 018A 8EE1              ldi R24,30
 018C 869F              mul R24,R22
 018E 1001              movw R2,R0
 0190 442E              mov R4,R20
 0192 5524              clr R5
 0194 240C              add R2,R4
 0196 351C              adc R3,R5
 0198 20E0              ldi R18,256
 019A 31E0              ldi R19,1
 019C 8101              movw R16,R2
 019E 00D0              rcall div16s
 01A0 0883              std y+0,R16
 01A2 222D              mov R18,R2
 01A4 3070              andi R19,0
 01A6 04E2              ldi R16,36
 01A8 86DF              rcall _LCD_WR_CODE2
 01AA                   .dbline 168
 01AA           ;     gCurRow = urow;
 01AA 60930100          sts _gCurRow,R22
 01AE                   .dbline 169
 01AE           ;     gCurCol = ucol;
 01AE 40930000          sts _gCurCol,R20
 01B2                   .dbline -2
 01B2           L45:
 01B2 2196              adiw R28,1
 01B4 00D0              rcall pop_gset2
 01B6                   .dbline 0 ; func end
 01B6 0895              ret
 01B8                   .dbsym r ucol 20 c
 01B8                   .dbsym r urow 22 c
 01B8                   .dbend
 01B8                   .dbfunc e PRINT_words _PRINT_words fV
 01B8           ;         length -> y+0
 01B8           ;           uRow -> R22
 01B8           ;           uCol -> R10
 01B8           ;              i -> R12
 01B8           ;              k -> R14,R15
 01B8           ;              j -> R20
 01B8           ;            ptr -> y+15
 01B8           ;              y -> y+13
 01B8           ;              x -> y+11
                        .even
 01B8           _PRINT_words::
 01B8 00D0              rcall push_arg4
 01BA 00D0              rcall push_gset5
 01BC 2197              sbiw R28,1
 01BE                   .dbline -1
 01BE                   .dbline 175
 01BE           ; }
 01BE           ; /*******************************************************************************
 01BE           ;  ASCII(8*16) 及 汉字(16*16) 显示函数,ASCII与汉字区别在于128做分界。
 01BE           ; *******************************************************************************/
 01BE           ; void PRINT_words (unsigned char x,unsigned char y, char *ptr)
 01BE           ; {
 01BE                   .dbline 176
 01BE           ;     unsigned char length=0,i=0,j=0,uRow=0,uCol=0;
 01BE 0024              clr R0
 01C0 0882              std y+0,R0
 01C2                   .dbline 176
 01C2 CC24              clr R12
 01C4                   .dbline 176
 01C4 4427              clr R20
 01C6                   .dbline 176
 01C6 6627              clr R22
 01C8                   .dbline 176
 01C8 AA24              clr R10
 01CA                   .dbline 177
 01CA           ;     unsigned int  k=0;
 01CA EE24              clr R14
 01CC FF24              clr R15
 01CE                   .dbline 178
 01CE           ;       uRow = y;
 01CE 6D85              ldd R22,y+13
 01D0                   .dbline 179
 01D0           ;     uCol = x;                 
 01D0 AB84              ldd R10,y+11
 01D2                   .dbline 180
 01D2           ;       LCD_SET_ADD(uRow*16,uCol);      //起点定位
 01D2 2A2D              mov R18,R10
 01D4 80E1              ldi R24,16
 01D6 869F              mul R24,R22
 01D8 002D              mov R16,R0
 01DA D3DF              rcall _LCD_SET_ADD
 01DC 03C0              rjmp L48
 01DE           L47:
 01DE                   .dbline 184
 01DE                   .dbline 185
 01DE 0880              ldd R0,y+0
 01E0 0394              inc R0
 01E2 0882              std y+0,R0
 01E4                   .dbline 186
 01E4           L48:
 01E4                   .dbline 183
 01E4           ; 
 01E4           ;       
 01E4           ;     while (ptr[length]!=0)            //探测字串长度
 01E4 E881              ldd R30,y+0
 01E6 FF27              clr R31
 01E8 0F84              ldd R0,y+15
 01EA 1888              ldd R1,y+16
 01EC E00D              add R30,R0
 01EE F11D              adc R31,R1
 01F0 2080              ldd R2,z+0
 01F2 2220              tst R2
 01F4 A1F7              brne L47
 01F6 B2C0              rjmp L51
 01F8           L50:
 01F8                   .dbline 188
 01F8           ;     {
 01F8           ;         length++;
 01F8           ;     }         
 01F8           ;     while(i<length)//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
 01F8           ;     {
 01F8                   .dbline 189
 01F8           ;           uRow = gCurRow;    
 01F8 60910100          lds R22,_gCurRow
 01FC                   .dbline 190
 01FC           ;       uCol = gCurCol;                 
 01FC A0900000          lds R10,_gCurCol
 0200                   .dbline 191
 0200           ;       if(ptr[i] <= 128)//ASCII
 0200 EC2D              mov R30,R12
 0202 FF27              clr R31
 0204 0F84              ldd R0,y+15
 0206 1888              ldd R1,y+16
 0208 E00D              add R30,R0
 020A F11D              adc R31,R1
 020C 2080              ldd R2,z+0
 020E 80E8              ldi R24,128
 0210 8215              cp R24,R2
 0212 30F1              brlo L53
 0214                   .dbline 192
 0214           ;               

⌨️ 快捷键说明

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