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

📄 a08htest.c

📁 yeboo lcd104X160 display
💻 C
字号:
//***********************************************
//A08htest.c--为A08机型手控器液晶模块测试试验程序
//1、采用江门亿都YG160104点阵液晶模块显示
//2、控制单片机--PIC18LF452
//**********************************************
#include <pic18.h>

#define UCHAR unsigned char
#define UINT unsigned int

//I/O口定义
#define bCS1B 	RC0
#define bCS2	RC1
#define bRESET	RC2
#define bRS		RC3
#define bRW		RC5
#define bEN		RC4

#define bBackLed RE0
//读状态寄存器
UCHAR  ReadState()
{
	UCHAR mTemp;
	bRS=0;bRW=1;//bEN=0;
	bCS1B=0;bCS2=1;
	asm("nop");asm("nop");
	bEN=1;
	asm("nop");
	mTemp=PORTD;
	bEN=0;
	bCS1B=1;bCS2=0;
	return(mTemp);
}
//写指令
void WriteIns(UCHAR mInsWord)
{
	bRS=0;bRW=0;//bEN=0;
	bCS1B=0;bCS2=1;
	asm("nop");asm("nop");
	bEN=1;
	asm("nop");
	PORTD=mInsWord;
	asm("nop");
	bEN=0;
	bCS1B=1;bCS2=0;
}
//写显示数据
void WriteData(UCHAR mDisData)
{
	bRS=1;bRW=0;//bEN=0;
	bCS1B=0;bCS2=1;
	asm("nop");asm("nop");
	bEN=1;
	asm("nop");
	PORTD=mDisData;
	asm("nop");
	bEN=0;
	bCS1B=1;bCS2=0;
}
//读显示数据


//图形描述
//图形子元素
const UCHAR ROU_16[]=
{
//*--  文字:  揉  --*/
//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0xFE,0x90,0x50,0x80,0x92,0x52,0x32,0xFA,0x1A,0x16,0x32,0x10,0x00,
0x04,0x44,0x82,0x7F,0x00,0x40,0x42,0x22,0x1A,0x07,0xFF,0x0A,0x32,0x62,0x22,0x00,

};
const UCHAR NIE_16[]=
{
//*--  文字:  捏  --*/
//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0xFF,0x50,0x10,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,
0x02,0x42,0x81,0x7F,0x00,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x40,0x00,
};
const UCHAR QIAO_16[]=
{
//*--  文字:  敲  --*/
//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x04,0x04,0x74,0x55,0x56,0x54,0x74,0x04,0xC4,0x40,0x7F,0x48,0x48,0xC8,0x48,0x00,
0xFF,0x01,0x1D,0x15,0x15,0x5D,0x81,0x7F,0x40,0x23,0x14,0x18,0x66,0xC1,0x40,0x00,
};
const UCHAR JI_16[]=
{
//*--  文字:  击  --*/
//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x88,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0xC0,0x80,0x00,
0x00,0x00,0x00,0x7E,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x7E,0x00,0x00,0x00,
};
//图形元素
const struct BmpStruct
{
	UCHAR mPage;  //起始页(0~12)
	UCHAR mColumn;   //起始列(0~159)
	UCHAR mHight;  //图形子元素高度(1~13)
	UCHAR mWidth; //图形子元素宽度 (1~160)
	UCHAR mSubElemUnit; //图形子元素个数
	const  UCHAR   *mSubElemTab[6];  //图形子元素地址表
};

//图形
const struct BmpStruct Bmp1[]=
{
	{0,0,2,16,2,{ROU_16,NIE_16}},
	{2,0,2,16,4,{ROU_16,NIE_16,QIAO_16,JI_16}},
};

