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

📄 lcddrive.lis

📁 ssd1325控制器液晶的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module lcddrive.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\IccPro\mega128_lcd\lcddrive.c
 0000                   .dbfunc e LCD_WriteCommand _LCD_WriteCommand fV
 0000           ;          comd0 -> R20
                        .even
 0000           _LCD_WriteCommand::
 0000 0E940000          xcall push_gset1
 0004 402F              mov R20,R16
 0006                   .dbline -1
 0006                   .dbline 80
 0006           ; /****************************************************************************************
 0006           ; * 文件名:LCDDRIVE.C
 0006           ; * 功能:图形液晶240*128驱动(型号为SMG240128A)。32K显示存,0000H-7FFFH地址。显示是横向字节,高位
 0006           ; *      在前。
 0006           ; * 说明:图形液晶采用T6963C为LCD控制芯片,内带负压产生器,单5伏供电,并行接口(使用LPC2210驱动)。
 0006           ; * 硬件连接: D0--D7  <===>  D0--D7
 0006           ; *           /WR     <===>  nWE
 0006           ; *           /RD     <===>  nOE
 0006           ; *           /CE     <===>  nCS3_1
 0006           ; *           C/D     <===>  A1
 0006           ; *
 0006           ; *           /RST    <===>  VCC
 0006           ; ****************************************************************************************/
 0006           ; #include "config.h"
 0006           ; 
 0006           ; TCOLOR        gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8];                             // 声明GUI显示缓冲区
 0006           ; 
 0006           ; /* 定义LCM地址 */
 0006           ; //#define  TG240128_COM       (*((volatile unsigned short *) 0x83000002))
 0006           ; //#define  TG240128_DAT       (*((volatile unsigned short *) 0x83000000))
 0006           ;       
 0006           ; 
 0006           ; /* 以下为LCM的驱动层,主要负责发送T6963的各种命令,提供设置显示地址等功能,在发送命令前会检测其状态字。带参数命令模式:先参数,后命令;操作模式:先命令,后数据 */
 0006           ; 
 0006           ; /* T6963C 命令定义 */
 0006           ; #define  LCD_CUR_POS          0x21                                            /* 光标位置设置(只有设置到有效显示地址并打开显示时才看到) */
 0006           ; #define  LCD_CGR_POS          0x22                                            /* CGRAM偏置地址设置(可以增加自已的符号) */
 0006           ; #define  LCD_ADR_POS          0x24                                            /* 地址指针位置(设置读写操作指针) */
 0006           ; 
 0006           ; #define  LCD_TXT_STP          0x40                                            /* 文本区首址(从此地址开始向屏幕左上角显示字符) */
 0006           ; #define  LCD_TXT_WID          0x41                                            /* 文本区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */
 0006           ; #define  LCD_GRH_STP          0x42                                            /* 图形区首址(从此地址开始向屏幕左上角显示点) */
 0006           ; #define  LCD_GRH_WID          0x43                                            /* 图形区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */
 0006           ; 
 0006           ; #define  LCD_MOD_OR                   0x80                                            /* 显示方式:逻辑或 */
 0006           ; #define  LCD_MOD_XOR          0x81                                            /* 显示方式:逻辑异或 */
 0006           ; #define  LCD_MOD_AND          0x82                                            /* 显示方式:逻辑与 */
 0006           ; #define  LCD_MOD_TCH          0x83                                            /* 显示方式:文本特征 */
 0006           ; 
 0006           ; #define  LCD_DIS_SW                   0x90                                            /* 显示开关:D0=1/0,光标闪烁启用/禁用 */
 0006           ;                                                                                                               /*                      D1=1/0,光标显示启用/禁用 */
 0006           ;                                                                                                               /*                      D2=1/0,文本显示启用/禁用(打开后再使用) */
 0006           ;                                                                                                               /*                      D3=1/0,图形显示启用/禁用(打开后再使用) */
 0006           ;                                                                                                               
 0006           ; #define  LCD_CUR_SHP          0xA0                                            /* 光标形状选择:0xA0-0xA7表示光标占的行数 */
 0006           ; 
 0006           ; #define  LCD_AUT_WR                   0xB0                                            /* 自动写设置 */
 0006           ; #define  LCD_AUT_RD                   0xB1                                            /* 自动读设置 */
 0006           ; #define  LCD_AUT_OVR          0xB2                                            /* 自动读/写结束 */
 0006           ; 
 0006           ; #define  LCD_INC_WR                   0xC0                                            /* 数据一次写,地址加1 */
 0006           ; #define  LCD_INC_RD                   0xC1                                            /* 数据一次读,地址加1 */
 0006           ; #define  LCD_DEC_WR                   0xC2                                            /* 数据一次写,地址减1 */
 0006           ; #define  LCD_DEC_RD                   0xC3                                            /* 数据一次读,地址减1 */
 0006           ; #define  LCD_NOC_WR                   0xC4                                            /* 数据一次写,地址不变 */
 0006           ; #define  LCD_NOC_RD                   0xC5                                            /* 数据一次读,地址不变 */
 0006           ; 
 0006           ; #define  LCD_SCN_RD                   0xE0                                            /* 屏读 */
 0006           ; 
 0006           ; #define  LCD_SCN_CP                   0xE8                                            /* 屏拷贝 */
 0006           ; 
 0006           ; #define  LCD_BIT_OP                   0xF0                                            /* 位操作:D0-D2--定义D0-D7位,D3--1为置位,0为清除 */
 0006           ; 
 0006           ; #define  CMD_MODE           (PORTD|=0X04)
 0006           ; #define  DATA_MODE                    (PORTD&=0XFB)
 0006           ; #define  CLOSE_READ                   (PORTD|0X02)
 0006           ; #define  WRITE_MODE                   (PORTD&0XFE)
 0006           ; #define  CLOSE_WRITE          (PORTD|0X01)
 0006           ; #define  READ_MODE                    (PORTD&0XFD)
 0006           ; #define  ENABLE_LCD                   (PORTD&=0XF7)
 0006           ; #define  DISABLE_LCD          (PORTD|=0X08)
 0006           ; /***********************************************************************
 0006           ; * 名称:LCD_WriteCommand()
 0006           ; * 功能:写命令子程序。(发送命令前,不检查液晶模块的状态)
 0006           ; * 入口参数:command   要写入LCM的命令字
 0006           ; * 出口参数:无
 0006           ; * 说明:函数会设置LCM数据总线为输出方式
 0006           ; ***********************************************************************/
 0006           ; void LCD_WriteCommand(unsigned char comd0) 
 0006           ; { 
 0006                   .dbline 81
 0006           ;   LCD_TestStaBit01(); 
 0006 33D0              xcall _LCD_TestStaBit01
 0008                   .dbline 82
 0008           ;   DDRB=0xff;   //A口方向为输出 
 0008 8FEF              ldi R24,255
 000A 87BB              out 0x17,R24
 000C                   .dbline 83
 000C           ;   PORTB=comd0;   //送数据到A口寄存器 
 000C 48BB              out 0x18,R20
 000E                   .dbline 84
 000E           ;   DDRD|=(1<<7);    
 000E 8F9A              sbi 0x11,7
 0010                   .dbline 85
 0010           ;   PORTD&=~(1<<7);  // /WR=0 
 0010 9798              cbi 0x12,7
 0012                   .dbline 86
 0012           ;   NOP(); 
 0012 0000              nop
 0014                   .dbline 87
 0014           ;   PORTD|=(1<<7);  // /WR=1 
 0014 979A              sbi 0x12,7
 0016                   .dbline -2
 0016           L7:
 0016 0E940000          xcall pop_gset1
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbsym r comd0 20 c
 001C                   .dbend
 001C                   .dbfunc e LCD_WriteData _LCD_WriteData fV
 001C           ;            dat -> R20
                        .even
 001C           _LCD_WriteData::
 001C 0E940000          xcall push_gset1
 0020 402F              mov R20,R16
 0022                   .dbline -1
 0022                   .dbline 98
 0022           ; } 
 0022           ; 
 0022           ; /***********************************************************************
 0022           ; * 名称:LCD_WriteData()
 0022           ; * 功能:写数据子程序。(发送数据前,不检查液晶模块的状态)
 0022           ; * 入口参数:dat       要写入LCM的数据
 0022           ; * 出口参数:无
 0022           ; * 说明:函数会设置LCM数据总线为输出方式
 0022           ; ***********************************************************************/
 0022           ; void LCD_WriteData(unsigned char dat)
 0022           ; { 
 0022                   .dbline 99
 0022           ;   LCD_TestStaBit01(); 
 0022 25D0              xcall _LCD_TestStaBit01
 0024                   .dbline 100
 0024           ;   DDRD|=(1<<3); 
 0024 8B9A              sbi 0x11,3
 0026                   .dbline 101
 0026           ;   PORTD&=~(1<<3);  // C/D=0,数据通道 
 0026 9398              cbi 0x12,3
 0028                   .dbline 102
 0028           ;   DDRB=0xff;   //A口方向为输出 
 0028 8FEF              ldi R24,255
 002A 87BB              out 0x17,R24
 002C                   .dbline 103
 002C           ;   PORTB=dat;  //送数据到A口寄存器 
 002C 48BB              out 0x18,R20
 002E                   .dbline 104
 002E           ;   DDRD|=(1<<7);    
 002E 8F9A              sbi 0x11,7
 0030                   .dbline 105
 0030           ;   PORTD&=~(1<<7);  // /WR=0 
 0030 9798              cbi 0x12,7
 0032                   .dbline 106
 0032           ;   NOP(); 
 0032 0000              nop
 0034                   .dbline 107
 0034           ;   PORTD|=(1<<7);  // /WR=1  
 0034 979A              sbi 0x12,7
 0036                   .dbline -2
 0036           L8:
 0036 0E940000          xcall pop_gset1
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbsym r dat 20 c
 003C                   .dbend
 003C                   .dbfunc e LCD_ReadState _LCD_ReadState fi
 003C           ;      lcd_state -> R16
                        .even
 003C           _LCD_ReadState::
 003C                   .dbline -1
 003C                   .dbline 120
 003C           ; } 
 003C           ; 
 003C           ; 
 003C           ; 
 003C           ; /***********************************************************************
 003C           ; * 名称:LCD_ReadState()
 003C           ; * 功能:读取状态字子程序。
 003C           ; * 入口参数:无
 003C           ; * 出口参数:返回值即为读出的状态字
 003C           ; * 说明:函数会设置LCM数据总线为输入方式
 003C           ; ***********************************************************************/
 003C           ; unsigned LCD_ReadState(void) 
 003C           ; { 
 003C                   .dbline 122
 003C           ;   unsigned char lcd_state; 
 003C           ;   DDRB=0x00; 
 003C 2224              clr R2
 003E 27BA              out 0x17,R2
 0040                   .dbline 123
 0040           ;   DDRD|=(1<<3); 
 0040 8B9A              sbi 0x11,3
 0042                   .dbline 124
 0042           ;   DDRD|=(1<<6); 
 0042 8E9A              sbi 0x11,6
 0044                   .dbline 125
 0044           ;   PORTD|=(1<<3);   // C/D=1 
 0044 939A              sbi 0x12,3
 0046                   .dbline 126
 0046           ;   PORTD&=~(1<<6);   // /RD=0 
 0046 9698              cbi 0x12,6
 0048                   .dbline 127
 0048           ;   lcd_state=PINB&0xff;   // 读取引脚A物理电平 
 0048 06B3              in R16,0x16
 004A 0F7F              andi R16,255
 004C                   .dbline 128
 004C           ;   NOP(); 
 004C 0000              nop
 004E                   .dbline 129
 004E           ;   NOP(); 
 004E 0000              nop
 0050                   .dbline 130
 0050           ;   PORTD|=(1<<6);   // /RD=1 
 0050 969A              sbi 0x12,6
 0052                   .dbline 131
 0052           ;   return lcd_state; 
 0052 1127              clr R17
 0054                   .dbline -2
 0054           L9:
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbsym r lcd_state 16 c
 0056                   .dbend
 0056                   .dbfunc e LCD_ReadData _LCD_ReadData fc
 0056           ;      lcd_state -> R16
                        .even
 0056           _LCD_ReadData::
 0056                   .dbline -1
 0056                   .dbline 143
 0056           ; } 
 0056           ; 
 0056           ; 
 0056           ; /***********************************************************************
 0056           ; * 名称:LCD_ReadData()
 0056           ; * 功能:读取数据子程序。
 0056           ; * 入口参数:无
 0056           ; * 出口参数:返回值即为读出的数据
 0056           ; * 说明:函数会设置LCM数据总线为输入方式
 0056           ; ***********************************************************************/
 0056           ; unsigned char LCD_ReadData()  
 0056           ; { 
 0056                   .dbline 145
 0056           ;   unsigned char lcd_state; 
 0056           ;   DDRB=0x00; 
 0056 2224              clr R2
 0058 27BA              out 0x17,R2
 005A                   .dbline 146
 005A           ;   DDRD|=(1<<3); 
 005A 8B9A              sbi 0x11,3
 005C                   .dbline 147
 005C           ;   DDRD|=(1<<6); 
 005C 8E9A              sbi 0x11,6
 005E                   .dbline 148
 005E           ;   PORTD&=~(1<<3);   // C/D=0 
 005E 9398              cbi 0x12,3
 0060                   .dbline 149
 0060           ;   PORTD&=~(1<<6);   // /RD=0 
 0060 9698              cbi 0x12,6
 0062                   .dbline 150
 0062           ;   lcd_state=PINB&0xff;   // 读取引脚A物理电平 
 0062 06B3              in R16,0x16
 0064 0F7F              andi R16,255
 0066                   .dbline 151
 0066           ;   NOP(); 
 0066 0000              nop
 0068                   .dbline 152
 0068           ;   NOP(); 
 0068 0000              nop
 006A                   .dbline 153
 006A           ;   PORTD|=(1<<6);   // /RD=1 
 006A 969A              sbi 0x12,6
 006C                   .dbline 154
 006C           ;   return lcd_state; 
 006C                   .dbline -2
 006C           L10:
 006C                   .dbline 0 ; func end
 006C 0895              ret
 006E                   .dbsym r lcd_state 16 c
 006E                   .dbend
 006E                   .dbfunc e LCD_TestStaBit01 _LCD_TestStaBit01 fc
                        .even
 006E           _LCD_TestStaBit01::

⌨️ 快捷键说明

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