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

📄 display.c

📁 mb90f387s驱动240128液晶程序
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "resouce.h"

//#define ulong		unsigned long
//#define uint		unsigned int
//#define uchar		unsigned char

extern struct stc_stru stc;
extern union variable var;
extern const unsigned char lcdxy[512];

extern void putchar(unsigned char abyte);
extern void Delay_us_8_4(unsigned char us4);
extern void DelayMs(unsigned char ms);

extern void DelayMsInt(unsigned int ms);
// T6963C 命令定义
#define LC_CUR_POS	0x21		// 光标位置设置
#define LC_CGR_POS	0x22		// CGRAM偏置地址设置
#define LC_ADD_POS	0x24		// 地址指针位置
#define LC_TXT_STP	0x40		// 文本区首址
#define LC_TXT_WID	0x41		// 文本区宽度
#define LC_GRH_STP	0x42		// 图形区首址
#define LC_GRH_WID	0x43		// 图形区宽度
#define LC_MOD_OR	0x80		// 显示方式:逻辑“或”
#define LC_MOD_XOR	0x81		// 显示方式:逻辑“异或”
#define LC_MOD_AND	0x82		// 显示方式:逻辑“与”
#define LC_MOD_TCH	0x83		// 显示方式:文本特征
#define LC_DIS_SW	0x90		// 显示开关:D0=1/0:光标闪烁启用/禁用;
								// 			 D1=1/0:光标显示启用/禁用;
								// 			 D2=1/0:文本显示启用/禁用;
								// 			 D3=1/0:图形显示启用/禁用;
#define LC_CUR_SHP	0xA0		// 光标形状选择:0xA0-0xA7表示光标占的行数
#define LC_AUT_WR	0xB0		// 自动写设置
#define LC_AUT_RD	0xB1		// 自动读设置
#define LC_AUT_OVR	0xB2		// 自动读/写结束
#define LC_INC_WR	0xC0		// 数据一次写,地址加1
#define LC_INC_RD	0xC1		// 数据一次读,地址加1
#define LC_DEC_WR	0xC2		// 数据一次写,地址减1
#define LC_DEC_RD	0xC3		// 数据一次读,地址减1
#define LC_NOC_WR	0xC4		// 数据一次写,地址不变
#define LC_NOC_RD	0xC5		// 数据一次读,地址不变
#define LC_SCN_RD	0xE0		// 屏读
#define LC_SCN_CP	0xE8		// 屏拷贝
#define LC_BIT_OP	0xF0		// 位操作:D0-D2:定义D0-D7位;D3:1置位;0:清除




unsigned char fnST01bb(void)		// 状态位STA1,STA0判断(读写指令和读写数据)
{
	unsigned char i;
	
	LCMDIR = 0;
	LCMCD = 1;
	LCMWR = 1;
	LCMRD = 0;
	i = 2;
	while(i--){__wait_nop();}
	//for(i = 4;i > 0;i--)
	//{
		//if((LCMDATA & 0x03) == 0x03){
			
	//		;//break;
	//	}
	//}
	LCMRD = 1;
	//var.u.testofs++;
	//var.u.testofs %= 8;
	//var.u.test[var.u.testofs] = i;
	
	return 1;	// 若返回零,说明错误
}
unsigned char fnST01(void)		// 状态位STA1,STA0判断(读写指令和读写数据)
{
	unsigned char i;
	
	LCMDIR = 0;
	LCMCD = 1;
	LCMWR = 1;
	LCMRD = 0;
	
	for(i = 10;i > 0;i--)
	{
		if((LCMDATA & 0x03) == 0x03){
			
			break;
		}
	}
	LCMRD = 1;
	//var.u.testofs++;
	//var.u.testofs %= 8;
	//var.u.test[var.u.testofs] = i;
	
	return i;	// 若返回零,说明错误
}
unsigned char fnST2(void)		// 状态位ST2判断(数据自动读状态)
{
	unsigned char i;
	
	LCMDIR = 0;
	LCMCD = 1;
	LCMWR = 1;
	LCMRD = 0;
	
	for(i = 10;i > 0;i--)
	{
		if((LCMDATA & 0x04) == 0x04)
			break;
	}
	LCMRD = 1;
	return i;	// 若返回零,说明错误
}

unsigned char fnST3(void)		// 状态位ST3判断(数据自动写状态)
{
	unsigned char i;
	
	LCMDIR = 0;
	LCMCD = 1;
	LCMWR = 1;
	LCMRD = 0;
	
	for(i = 10;i > 0;i--)
	{
		if((LCMDATA & 0x08) == 0x08)
			break;
	}
	LCMRD = 1;
	return i;	// 若返回零,说明错误
}

unsigned char fnST6(void)		// 状态位ST6判断(屏读/屏拷贝状态)
{
	unsigned char i;
	
	LCMDIR = 0;
	LCMCD = 1;
	LCMWR = 1;
	LCMRD = 0;
	LCMCE = 0;
	for(i = 10;i > 0;i--)
	{
		if((LCMDATA & 0x40) == 0)
			break;
	}
	LCMCE = 1;
	return i;	// 若返回零,说明错误
}

