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

📄 3310lcd_function.lis

📁 使用3310液晶的数字频率计 频率计是我们经常会用到的实验仪器之一
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 023A CE01              movw R24,R28
 023C 8B5A              subi R24,171  ; offset = 85
 023E 9F4F              sbci R25,255
 0240 EA2D              mov R30,R10
 0242 FF27              clr R31
 0244 E80F              add R30,R24
 0246 F91F              adc R31,R25
 0248 2080              ldd R2,z+0
 024A CE01              movw R24,R28
 024C 8C5A              subi R24,172  ; offset = 84
 024E 9F4F              sbci R25,255
 0250 EA2D              mov R30,R10
 0252 FF27              clr R31
 0254 E80F              add R30,R24
 0256 F91F              adc R31,R25
 0258 2082              std z+0,R2
 025A                   .dbline 170
 025A           L42:
 025A                   .dbline 166
 025A A394              inc R10
 025C           L44:
 025C                   .dbline 166
 025C 8A2D              mov R24,R10
 025E 8335              cpi R24,83
 0260 F8F2              brlo L41
 0262                   .dbline 172
 0262           ;           { 
 0262           ;             buffer_h[n]=buffer_h[n+1];
 0262           ;             buffer_l[n]=buffer_l[n+1];
 0262           ;           } 
 0262           ;         
 0262           ;         LCD_set_XY(X,Y);
 0262 2E2D              mov R18,R14
 0264 FE01              movw R30,R28
 0266 EE54              subi R30,78  ; addi 178
 0268 FF4F              sbci R31,255
 026A 0081              ldd R16,z+0
 026C FFDE              xcall _LCD_set_XY
 026E                   .dbline 173
 026E           ;         for (n=0; n<83; n++)
 026E AA24              clr R10
 0270 09C0              xjmp L50
 0272           L47:
 0272                   .dbline 174
 0272                   .dbline 175
 0272 21E0              ldi R18,1
 0274 CE01              movw R24,R28
 0276 EA2D              mov R30,R10
 0278 FF27              clr R31
 027A E80F              add R30,R24
 027C F91F              adc R31,R25
 027E 0081              ldd R16,z+0
 0280 72D0              xcall _LCD_write_byte
 0282                   .dbline 176
 0282           L48:
 0282                   .dbline 173
 0282 A394              inc R10
 0284           L50:
 0284                   .dbline 173
 0284 8A2D              mov R24,R10
 0286 8335              cpi R24,83
 0288 A0F3              brlo L47
 028A                   .dbline 178
 028A           ;           { 
 028A           ;             LCD_write_byte(buffer_h[n],1);
 028A           ;           } 
 028A           ;         
 028A           ;         LCD_set_XY(X,Y+1); 
 028A 2E2D              mov R18,R14
 028C 2F5F              subi R18,255    ; addi 1
 028E FE01              movw R30,R28
 0290 EE54              subi R30,78  ; addi 178
 0292 FF4F              sbci R31,255
 0294 0081              ldd R16,z+0
 0296 EADE              xcall _LCD_set_XY
 0298                   .dbline 179
 0298           ;         for (n=0; n<83; n++)
 0298 AA24              clr R10
 029A 0BC0              xjmp L54
 029C           L51:
 029C                   .dbline 180
 029C                   .dbline 181
 029C 21E0              ldi R18,1
 029E CE01              movw R24,R28
 02A0 8C5A              subi R24,172  ; offset = 84
 02A2 9F4F              sbci R25,255
 02A4 EA2D              mov R30,R10
 02A6 FF27              clr R31
 02A8 E80F              add R30,R24
 02AA F91F              adc R31,R25
 02AC 0081              ldd R16,z+0
 02AE 5BD0              xcall _LCD_write_byte
 02B0                   .dbline 182
 02B0           L52:
 02B0                   .dbline 179
 02B0 A394              inc R10
 02B2           L54:
 02B2                   .dbline 179
 02B2 8A2D              mov R24,R10
 02B4 8335              cpi R24,83
 02B6 90F3              brlo L51
 02B8                   .dbline 184
 02B8 0C2D              mov R16,R12
 02BA 1127              clr R17
 02BC 0E940000          xcall _delay_nms
 02C0                   .dbline 185
 02C0           L34:
 02C0                   .dbline 159
 02C0 4395              inc R20
 02C2           L36:
 02C2                   .dbline 159
 02C2 4C39              cpi R20,156
 02C4 08F4              brsh X1
 02C6 7DCF              xjmp L33
 02C8           X1:
 02C8                   .dbline -2
 02C8           L30:
 02C8 EF96              adiw R28,63
 02CA EF96              adiw R28,63
 02CC AA96              adiw R28,42  ; offset = 168
 02CE 0E940000          xcall pop_gset5
 02D2 2496              adiw R28,4
 02D4                   .dbline 0 ; func end
 02D4 0895              ret
 02D6                   .dbsym r i 20 c
 02D6                   .dbsym r j 22 c
 02D6                   .dbsym l buffer_l 84 A[84:84]c
 02D6                   .dbsym l buffer_h 0 A[84:84]c
 02D6                   .dbsym r n 10 c
 02D6                   .dbsym r T 12 c
 02D6                   .dbsym r Y 14 c
 02D6                   .dbsym l X 178 c
 02D6                   .dbend
 02D6                   .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
 02D6           ;            row -> R20
 02D6           ;              n -> R22,R23
 02D6           ;              i -> R14,R15
 02D6           ;          Pix_y -> y+18
 02D6           ;          Pix_x -> R10
 02D6           ;            map -> R12,R13
 02D6           ;              Y -> y+12
 02D6           ;              X -> y+10
                        .even
 02D6           _LCD_draw_bmp_pixel::
 02D6 0E940000          xcall push_arg4
 02DA 0E940000          xcall push_gset5
 02DE CE84              ldd R12,y+14
 02E0 DF84              ldd R13,y+15
 02E2 A888              ldd R10,y+16
 02E4                   .dbline -1
 02E4                   .dbline 201
 02E4           ;           { 
 02E4           ;             LCD_write_byte(buffer_l[n],1);
 02E4           ;           } 
 02E4           ;           
 02E4           ;        delay_nms(T);
 02E4           ;       }
 02E4           ;   }
 02E4           ; 
 02E4           ; /*-----------------------------------------------------------------------
 02E4           ; LCD_draw_map      : 位图绘制函数
 02E4           ; 
 02E4           ; 输入参数:X、Y    :位图绘制的起始X、Y坐标;
 02E4           ;           *map    :位图点阵数据;
 02E4           ;           Pix_x   :位图像素(长)
 02E4           ;           Pix_y   :位图像素(宽)
 02E4           ; 
 02E4           ; 编写日期          :2004-8-13
 02E4           ; 最后修改日期      :2004-8-13 
 02E4           ; -----------------------------------------------------------------------*/
 02E4           ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
 02E4           ;                   unsigned char Pix_x,unsigned char Pix_y)
 02E4           ;   {
 02E4                   .dbline 205
 02E4           ;     unsigned int i,n;
 02E4           ;     unsigned char row;
 02E4           ;     
 02E4           ;     if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
 02E4 18E0              ldi R17,8
 02E6 0A89              ldd R16,y+18
 02E8 0E940000          xcall mod8u
 02EC 0023              tst R16
 02EE 29F4              brne L56
 02F0                   .dbline 205
 02F0 4A89              ldd R20,y+18
 02F2 4695              lsr R20
 02F4 4695              lsr R20
 02F6 4695              lsr R20
 02F8 05C0              xjmp L57
 02FA           L56:
 02FA                   .dbline 207
 02FA           ;       else
 02FA           ;         row=Pix_y/8+1;
 02FA 4A89              ldd R20,y+18
 02FC 4695              lsr R20
 02FE 4695              lsr R20
 0300 4695              lsr R20
 0302 4F5F              subi R20,255    ; addi 1
 0304           L57:
 0304                   .dbline 209
 0304           ;     
 0304           ;     for (n=0;n<row;n++)
 0304 6627              clr R22
 0306 7727              clr R23
 0308 25C0              xjmp L61
 030A           L58:
 030A                   .dbline 210
 030A           ;       {
 030A                   .dbline 211
 030A           ;               LCD_set_XY(X,Y);
 030A 2C85              ldd R18,y+12
 030C 0A85              ldd R16,y+10
 030E AEDE              xcall _LCD_set_XY
 0310                   .dbline 212
 0310           ;         for(i=0; i<Pix_x; i++)
 0310 EE24              clr R14
 0312 FF24              clr R15
 0314 15C0              xjmp L65
 0316           L62:
 0316                   .dbline 213
 0316                   .dbline 214
 0316 21E0              ldi R18,1
 0318 2A2C              mov R2,R10
 031A 3324              clr R3
 031C 2F93              push R18
 031E 3F93              push R19
 0320 9101              movw R18,R2
 0322 8B01              movw R16,R22
 0324 0E940000          xcall empy16s
 0328 3F91              pop R19
 032A 2F91              pop R18
 032C F701              movw R30,R14
 032E E00F              add R30,R16
 0330 F11F              adc R31,R17
 0332 EC0D              add R30,R12
 0334 FD1D              adc R31,R13
 0336 0081              ldd R16,z+0
 0338 16D0              xcall _LCD_write_byte
 033A                   .dbline 215
 033A           L63:
 033A                   .dbline 212
 033A C701              movw R24,R14
 033C 0196              adiw R24,1
 033E 7C01              movw R14,R24
 0340           L65:
 0340                   .dbline 212
 0340 2A2C              mov R2,R10
 0342 3324              clr R3
 0344 E214              cp R14,R2
 0346 F304              cpc R15,R3
 0348 30F3              brlo L62
 034A                   .dbline 216
 034A 0C84              ldd R0,y+12
 034C 0394              inc R0
 034E 0C86              std y+12,R0
 0350                   .dbline 217
 0350           L59:
 0350                   .dbline 209
 0350 6F5F              subi R22,255  ; offset = 1
 0352 7F4F              sbci R23,255
 0354           L61:
 0354                   .dbline 209
 0354 242E              mov R2,R20
 0356 3324              clr R3
 0358 6215              cp R22,R2
 035A 7305              cpc R23,R3
 035C B0F2              brlo L58
 035E                   .dbline -2
 035E           L55:
 035E 0E940000          xcall pop_gset5
 0362 2496              adiw R28,4
 0364                   .dbline 0 ; func end
 0364 0895              ret
 0366                   .dbsym r row 20 c
 0366                   .dbsym r n 22 i
 0366                   .dbsym r i 14 i
 0366                   .dbsym l Pix_y 18 c
 0366                   .dbsym r Pix_x 10 c
 0366                   .dbsym r map 12 pc
 0366                   .dbsym l Y 12 c
 0366                   .dbsym l X 10 c
 0366                   .dbend
 0366                   .dbfunc e LCD_write_byte _LCD_write_byte fV
 0366           ;        command -> R18
 0366           ;           data -> R16
                        .even
 0366           _LCD_write_byte::
 0366                   .dbline -1
 0366                   .dbline 230
 0366           ;           {
 0366           ;             LCD_write_byte(map[i+n*Pix_x], 1);
 0366           ;           }
 0366           ;         Y++;                         //换行
 0366           ;       }      
 0366           ;   }
 0366           ; 
 0366           ; /*-----------------------------------------------------------------------
 0366           ; LCD_write_byte    : 使用SPI接口写数据到LCD
 0366           ; 
 0366           ; 输入参数:data    :写入的数据;
 0366           ;           command :写数据/命令选择;
 0366           ; 
 0366           ; 编写日期          :2004-8-10 
 0366           ; 最后修改日期      :2004-8-13 
 0366           ; -----------------------------------------------------------------------*/
 0366           ; void LCD_write_byte(unsigned char data, unsigned char command)
 0366           ;   {
 0366                   .dbline 231
 0366           ;     PORTB &= ~LCD_CE ;                        // 使能LCD
 0366 C498              cbi 0x18,4
 0368                   .dbline 233
 0368           ;     
 0368           ;     if (command == 0)
 0368 2223              tst R18
 036A 11F4              brne L67
 036C                   .dbline 234
 036C           ;       PORTB &= ~LCD_DC ;              // 传送命令
 036C C398              cbi 0x18,3
 036E 01C0              xjmp L68
 0370           L67:
 0370                   .dbline 236
 0370           ;     else
 0370           ;       PORTB |= LCD_DC ;                       // 传送数据
 0370 C39A              sbi 0x18,3
 0372           L68:
 0372                   .dbline 238
 0372           ; 
 0372           ;     SPDR = data;                      // 传送数据到SPI寄存器
 0372 0FB9              out 0xf,R16
 0374           L69:
 0374                   .dbline 240
 0374           L70:
 0374                   .dbline 240
 0374           ; 
 0374           ;     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
 0374 779B              sbis 0xe,7
 0376 FECF              rjmp L69
 0378                   .dbline 242
 0378           ;       
 0378           ;     PORTB |= LCD_CE ;                 // 关闭LCD
 0378 C49A              sbi 0x18,4
 037A                   .dbline -2
 037A           L66:
 037A                   .dbline 0 ; func end
 037A 0895              ret
 037C                   .dbsym r command 18 c
 037C                   .dbsym r data 16 c
 037C                   .dbend

⌨️ 快捷键说明

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