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

📄 lcd_driver_user_a.asm

📁 彩色LCD资料
💻 ASM
字号:
//========================================================================
// 文件名: LCD_Driver_User_A.asm
// 作  者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
//			www.Mzdesign.com.cn
// 日  期: 2007/01/09
// 描  述: 底层接口驱动基础程序集(ASM语言版本)
//
// 参  考: 请参考具体显示器的硬件描述说明书或者是DataSheet,并以此来编写底
//			层接口驱动程序
// 版  本:
//      2007/01/09      First version    Mz Design
// 注  意: 该文件当中,主要是对四个重要的函数进行了ASM的重写
//========================================================================
.DEFINE		P_IOA_Data				0x7000
.DEFINE		P_IOA_Buffer			0x7001
.DEFINE		P_IOA_Dir				0x7002
.DEFINE		P_IOA_Attrib			0x7003
.DEFINE		P_IOA_Latch				0x7004
.DEFINE		P_IOB_Data				0x7005
.DEFINE		P_IOB_Buffer			0x7006
.DEFINE		P_IOB_Dir				0x7007
.DEFINE		P_IOB_Attrib			0x7008
	
// Define for the port use by LCD Driver
.define LCD_EP				0x0020
.define LCD_RW				0x0010
.define LCD_AO				0x0008
.define LCD_CS				0x0004


.define LCD_CMD_Dir			P_IOB_Dir
.define LCD_CMD_Attrib		P_IOB_Attrib
.define LCD_CMD_Buffer		P_IOB_Buffer

.define LCD_Data_BUS_Out	P_IOA_Buffer
.define LCD_Data_BUS_In		P_IOA_Data
.define LCD_Data_BUS_Dir	P_IOA_Dir
.define LCD_Data_BUS_Attrib	P_IOA_Attrib

.define LCD_Data_BUS_Byte	0//1
.code
//========================================================================
// 函数: void SPLC501_DataWrite(unsigned int Data)
// 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
// 参数: Data 写入的数据 
// 返回: 无
// 备注: 无
// 版本:
//      2007/01/09      First version
//========================================================================
.public _SPLC501_DataWrite//,_Fill_Dot_LCD
_SPLC501_DataWrite:
SPLC501_DataWrite:
//_Fill_Dot_LCD:
	r1 = r1&0x00ff
	r2 = [LCD_CMD_Buffer]				//得到IOB口的状态
	r2 &= ~(LCD_EP+LCD_CS+LCD_RW)				//EP CS to Low	20050613 Editby xinqiang					
//	[LCD_CMD_Buffer] = r2 				//EP Low
//	r2 = [P_IO_Ctrl_B]
	r2 |= LCD_AO
//	r2 &= ~(LCD_RW)	
	[LCD_CMD_Buffer] = r2				//AO Hight, RW Low
.if LCD_Data_BUS_Byte==1 
//	r3 = r3&0xff00
	r1 = r1 LSL 4
	r1 = r1 LSL 4
	r4 = [LCD_Data_BUS_Out]
	r4 = r4&0x00ff
	r4 = r4|r1
	[LCD_Data_BUS_Out] = r4
.else
	r4 = [LCD_Data_BUS_Out]
	r4 = r4&0xff00
	r4 = r4|r1
	[LCD_Data_BUS_Out] = r4
.endif
	r2 = [LCD_CMD_Buffer]
	r2 |= LCD_EP					//EP to Hight
	[LCD_CMD_Buffer]	= r2
	r2 &= ~LCD_EP					//EP to Low
	r2 |= LCD_CS					//CS to Hight  20050613 Editby xinqiag
	[LCD_CMD_Buffer] = r2
	retf
	
//========================================================================
// 函数: void SPLC501_RegWrite(unsigned char Command)
// 描述: 写一个字节的数据至LCD中的控制寄存器当中
// 参数: Command		写入的数据,低八位有效(byte) 
// 返回: 无
// 备注: 
// 版本:
//      2007/01/09      First version
//========================================================================
.public _SPLC501_RegWrite
_SPLC501_RegWrite:
SPLC501_RegWrite:
	r1 = r1&0x00ff
	r2 = [LCD_CMD_Buffer]				//得到IOB口的状态
	r2 &= ~(LCD_EP+LCD_CS+LCD_AO+LCD_RW)		//EP CS to Low 20050613 Edit by xinqiang			
//	[LCD_CMD_Buffer] = r2 				//EP Low
//	r2 &= ~(LCD_AO+LCD_RW)	
	[LCD_CMD_Buffer] = r2				//AO RW Low
.if LCD_Data_BUS_Byte==1 
//	r3 = r3&0xff00
	r1 = r1 LSL 4
	r1 = r1 LSL 4
	r4 = [LCD_Data_BUS_Out]
	r4 = r4&0x00ff
	r4 = r4|r1
	[LCD_Data_BUS_Out] = r4
.else
	r4 = [LCD_Data_BUS_Out]
	r4 = r4&0xff00
	r4 = r4|r1
	[LCD_Data_BUS_Out] = r4