unsigned char fnCmd2(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)	// 写双参数的指令
{
	if(fnST01() == 0){
	    //var.u.flag.lcderr = 1;
		return 1;
    }
	LCMCD = 0;
	LCMRD = 1;
	LCMDIR = 0xff;
	LCMDATA = uPar1;
	LCMWR = 0;
	LCMWR = 1;
	if(fnST01() == 0){
	    //var.u.flag.lcderr = 1;
		return 2;
    }
		
	LCMCD = 0;
	LCMRD = 1;
	LCMDIR = 0xff;
	LCMDATA = uPar2;
	LCMWR = 0;
	LCMWR = 1;
	
	if(fnST01() == 0){
	    //var.u.flag.lcderr = 1;
		return 3;
    }
		
	LCMCD = 1;
	LCMRD = 1;
	LCMDIR = 0xff;
	LCMDATA = uCmd;
	LCMWR = 0;
	LCMWR = 1;

	return 0;	// 返回0成功
}

unsigned char fnCmd2c(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)	// 写双参数的指令
{
	LCMCD = 0;
	LCMRD = 1;
	LCMDIR = 0xff;
	LCMDATA = uPar1;
	LCMWR = 0;
	LCMWR = 1;
	
	LCMDATA = uPar2;
	LCMWR = 0;
	LCMWR = 1;
	
		
	LCMCD = 1;
	LCMDATA = uCmd;
	LCMWR = 0;
	LCMWR = 1;
	LCMCD = 0;
	return 0;	// 返回0成功
}

unsigned char fnCmd1(unsigned char uCmd,unsigned char uPar1)	// 写单参数的指令
{
	if(fnST01() == 0)
		return 1;
	LCMCD = 0;
	LCMWR = 0;
	LCMRD = 1;
	LCMDATA = uPar1;
	LCMDIR = 0xff;
	LCMCE = 0;
	LCMCE = 1;
	if(fnST01() == 0)
		return 3;
	LCMCD = 1;
	LCMWR = 0;
	LCMRD = 1;
	LCMDATA = uCmd;
	LCMDIR = 0xff;
	LCMCE = 0;
	LCMCE = 1;
	return 0;	// 返回0成功
}

unsigned char fnCmd(unsigned char uCmd)		// 写无参数的指令
{
	if(fnST01() == 0)
		return 3;
	//LCMLED = 1;
	LCMCD = 1;
	LCMRD = 1;
	LCMDIR = 0xff;
	LCMDATA = uCmd;
	LCMWR = 0;
	LCMWR = 1;
	return 0;	// 返回0成功
	
	
}

unsigned char fnDataWB(unsigned char uData)		// 写数据
{
	if(fnST3() == 0){
		return 1;
	}else{
		LCMCD = 0;
		LCMDIR = 0xff;
		LCMDATA = uData;
		LCMWR = 0;
	    LCMWR = 1;
	}
	return 0;	// 返回0成功
}
unsigned char fnDataW(unsigned char uData)		// 写数据
{
	    
	    LCMCD = 0;
		LCMDIR = 0xff;
		LCMDATA = uData;
		LCMWR = 0;
	    LCMWR = 1;
	
	return 0;	// 返回0成功
}
unsigned char fnAutoW(unsigned char* src,unsigned int len)		// 写数据
{
	unsigned int i;
	unsigned char abyte;
	abyte = 0;
    if(fnCmd(LC_AUT_WR)){		// 写数据
    	abyte = 1;
    }
    for(i = 0;i < len;i++){
	    if(fnST3() == 0){
		    abyte |= 2;
		}else{
            LCMCD = 0;
		    LCMRD = 1;
		    LCMDIR = 0xff;
	        LCMDATA = src[i];
	        LCMWR = 0;
		    LCMWR = 1;
        }
    }
    if(fnCmd(LC_AUT_OVR)){		// 写数据
    	abyte |= 4;
    }
    return abyte;	// 返回0成功
}

unsigned char fnDataR(void)				// 读数据
{
	if(fnST01() == 0)
		return 1;
	return LCMDATA;
}

// 设置当前地址
void fnSetPos(unsigned char urow, unsigned char ucol)
{
	unsigned int  iPos;

	iPos = urow * 30 + ucol;
	fnCmd2(LC_ADD_POS,iPos & 0xFF,iPos / 256);
	//gCurRow = urow;
	//gCurCol = ucol;
}

// 设置当前显示行、列
void cursor(unsigned char uRow, unsigned char uCol)
{
	fnSetPos(uRow * 16, uCol);
}


