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

📄 lcddrive.lis

📁 ssd1325控制器液晶的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0132           ; ***********************************************************************/
 0132           ; uint8  LCD_WriteTData1(uint8 dat)
 0132           ; {  if( LCD_TestStaBit3()==0 ) return(0);
 0132                   .dbline 253
 0132 A6DF              xcall _LCD_TestStaBit3
 0134 0023              tst R16
 0136 11F4              brne L38
 0138                   .dbline 253
 0138 0027              clr R16
 013A 03C0              xjmp L37
 013C           L38:
 013C                   .dbline 254
 013C           ;    LCD_WriteData(dat);                                // 发送命令字
 013C 042F              mov R16,R20
 013E 6EDF              xcall _LCD_WriteData
 0140                   .dbline 256
 0140           ;    
 0140           ;    return(1);
 0140 01E0              ldi R16,1
 0142                   .dbline -2
 0142           L37:
 0142 0E940000          xcall pop_gset1
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbsym r dat 20 c
 0148                   .dbend
 0148                   .dbfunc e LCD_Initialize _LCD_Initialize fV
                        .even
 0148           _LCD_Initialize::
 0148 2197              sbiw R28,1
 014A                   .dbline -1
 014A                   .dbline 271
 014A           ; }
 014A           ; 
 014A           ; 
 014A           ; /* 以下为LCM的用户接口层,主要负责解释用户命令,并发送到LCM,为用户编程提供接口 */
 014A           ; 
 014A           ; 
 014A           ; /***********************************************************************
 014A           ; * 名称:LCD_Initialize()
 014A           ; * 功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0x0000,。
 014A           ; * 入口参数:无
 014A           ; * 出口参数:无
 014A           ; * 说明:函数会设置LCM数据总线为输出方式
 014A           ; ***********************************************************************/
 014A           ; void  LCD_Initialize(void)
 014A           ; {  LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00);                       // 设置文本方式RAM起始地址
 014A                   .dbline 271
 014A 2224              clr R2
 014C 2882              std y+0,R2
 014E 2227              clr R18
 0150 00E4              ldi R16,64
 0152 B9DF              xcall _LCD_WriteTCommand3
 0154                   .dbline 272
 0154           ;    LCD_WriteTCommand3(LCD_TXT_WID, 16, 0x00);                 // 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
 0154 2224              clr R2
 0156 2882              std y+0,R2
 0158 20E1              ldi R18,16
 015A 01E4              ldi R16,65
 015C B4DF              xcall _LCD_WriteTCommand3
 015E                   .dbline 273
 015E           ;    LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00);                       // 设置图形方式RAM起始地址
 015E 2224              clr R2
 0160 2882              std y+0,R2
 0162 2227              clr R18
 0164 02E4              ldi R16,66
 0166 AFDF              xcall _LCD_WriteTCommand3
 0168                   .dbline 274
 0168           ;    LCD_WriteTCommand3(LCD_GRH_WID, 16, 0x00);                 // 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
 0168 2224              clr R2
 016A 2882              std y+0,R2
 016C 20E1              ldi R18,16
 016E 03E4              ldi R16,67
 0170 AADF              xcall _LCD_WriteTCommand3
 0172                   .dbline 275
 0172           ;    LCD_WriteTCommand1(LCD_MOD_OR);                                            // 设置显示方式为"或"
 0172 00E8              ldi R16,128
 0174 9ADF              xcall _LCD_WriteTCommand1
 0176                   .dbline 276
 0176           ;    LCD_WriteTCommand1(LCD_DIS_SW|0x08);                                       // 设置纯图形显示模式
 0176 08E9              ldi R16,152
 0178 98DF              xcall _LCD_WriteTCommand1
 017A                   .dbline -2
 017A           L40:
 017A 2196              adiw R28,1
 017C                   .dbline 0 ; func end
 017C 0895              ret
 017E                   .dbend
 017E                   .dbfunc e LCD_FillAll _LCD_FillAll fV
 017E           ;              i -> R20,R21
 017E           ;            dat -> R22
                        .even
 017E           _LCD_FillAll::
 017E 0E940000          xcall push_gset2
 0182 602F              mov R22,R16
 0184 2197              sbiw R28,1
 0186                   .dbline -1
 0186                   .dbline 287
 0186           ; }
 0186           ; 
 0186           ; 
 0186           ; /***********************************************************************
 0186           ; * 名称:LCD_FillAll()
 0186           ; * 功能:LCD填充。以图形方式进行填充,起始地址为0x0000。
 0186           ; * 入口参数:dat               要填充的数据
 0186           ; * 出口参数:无
 0186           ; ***********************************************************************/
 0186           ; void  LCD_FillAll(uint8 dat)
 0186           ; {  uint32  i;
 0186                   .dbline 289
 0186           ; 
 0186           ;    LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00);                       // 置地址指针
 0186 2224              clr R2
 0188 2882              std y+0,R2
 018A 2227              clr R18
 018C 04E2              ldi R16,36
 018E 9BDF              xcall _LCD_WriteTCommand3
 0190                   .dbline 290
 0190           ;    LCD_WriteTCommand1(LCD_AUT_WR);                                            // 自动写
 0190 00EB              ldi R16,176
 0192 8BDF              xcall _LCD_WriteTCommand1
 0194                   .dbline 291
 0194           ;    for(i=0;i<128*30;i++)
 0194 4427              clr R20
 0196 5527              clr R21
 0198 04C0              xjmp L45
 019A           L42:
 019A                   .dbline 292
 019A                   .dbline 292
 019A 062F              mov R16,R22
 019C C7DF              xcall _LCD_WriteTData1
 019E                   .dbline 293
 019E           L43:
 019E                   .dbline 291
 019E 4F5F              subi R20,255  ; offset = 1
 01A0 5F4F              sbci R21,255
 01A2           L45:
 01A2                   .dbline 291
 01A2 4030              cpi R20,0
 01A4 EFE0              ldi R30,15
 01A6 5E07              cpc R21,R30
 01A8 C0F3              brlo L42
 01AA                   .dbline 294
 01AA           ;    {  LCD_WriteTData1(dat);                                                           // 写数据
 01AA           ;    }
 01AA           ;    LCD_WriteTCommand1(LCD_AUT_OVR);                                           // 自动写结束
 01AA 02EB              ldi R16,178
 01AC 7EDF              xcall _LCD_WriteTCommand1
 01AE                   .dbline 295
 01AE           ;    LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00);                 // 重置地址指针
 01AE 2224              clr R2
 01B0 2882              std y+0,R2
 01B2 2227              clr R18
 01B4 04E2              ldi R16,36
 01B6 87DF              xcall _LCD_WriteTCommand3
 01B8                   .dbline -2
 01B8           L41:
 01B8 2196              adiw R28,1
 01BA 0E940000          xcall pop_gset2
 01BE                   .dbline 0 ; func end
 01BE 0895              ret
 01C0                   .dbsym r i 20 i
 01C0                   .dbsym r dat 22 c
 01C0                   .dbend
 01C0                   .dbfunc e LCD_UpdatePoint _LCD_UpdatePoint fV
 01C0           ;           addr -> R10,R11
 01C0           ;              y -> R22,R23
 01C0           ;              x -> R20,R21
                        .even
 01C0           _LCD_UpdatePoint::
 01C0 0E940000          xcall push_gset3
 01C4 B901              movw R22,R18
 01C6 A801              movw R20,R16
 01C8 2197              sbiw R28,1
 01CA                   .dbline -1
 01CA                   .dbline 308
 01CA           ; }
 01CA           ; 
 01CA           ; 
 01CA           ; /****************************************************************************
 01CA           ; * 名称:LCD_UpdatePoint()
 01CA           ; * 功能:在指定位置上画点,刷新某一点。
 01CA           ; * 入口参数: x                指定点所在列的位置
 01CA           ; *           y         指定点所在行的位置
 01CA           ; * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
 01CA           ; * 说明:操作失败原因是指定地址超出缓冲区范围。
 01CA           ; ****************************************************************************/
 01CA           ; void  LCD_UpdatePoint(uint32 x, uint32 y)
 01CA           ; {  uint32  addr; 
 01CA                   .dbline 311
 01CA           ;  
 01CA           ;    /* 找出目标地址 */
 01CA           ;    addr = y*(GUI_LCM_XMAX>>3) + (x>>3);
 01CA 00E1              ldi R16,16
 01CC 10E0              ldi R17,0
 01CE 9B01              movw R18,R22
 01D0 0E940000          xcall empy16s
 01D4 5801              movw R10,R16
 01D6 1A01              movw R2,R20
 01D8 3694              lsr R3
 01DA 2794              ror R2
 01DC 3694              lsr R3
 01DE 2794              ror R2
 01E0 3694              lsr R3
 01E2 2794              ror R2
 01E4 A20C              add R10,R2
 01E6 B31C              adc R11,R3
 01E8                   .dbline 312
 01E8           ;    LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8);       // 置地址指针
 01E8 1501              movw R2,R10
 01EA 232C              mov R2,R3
 01EC 3324              clr R3
 01EE 2882              std y+0,R2
 01F0 2A2D              mov R18,R10
 01F2 3070              andi R19,0
 01F4 04E2              ldi R16,36
 01F6 67DF              xcall _LCD_WriteTCommand3
 01F8                   .dbline 315
 01F8           ;    
 01F8           ;    /* 输出数据 */
 01F8           ;    LCD_WriteTCommand2(LCD_INC_WR, gui_disp_buf[y][x>>3]);
 01F8 00E1              ldi R16,16
 01FA 10E0              ldi R17,0
 01FC 9B01              movw R18,R22
 01FE 0E940000          xcall empy16s
 0202 1801              movw R2,R16
 0204 80E0              ldi R24,<_gui_disp_buf
 0206 90E0              ldi R25,>_gui_disp_buf
 0208 280E              add R2,R24
 020A 391E              adc R3,R25
 020C FA01              movw R30,R20
 020E F695              lsr R31
 0210 E795              ror R30
 0212 F695              lsr R31
 0214 E795              ror R30
 0216 F695              lsr R31
 0218 E795              ror R30
 021A E20D              add R30,R2
 021C F31D              adc R31,R3
 021E 2081              ldd R18,z+0
 0220 00EC              ldi R16,192
 0222 6EDF              xcall _LCD_WriteTCommand2
 0224                   .dbline -2
 0224           L46:
 0224 2196              adiw R28,1
 0226 0E940000          xcall pop_gset3
 022A                   .dbline 0 ; func end
 022A 0895              ret
 022C                   .dbsym r addr 10 i
 022C                   .dbsym r y 22 i
 022C                   .dbsym r x 20 i
 022C                   .dbend
 022C                   .dbfunc e GUI_FillSCR _GUI_FillSCR fV
 022C           ;              i -> R20,R21
 022C           ;              j -> R10,R11
 022C           ;            dat -> R22
                        .even
 022C           _GUI_FillSCR::
 022C 0E940000          xcall push_gset3
 0230 602F              mov R22,R16
 0232                   .dbline -1
 0232                   .dbline 332
 0232           ; }
 0232           ; 
 0232           ; 
 0232           ; 
 0232           ; /****************************************************************************
 0232           ; *                    与LCM相关的GUI接口函数
 0232           ; ****************************************************************************/
 0232           ; 
 0232           ; 
 0232           ; /****************************************************************************
 0232           ; * 名称:GUI_FillSCR()
 0232           ; * 功能:全屏填充。直接使用数据填充显示缓冲区。
 0232           ; * 入口参数:dat               填充的数据(对于黑白色LCM,为0的点灭,为1的点显示)
 0232           ; * 出口参数:无
 0232           ; ****************************************************************************/
 0232           ; void  GUI_FillSCR(uint8 dat)
 0232           ; {  uint32  i, j;
 0232                   .dbline 334
 0232           ; 
 0232           ;    for(i=0; i<GUI_LCM_YMAX; i++)              // 历遍所有行
 0232 4427              clr R20
 0234 5527              clr R21
 0236 1BC0              xjmp L51
 0238           L48:
 0238                   .dbline 335
 0238           ;    {  for(j=0; j<GUI_LCM_XMAX/8; j++) // 历遍所有行
 0238                   .dbline 335
 0238 AA24              clr R10
 023A BB24              clr R11

⌨️ 快捷键说明

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