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

📄 lm3123_example.c

📁 拓普微公司液晶模块 TN LCM驱动程序2。
💻 C
字号:
//-----------------------------------------
// Shenzhen TOPWAY Technology Co. Ltd.
// LCD Module:        LM3123
// Display size:      160x32
// Driver/Controller: AX6120/AX6121
// Date:              2005-02-26
//-----------------------------------------
#include <stdio.h>
#include <reg51.h>
#include <intrins.h>

#define u_char  unsigned char
#define u_int   unsigned int

sbit _RES	= P3^5;	
sbit E1		= P3^1;
sbit E2		= P3^2;
sbit E3		= P3^3;
sbit A0		= P3^6;
sbit R_W	= P3^7;
// DataBus = P1

//====================
// Display Data
//====================
/*--  160x32         --*/
/*--  LM3123 Logo    --*/
u_int code Logo1[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x7F,0x01,0x01,0x00,
0x3E,0x41,0x41,0x41,0x3E,0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x3F,0x40,0x38,0x40,
0x3F,0x00,0x7C,0x0A,0x09,0x0A,0x7C,0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,
0x22,0x41,0x49,0x49,0x36,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x42,0x61,0x51,0x49,
0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x7F,0x04,
0x08,0x10,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,
0x3E,0x41,0x41,0x41,0x22,0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00,0x40,0x30,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x3E,0x49,
0x49,0x49,0x30,0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x44,0x28,0x10,0x28,0x44,0x00,
0x22,0x41,0x49,0x49,0x36,0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0x14,0x14,0x14,0x08,0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x44,0x28,
0x10,0x28,0x44,0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00,0x41,0x7F,0x40,0x00,0x00,
0x48,0x54,0x54,0x54,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x42,0x7F,0x40,0x00,0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x49,
0x36,0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x3E,0x49,
0x49,0x49,0x30,0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x36,0x49,0x49,0x49,0x36,0x00,
0x26,0x49,0x49,0x49,0x3E,0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,0x42,0x7F,0x40,
0x00,0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x18,0x14,
0x12,0x7F,0x10,0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x3E,0x49,0x49,0x49,0x30,0x00,
0x01,0x01,0x79,0x05,0x03,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x26,0x49,0x49,0x49,
0x3E,0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x42,0x61,
0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x18,0x14,0x12,0x7F,0x10,0x00,
0x27,0x45,0x45,0x45,0x39,0x00,0x3E,0x49,0x49,0x49,0x30,0x00,0x01,0x01,0x79,0x05};

//====================
// delay routine
//====================
void delay100us(void)	//delay 100us for 12MHz
{
u_char data i;
for(i=0;i<=70;i++)
	{_nop_(); _nop_();}
}

void delay1ms(void)		//delay 1ms for 12MHz
{
u_char data i;
for(i=0;i<=250;i++)
	{_nop_(); _nop_();}
}

void delay100ms(void)
{
u_char data j;
for(j=0;j<=100;j++)
	{delay1ms();}	
}


//====================
// write command
//====================
void wr_command(u_char ChipNo,command)
{
P1 = command;
A0=0;
R_W=0;
_nop_();
switch(ChipNo)
	{
	case 0:	E1=1; E2=1; E3=1;  break;// write into all driver
	case 1:	E1=1; E2=0; E3=0;  break;// write into 1st driver
	case 2:	E1=0; E2=1; E3=0;  break;// write into 2nd driver
	case 3:	E1=0; E2=0; E3=1;  break;// write into 3rd driver
	}
E1=0; E2=0; E3=0;
delay100us();
}

//====================
// write data
//====================
void wr_data(u_char ChipNo,ddata)
{
P1 = ddata;
A0=1;
R_W=0;
_nop_();
switch(ChipNo)
	{
	case 0:	E1=1; E2=1; E3=1; break; // write into all driver
	case 1:	E1=1; E2=0; E3=0; break; // write into 1st driver
	case 2:	E1=0; E2=1; E3=0; break; // write into 2nd driver
	case 3:	E1=0; E2=0; E3=1; break; // write into 3rd driver
	}
E1=0; E2=0; E3=0;
}

//====================
// clear screen
//====================
void ClrScreen()	// fill 00h into DD RAM
{
u_char i,j;
for(i=0;i<4;i++)
    	{
    	wr_command(0,0xb8 | i);	// select page
    	wr_command(0,0x00);	// start form column 0
    	for(j=0;j<80;j++)
	    	{
	    	wr_data(0,0x00);// fill 00h in to DD RAM
    		}
    	}
}

//====================
// Write a Screen
//====================
void WriteScreen(u_int *DisplayData)	// DisplayData should be 160x32/8 = 640 bytes
{
	u_char TempData;
	u_char i, j;
	for(i=0;i<4;i++)
	{
    	wr_command(0,0xb8 | i);	// select page
    	wr_command(1,0x14);	// chip1 start form column 14h
    	wr_command(2,0x00);	// chip2 start form column 00h	
    	wr_command(3,0x13);	// chip3 start form column 13h  	
     	for(j=0;j<159;j++)
     		{
     		TempData=(*(DisplayData+(i*160)+j));
     		if (j<60)
			{
	     		wr_data(1,TempData);	// 0-59 column goto chip1
			}
    		else if ((j>=60)&(j<=139))
			{
	     		wr_data(2,TempData);	// 60-140 column goto chip2
			}
    		else
			{
	     		wr_data(3,TempData);	// 141-160 column goto chip3
			}
 		}
    	}
    	
}

//====================
// Write Icons Data
//====================
void WriteIcons(void)
{
    	wr_command(0,0xb8 | 1);	// icons mapped at page 1
    	wr_command(1,0x13);	// icons Mapped at column 13h
	wr_data(1,0xF0);	// turn on all icons
}

//====================
// Init LCD module
//====================
void initLCDM(void)
{
	E1=0; E2=0; E3=0;	// init E status
	_RES = 1;
	delay1ms();
	_RES = 0;
	delay1ms();
	_RES = 1;		// _RES=1, 68 I/F mode
	wr_command(0,0xa9);	// set duty cycle 1/32
	wr_command(0,0xa4);	// static drive = OFF
	wr_command(0,0xa1);	// adc=1
	wr_command(0,0xc0);	// display start line =0;
	wr_command(0,0xaf);	// display ON;
	//wr_command(0,0xee);   // read modify write=Off;
}

//************************
// Main Program
//************************
void main(void)
{
SP = 0x60;			// stack pointer
EA = 0; 			// disable interrupts

initLCDM();			// init LCD module
ClrScreen();			// clear DD RAM
WriteScreen(Logo1);		// send a screen of display
WriteIcons();			// accessing icons

while(1)			// end of program
	{
	_nop_();
	}
}

⌨️ 快捷键说明

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