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

📄 lcmdrv.c

📁 一个在PROTEUS 中方真lpcarm的ucosii移植
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name: LCMDRV.C
** Last modified Date:2007-12-20
** Last Version: 1.0
** Descriptions: MG12864图形液晶模块驱动程序。T6963C控制器
**------------------------------------------------------------------------------------------------------
** Created by:   Rein Lee
** Created date: 2007-12-20
** Version:      1.0
** Descriptions: The original version
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
********************************************************************************************************/
#include "config.h"
/* 定义总线起始的GPIO,即D0对应的GPIO值(P0.4) */
/* 定义显示缓冲区 */
#define  BUS_NO		4
/* 输出总线数据宏定义 */
#define	 OutData(dat)	IO0DIR = IO0DIR |(0xff<<BUS_NO); IO0CLR = 0xff<<BUS_NO; IO0SET = (dat&0xff)<<BUS_NO
#define	 InData()	IO0DIR = IO0DIR &~(0x000000ff<<BUS_NO);dat = (uint8)((IO0PIN&(0xFFFFFFFF))>>BUS_NO)
/* 定义READ控制 */
#define  LCM_RD		12
#define  LCM_UNREAD()		IO0SET = 1<<LCM_RD
#define  LCM_READ()			IO0CLR = 1<<LCM_RD
/* 定义WRITE控制 */
#define  LCM_WR	13
#define  LCM_UNWRITE()		IO0SET = 1<<LCM_WR
#define  LCM_WRITE()		IO0CLR = 1<<LCM_WR
/* 定义C/D#控制 */
#define  LCM_CD		14
#define  LCM_COM()			IO0SET = 1<<LCM_CD
#define  LCM_DATA()			IO0CLR = 1<<LCM_CD
/* 定义C/D#控制 */
#define  LCM_CE		15
#define  LCM_DISABLE()			IO0SET = 1<<LCM_CE
#define  LCM_ENABLE()			IO0CLR = 1<<LCM_CE
/* 定义LCM操作的命令字 */
// T6963C 命令定义
#define LCM_CUR_POS 0x21 // 光标位置设置
#define LCM_CGR_POS 0x22 // CGRAM 偏置地址设置
#define LCM_ADD_POS 0x24 // 地址指针位置
#define LCM_TXT_STP 0x40 // 文本区首址
#define LCM_TXT_WID 0x41 // 文本区宽度
#define LCM_GRH_STP 0x42 // 图形区首址
#define LCM_GRH_WID 0x43 // 图形区宽度
#define LCM_MOD_OR	0x80 // 显示方式逻辑或
#define LCM_MOD_XOR 0x81 // 显示方式逻辑异或
#define LCM_MOD_AND 0x82 // 显示方式逻辑与
#define LCM_MOD_TCH 0x83 // 显示方式文本特征
#define LCM_DIS_SW	0x90 // 显示开关D0=1/0:光标闪烁启用/禁用
// D1=1/0:光标显示启用/禁用
// D2=1/0:文本显示启用/禁用
// D3=1/0:图形显示启用/禁用
#define LCM_CUR_SHP 0xA0 // 光标形状选择0xA0-0xA7表示光标占的行数
#define LCM_AUT_WR 0xB0 // 自动写设置
#define LCM_AUT_RD 0xB1 // 自动读设置
#define LCM_AUT_OVR 0xB2 // 自动读/写结束
#define LCM_INC_WR 0xC0 // 数据一次写地址加1
#define LCM_INC_RD 0xC1 // 数据一次读地址加1
#define LCM_DEC_WR 0xC2 // 数据一次写地址减1
#define LCM_DEC_RD 0xC3 // 数据一次读地址减1
#define LCM_NOC_WR 0xC4 // 数据一次写地址不变
#define LCM_NOC_RD 0xC5 // 数据一次读地址不变
#define LCM_SCN_RD 0xE0 // 屏读
#define LCM_SCN_CP 0xE8 // 屏拷贝
#define LCM_BIT_OP 0xF0 // 位操作
uint8 const  turnf[8] = {7,6,5,4,3,2,1,0};
uint8 const  DEC_HEX_TAB1[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
uint8 const  DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/*********************************************************************************************************
** 函数名称: LCM_READSTATE
** 功能描述: 读取LCM内部的状态
** 输 入: 无
** 输 出: LCM内部状态值       
** 全局变量: 
** 调用模块: 
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_READSTATE()
{
	uint8 dat;
	IO0DIR = IO0DIR &~(0x000000ff<<BUS_NO);
	LCM_UNWRITE();
	LCM_COM();
	LCM_READ();
	LCM_ENABLE();
	//DELAY5();
	//DELAY5();
	//DELAY5();
	//InData();
	dat = (uint8)((IO0PIN)>>BUS_NO);
	//LCM_UNREAD();
	//LCM_UNWRITE();
	LCM_DISABLE();
	return dat;
}
/*********************************************************************************************************
** 函数名称: LCM_STA01
** 功能描述: 状态位STA1,STA0判断读写指令和读写数据,在读写数据或者写入命令前必须保证均为1
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: LCM_READSTATE
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_STA01(void)
{
    uint8 i;
    for(i=10;i>0;i--)
    {
        if(( LCM_READSTATE() & 0x03) == 0x03) // 读取状态
        {
            break;
        }
    }
    return(i); // 若返回零说明错误
}
/*********************************************************************************************************
** 函数名称: LCM_STA3
** 功能描述: 状态位STA3
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: LCM_READSTATE
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_STA3(void)
{
    uint8 i;
    for(i=10;i>0;i--)
    {
        if(( LCM_READSTATE() & 0x08) == 0x08) // 读取状态
        {
            break;
        }
    }
    return(i); // 若返回零说明错误
}
/*********************************************************************************************************
** 函数名称: LCM_WrCommand
** 功能描述: 写命令子程序
** 输 入: command  	要写入LCM的命令字
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LCM_WrCommand(uint8 command) 
{
	LCM_UNREAD();
	LCM_COM();
	LCM_WRITE();
	LCM_ENABLE();
	OutData(command);
	//LCM_UNWRITE();
	//LCM_READ();
	LCM_DISABLE();
}
/*********************************************************************************************************
** 函数名称: LCM_WrData
** 功能描述: 写数据子程序
** 输 入: wrdata  	要写入LCM的数据
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LCM_WrData(uint8 wrdata) 
{  
	LCM_UNREAD();
	LCM_DATA();
	LCM_WRITE();
	LCM_ENABLE();
	OutData(wrdata);
	//LCM_UNWRITE();
	//LCM_READ();
	LCM_DISABLE();	 
}
/*********************************************************************************************************
** 函数名称: LCM_WrParameter
** 功能描述: 向LCM写入参数,带双参数,一个参数,或者不带参数
** 输 入: cmd参数;para1参数1;para2参数2;num参数个数 
** 输 出: 返回操作结果       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_WrParameter(uint8 cmd,uint8 para1,uint8 para2,uint8 num)
{
	switch (num)
	{
		case 0x00:
		/*
			if(LCM_STA01() == 0)
    		{
        		return 1;
    		}
    	*/	
   			LCM_WrCommand(cmd);
			break;
		case 0x01:
			/*
			if(LCM_STA01() == 0)
    		{
        		return 1;
    		}
    		LCM_WrData(para1);
    		if(LCM_STA01() == 0)
    		{
       		return 2;
    		}
    		LCM_WrCommand(cmd);
    		*/
    		LCM_WrData(para1);
    		LCM_WrCommand(cmd);
			break;
		case 0x02:
		/*
			if(LCM_STA01() == 0)
    		{
        		return 1;
    		}
    		LCM_WrData(para1);
   			if(LCM_STA01() == 0)
    		{
        		return 2;
    		}
   			 LCM_WrData(para2);
    		if(LCM_STA01() == 0)
    		{
        		return 3;
    		}
    		LCM_WrCommand(cmd);
    	*/	
    	LCM_WrData(para1);
    	LCM_WrData(para2);
    	LCM_WrCommand(cmd);
			break;		
	}
	return 0;
}
/*********************************************************************************************************
** 函数名称: LCM_ReadByte
** 功能描述: 读取指定点上的字节数据
** 输 入: x,y坐标值 
** 输 出: 返回该点上的字节数据       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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