//连续写子元素的数据
void DrawSubElemData(UCHAR mPage,UCHAR mColumn,UCHAR mHight,UCHAR mWidth,UCHAR *pSubElemTab)
{
	UCHAR mTempPage,mTempColumn;
	UCHAR mTempHight,mTempWidth;
	UCHAR mDisData;
	UCHAR i,x;
	UCHAR mTempY;
	mTempHight=mHight;mTempWidth=mWidth;
	mTempPage=mPage;mTempColumn=mColumn;
	for(x=0;x<mTempHight;x++)
	{
		WriteIns(mTempPage|0xb0);
		mTempColumn=mColumn;
		mTempColumn>>=4;
		mTempColumn &=0x0f;
		mTempColumn |=0x10;
		WriteIns(mTempColumn);
		mTempColumn=mColumn;
		mTempColumn &=0x0f;
		WriteIns(mTempColumn);
		//bRS=1;bRW=0;bEN=0;
		//bCS1B=0;bCS2=1;
		asm("nop");asm("nop");
		for(i=0;i<mTempWidth;i++)
		{
			mDisData=pSubElemTab[i];
			WriteData(mDisData);
			//PORTD=mDisData;
			//asm("nop");
			//bEN=1;
			//asm("nop");
			//bEN=0;
		}
		//bCS1B=1;bCS2=0;	
		mTempPage++;
	}
}

//画图形
void DrawBmp(const struct BmpStruct *pBmpTab,UCHAR mBmpUnit)
{
	UCHAR mTempPage1,mTempColumn1;
	UCHAR mTempHight1,mTempWidth1;
	UCHAR mTempSubElemUnit1;
	UCHAR i,x;
	for(i=0;i<mBmpUnit;i++)
	{
		//画图形元素
		mTempPage1=pBmpTab[i].mPage;
		mTempColumn1=pBmpTab[i].mColumn;
		mTempHight1=pBmpTab[i].mHight;
		mTempWidth1=pBmpTab[i].mWidth;
		mTempSubElemUnit1=pBmpTab[i].mSubElemUnit;
		for(x=0;x<mTempSubElemUnit1;x++)
		{
			//画图形子元素
			mTempColumn1=mTempColumn1+(x*mTempWidth1);
			DrawSubElemData(mTempPage1,mTempColumn1,mTempHight1,mTempWidth1,pBmpTab[i].mSubElemTab[x]);	
		}	
	}
}


UCHAR mDisData;
void DrawBmpxx(UCHAR mPage,UCHAR mColumn,const UCHAR *pStringTab)
{
	UCHAR mTempPage,mTempColumn;
	UCHAR i,x;
	UCHAR mPageCount;
	mTempPage=mPage;
	mPageCount=0;
	for(x=0;x<2;x++)
	{
		WriteIns(mTempPage|0xb0);
		mTempColumn=mColumn;
		mTempColumn>>=4;
		mTempColumn &=0x0f;
		mTempColumn |=0x10;
		WriteIns(mTempColumn);
		mTempColumn=mColumn;
		mTempColumn &=0x0f;
		WriteIns(mTempColumn);
		bRS=1;bRW=0;bEN=0;
		bCS1B=0;bCS2=1;
		asm("nop");asm("nop");
		for(i=0;i<16;i++)
		{
			mDisData=pStringTab[i+16*mPageCount];
			//WriteData(mDisData);
			PORTD=mDisData;
			asm("nop");
			bEN=1;
			asm("nop");
			bEN=0;
		}
		bCS1B=1;bCS2=0;	
		mTempPage++;
		mPageCount++;
	}
}


UCHAR mTempTime;
void Delay1ms(UCHAR mDelayTime)
{

	while(mDelayTime)
	{
		mDelayTime--;
		mTempTime=50;
		while(mTempTime)
		{
			mTempTime--;
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");
		}	
	}	
}
//液晶模块初始化
void ModuleInt()
{
	bRESET=0;
	Delay1ms(50);
	bRESET=1;
	Delay1ms(5);
	bCS1B=0;
	WriteIns(0x48); //set duty
	WriteIns(0x68);
	Delay1ms(1);
	WriteIns(0xa0); //set ADC
	Delay1ms(1);
	WriteIns(0xc0); //set SHL
	Delay1ms(1);
	WriteIns(0x44); //set COM0
	WriteIns(0x00);
	Delay1ms(1);
	WriteIns(0xab); //set OSC
	Delay1ms(1);
	WriteIns(0x67); //set DC/DC+++++++++
	Delay1ms(1);
	WriteIns(0x26); //set Ra/Rb
	Delay1ms(1);
	WriteIns(0x81); //set Register
	WriteIns(56); 
	Delay1ms(1);

	WriteIns(0x57); //set BIAS
	Delay1ms(1);
	WriteIns(0x2c); //set Power control
	WriteIns(0x2e);
	WriteIns(0x2f);
	Delay1ms(30);
}
//液晶模块清屏
void ModuleClr()
{
	
	UCHAR mTempColumn,mTempPage;
	UCHAR i;
	bCS1B=0;
	for(mTempPage=0;mTempPage<13;mTempPage++)
	{
		WriteIns(mTempPage|0xb0);
		WriteIns(0x10);
		WriteIns(0x00);
		for(mTempColumn=0;mTempColumn<160;mTempColumn++)
		{
			WriteData(0x00);	
		}	
	}
}