.endif
	r2 = [LCD_CMD_Buffer]
	r2 |= LCD_EP					//EP to Hight
	[LCD_CMD_Buffer]	= r2
//	nop
	r2 &= ~LCD_EP					//EP to Low
	r2 |= LCD_CS					//CS to hight		20050613 Edit by xinqiang
	[LCD_CMD_Buffer] = r2
	retf	
//========================================================================
// 函数: unsigned char SPLC501_DataRead(void)
// 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
// 参数: 无  
// 返回: 读出的数据,低八位有效(byte)
// 备注: 
// 版本:
//      2007/01/09      First version
// 注意: 
//========================================================================
.public _SPLC501_DataRead
_SPLC501_DataRead:
	r3 = [LCD_Data_BUS_Dir]				//设置数据口为输入
.if LCD_Data_BUS_Byte==1 
	r2 = r3&0x00ff
.else
	r2 = r3&0xff00
.endif
	[LCD_Data_BUS_Dir] = r2
	
	r2 = [LCD_CMD_Buffer]				//得到IOB口的状态
	r2 &= ~(LCD_EP+LCD_CS)		//EP CS to Low 20050613  Editby xinqiang					
//	[LCD_CMD_Buffer] = r2 				//EP Low
	r2 |= (LCD_AO+LCD_RW)
	[LCD_CMD_Buffer] = r2				//AO Hight, RW Hight
//	nop
	r2 |= LCD_EP
	[LCD_CMD_Buffer] = r2				//产生EP高电平,
//	nop
	r2 &= ~LCD_EP					//EP to Low
	[LCD_CMD_Buffer] = r2
	r1 = [LCD_Data_BUS_In]
//	r1 &= M_IO_DATA_MASK
	r2 |= LCD_CS
	[LCD_CMD_Buffer] = r2
	//once more
//	r2 = [LCD_CMD_Buffer]				//得到IOB口的状态
	r2 &= ~(LCD_EP+LCD_CS)		//EP CS to Low 20050613  Editby xinqiang					
//	[LCD_CMD_Buffer] = r2 				//EP Low
	r2 |= (LCD_AO+LCD_RW)
	[LCD_CMD_Buffer] = r2				//AO Hight, RW Hight
//	nop
	r2 |= LCD_EP
	[LCD_CMD_Buffer] = r2				//产生EP高电平,
//	nop
	r2 &= ~LCD_EP					//EP to Low
	[LCD_CMD_Buffer] = r2
	r1 = [LCD_Data_BUS_In]
//	r1 &= M_IO_DATA_MASK
	r2 |= LCD_CS
	[LCD_CMD_Buffer] = r2
	
//	r2 = [LCD_Data_BUS_Dir]				//恢复数据口为输出状态
.if LCD_Data_BUS_Byte==1 
//	r2 = r2|0xff00
	r1 = r1 lsr 4
	r1 = r1 lsr 4
.else
//	r2 = r2|0x00ff
	r1 = r1&0x00ff
.endif
	[LCD_Data_BUS_Dir] = r3
	retf
//========================================================================
// 函数: void SPLC501_PortInit(void)
// 描述: 与SPLC501连接的端口初始化代码
// 参数: 无  
// 返回: 无
// 备注: 
// 版本:
//      2007/01/09      First version
// 注意: 
//========================================================================
.public _SPLC501_PortInit
_SPLC501_PortInit:
.if LCD_Data_BUS_Byte==1 
	r1 = [LCD_Data_BUS_Dir]
	r1 |= 0xff00
	[LCD_Data_BUS_Dir] = r1
	r1 = [LCD_Data_BUS_Attrib]
	r1 |= 0xff00
	[LCD_Data_BUS_Attrib] = r1
	r1 = [LCD_Data_BUS_Out]
	r1 |= 0xff00
	[LCD_Data_BUS_Out] = r1
.else
	r1 = [LCD_Data_BUS_Dir]
	r1 |= 0x00ff
	[LCD_Data_BUS_Dir] = r1
	r1 = [LCD_Data_BUS_Attrib]
	r1 |= 0x00ff
	[LCD_Data_BUS_Attrib] = r1
	r1 = [LCD_Data_BUS_Out]
	r1 |= 0x00ff
	[LCD_Data_BUS_Out] = r1
.endif
	
	r1 = [LCD_CMD_Dir]
	r1 |= (LCD_EP+LCD_AO+LCD_RW+LCD_CS)
	[LCD_CMD_Dir] = r1
	r1 = [LCD_CMD_Attrib]
	r1 |= (LCD_EP+LCD_AO+LCD_RW+LCD_CS)
	[LCD_CMD_Attrib] = r1
	r1 = [LCD_CMD_Buffer]
	r1 &= ~(LCD_EP+LCD_AO+LCD_RW+LCD_CS)
	[LCD_CMD_Buffer] = r1
	retf

⌨️ 快捷键说明

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