/*

*/
void writeh2s(void)
{
    unsigned char i;
    
    
    if(var.u.movea.byte[0]   & var.u.mask){var.u.moveb.bb[0].bit.b7 = 1;}else{var.u.moveb.bb[0].bit.b7 = 0;}
    if(var.u.movea.byte[1]   & var.u.mask){var.u.moveb.bb[0].bit.b6 = 1;}else{var.u.moveb.bb[0].bit.b6 = 0;}
    if(var.u.movea.byte[2]   & var.u.mask){var.u.moveb.bb[0].bit.b5 = 1;}else{var.u.moveb.bb[0].bit.b5 = 0;}
    if(var.u.movea.byte[3]   & var.u.mask){var.u.moveb.bb[0].bit.b4 = 1;}else{var.u.moveb.bb[0].bit.b4 = 0;}
    if(var.u.movea.byte[4]   & var.u.mask){var.u.moveb.bb[0].bit.b3 = 1;}else{var.u.moveb.bb[0].bit.b3 = 0;}
    if(var.u.movea.byte[5]   & var.u.mask){var.u.moveb.bb[0].bit.b2 = 1;}else{var.u.moveb.bb[0].bit.b2 = 0;}
    if(var.u.movea.byte[6]   & var.u.mask){var.u.moveb.bb[0].bit.b1 = 1;}else{var.u.moveb.bb[0].bit.b1 = 0;}
    if(var.u.movea.byte[7]   & var.u.mask){var.u.moveb.bb[0].bit.b0 = 1;}else{var.u.moveb.bb[0].bit.b0 = 0;}
                                                            
                                                            
                                                            
    if(var.u.movea.byte[8]   & var.u.mask){var.u.moveb.bb[1].bit.b7 = 1;}else{var.u.moveb.bb[1].bit.b7 = 0;}
    if(var.u.movea.byte[9]   & var.u.mask){var.u.moveb.bb[1].bit.b6 = 1;}else{var.u.moveb.bb[1].bit.b6 = 0;}
    if(var.u.movea.byte[10]  & var.u.mask){var.u.moveb.bb[1].bit.b5 = 1;}else{var.u.moveb.bb[1].bit.b5 = 0;}
    if(var.u.movea.byte[11]  & var.u.mask){var.u.moveb.bb[1].bit.b4 = 1;}else{var.u.moveb.bb[1].bit.b4 = 0;}
    if(var.u.movea.byte[12]  & var.u.mask){var.u.moveb.bb[1].bit.b3 = 1;}else{var.u.moveb.bb[1].bit.b3 = 0;}
    if(var.u.movea.byte[13]  & var.u.mask){var.u.moveb.bb[1].bit.b2 = 1;}else{var.u.moveb.bb[1].bit.b2 = 0;}
    if(var.u.movea.byte[14]  & var.u.mask){var.u.moveb.bb[1].bit.b1 = 1;}else{var.u.moveb.bb[1].bit.b1 = 0;}
    if(var.u.movea.byte[15]  & var.u.mask){var.u.moveb.bb[1].bit.b0 = 1;}else{var.u.moveb.bb[1].bit.b0 = 0;}
                                                                                                       
    LCMCD = 0;
	LCMRD = 1;
	LCMDIR = 0xff;
	LCMDATA = var.u.locat.byte[0];
	LCMWR = 0;
	LCMWR = 1;                                                                                                   
                                                                                                       
    if(var.u.movea.byte[16]  & var.u.mask){var.u.moveb.bb[2].bit.b7 = 1;}else{var.u.moveb.bb[2].bit.b7 = 0;}
    if(var.u.movea.byte[17]  & var.u.mask){var.u.moveb.bb[2].bit.b6 = 1;}else{var.u.moveb.bb[2].bit.b6 = 0;}
    if(var.u.movea.byte[18]  & var.u.mask){var.u.moveb.bb[2].bit.b5 = 1;}else{var.u.moveb.bb[2].bit.b5 = 0;}
    if(var.u.movea.byte[19]  & var.u.mask){var.u.moveb.bb[2].bit.b4 = 1;}else{var.u.moveb.bb[2].bit.b4 = 0;}
    if(var.u.movea.byte[20]  & var.u.mask){var.u.moveb.bb[2].bit.b3 = 1;}else{var.u.moveb.bb[2].bit.b3 = 0;}
    if(var.u.movea.byte[21]  & var.u.mask){var.u.moveb.bb[2].bit.b2 = 1;}else{var.u.moveb.bb[2].bit.b2 = 0;}
    if(var.u.movea.byte[22]  & var.u.mask){var.u.moveb.bb[2].bit.b1 = 1;}else{var.u.moveb.bb[2].bit.b1 = 0;}
    if(var.u.movea.byte[23]  & var.u.mask){var.u.moveb.bb[2].bit.b0 = 1;}else{var.u.moveb.bb[2].bit.b0 = 0;}
                                                                                                       
                                                                                                       
                                                                                                       
    if(var.u.movea.byte[24]  & var.u.mask){var.u.moveb.bb[3].bit.b7 = 1;}else{var.u.moveb.bb[3].bit.b7 = 0;}
    if(var.u.movea.byte[25]  & var.u.mask){var.u.moveb.bb[3].bit.b6 = 1;}else{var.u.moveb.bb[3].bit.b6 = 0;}
    if(var.u.movea.byte[26]  & var.u.mask){var.u.moveb.bb[3].bit.b5 = 1;}else{var.u.moveb.bb[3].bit.b5 = 0;}

⌨️ 快捷键说明

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