//系统初始化
void SystemInt()
{
	ADCON0=0x00;
	ADCON1=0x06; 
	TRISA=0x00;
	TRISB=0x00;
	TRISC=0x00;
	TRISD=0x00;
	TRISE=0x00;
	
	bCS1B=1;bCS2=1;bEN=0;
}
//主程序
const UCHAR *pSubElemTab;
void main()
{
	
	SystemInt();
	bBackLed=1;
	bCS1B=0;
	ModuleInt();
	ModuleClr();
	WriteIns(0xaf); //display on
	
	while(1)
	{
		DrawBmpxx(0,0,ROU_16);
		DrawBmpxx(0,16,NIE_16);
		DrawBmpxx(0,32,QIAO_16);
		DrawBmpxx(0,48,JI_16);

		DrawBmpxx(0,64,ROU_16);
		DrawBmpxx(0,80,NIE_16);
		DrawBmpxx(0,96,QIAO_16);
		DrawBmpxx(0,112,JI_16);	

		DrawBmpxx(0,128,ROU_16);
		DrawBmpxx(0,144,NIE_16);
	
		DrawBmpxx(2,0,ROU_16);
		DrawBmpxx(2,16,NIE_16);
		DrawBmpxx(2,32,QIAO_16);
		DrawBmpxx(2,48,JI_16);

		DrawBmpxx(2,64,ROU_16);
		DrawBmpxx(2,80,NIE_16);
		DrawBmpxx(2,96,QIAO_16);
		DrawBmpxx(2,112,JI_16);	

		DrawBmpxx(2,128,ROU_16);
		DrawBmpxx(2,144,NIE_16);

		DrawBmpxx(4,0,ROU_16);
		DrawBmpxx(4,16,NIE_16);
		DrawBmpxx(4,32,QIAO_16);
		DrawBmpxx(4,48,JI_16);

		DrawBmpxx(4,64,ROU_16);
		DrawBmpxx(4,80,NIE_16);
		DrawBmpxx(4,96,QIAO_16);
		DrawBmpxx(4,112,JI_16);	

		DrawBmpxx(4,128,ROU_16);
		DrawBmpxx(4,144,NIE_16);

		DrawBmpxx(6,0,ROU_16);
		DrawBmpxx(6,16,NIE_16);
		DrawBmpxx(6,32,QIAO_16);
		DrawBmpxx(6,48,JI_16);

		DrawBmpxx(6,64,ROU_16);
		DrawBmpxx(6,80,NIE_16);
		DrawBmpxx(6,96,QIAO_16);
		DrawBmpxx(6,112,JI_16);	

		DrawBmpxx(6,128,ROU_16);
		DrawBmpxx(6,144,NIE_16);

		DrawBmpxx(8,0,ROU_16);
		DrawBmpxx(8,16,NIE_16);
		DrawBmpxx(8,32,QIAO_16);
		DrawBmpxx(8,48,JI_16);

		DrawBmpxx(8,64,ROU_16);
		DrawBmpxx(8,80,NIE_16);
		DrawBmpxx(8,96,QIAO_16);
		DrawBmpxx(8,112,JI_16);	

		DrawBmpxx(8,128,ROU_16);
		DrawBmpxx(8,144,NIE_16);

			DrawBmpxx(10,0,ROU_16);
		DrawBmpxx(10,16,NIE_16);
		DrawBmpxx(10,32,QIAO_16);
		DrawBmpxx(10,48,JI_16);

		DrawBmpxx(10,64,ROU_16);
		DrawBmpxx(10,80,NIE_16);
		DrawBmpxx(10,96,QIAO_16);
		DrawBmpxx(10,112,JI_16);	

		DrawBmpxx(10,128,ROU_16);
		DrawBmpxx(10,144,NIE_16);
	}	
}





⌨️ 快捷键说明

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