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

📄 lm3122_example.c

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

#define u_char  unsigned char
#define u_int   unsigned int

sbit RES	= P3^5;	
sbit _WR1	= P3^1;
sbit _WR2	= P3^2;
sbit _WR3	= P3^3;
sbit A0		= P3^6;
// DataBus = P1

//====================
// Display Data
//====================
/*--  TOPWAY 202x32     --*/
u_int code Logo1[]={
0xFE,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0xFE,0x00,0x00,0x80,
0xE0,0x70,0x38,0x18,0x0C,0x06,0x06,0x02,0x03,0x01,0x81,0x81,0x81,0x81,0x81,0x81,
0x81,0x01,0x03,0x02,0x06,0x06,0x0C,0x1C,0x38,0x70,0xE0,0xC0,0x00,0x00,0x00,0x00,
0xFE,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x02,0x02,0x02,0x02,0x06,0x04,0x04,0x0C,0x18,0x30,0xE0,0xC0,0x00,0x06,0x7E,0xFA,
0x82,0x02,0x02,0x02,0x02,0x02,0xFE,0xFE,0x80,0x00,0x00,0x00,0x00,0xF0,0xFE,0x1E,
0x02,0x02,0x02,0x02,0x02,0x1E,0xFE,0xF0,0x00,0x00,0x00,0x00,0x80,0xFE,0xFE,0x02,
0x02,0x02,0x02,0x02,0x82,0xFA,0x7E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xE0,0xFC,0x1E,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x1E,0xFC,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0E,0x1E,0x7A,0xE2,0x82,0x02,
0x02,0x02,0x02,0x06,0x1E,0x78,0xE0,0x80,0x00,0x00,0x00,0x80,0xE0,0x78,0x1E,0x06,
0x02,0x02,0x02,0x02,0x82,0xE2,0x7A,0x1E,0x0E,0x02,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xF8,0xFF,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,
0xF0,0xFE,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0xFE,0xF0,0x00,
0x00,0x00,0x00,0x00,0x01,0x07,0xFF,0xF8,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0x7F,0x41,0x41,0x41,0x41,0x41,0x41,0x63,0x3E,0x1C,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x07,0xFF,0xF8,0x80,0x00,0x00,0x00,
0x00,0x3F,0xFF,0xE0,0x00,0xC0,0xFE,0x7F,0x03,0x00,0x80,0xFC,0xFC,0xFC,0x80,0x00,
0x03,0x7F,0xFE,0xC0,0x00,0xE0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x80,0xF8,0xFF,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0x3F,0x07,0x00,0x00,0x00,0x00,
0xF0,0xFE,0x0F,0xFE,0xE0,0x00,0x00,0x00,0x00,0x07,0x3F,0xF8,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1E,0x38,0xE0,0xC0,0x00,0x00,0x00,
0x01,0x07,0x1E,0x38,0x1E,0x07,0x01,0x00,0x00,0x00,0xC0,0xE0,0x38,0x1E,0x07,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0xF0,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0x7F,0x0F,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,
0xFF,0x1F,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x10,0x10,0x18,0x0C,0x0E,0x07,0x01,
0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF8,0x80,0x00,0x00,0x00,0x0F,0xFF,0xFE,0x7F,
0x03,0x00,0x00,0xE0,0xFF,0x1F,0x00,0x1F,0xFF,0xE0,0x00,0x00,0x03,0x7F,0xFE,0xFF,
0x0F,0x00,0x00,0x00,0x80,0xF8,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,
0xF8,0x3F,0x07,0x01,0x00,0x00,0x00,0x00,0x78,0x7F,0x47,0x40,0x40,0x40,0x47,0x7F,
0x78,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xF8,0xFC,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0E,
0x1C,0x18,0x30,0x60,0x60,0x40,0xC0,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,
0xC0,0x40,0x60,0x60,0x30,0x18,0x1C,0x0E,0x07,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0xFF,0xF0,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0xF8,0xFF,0x07,0x00,
0x00,0x00,0x07,0xFF,0xF8,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0xF0,0xFF,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0x8F,0x81,0x80,0x80,0x80,0x80,0xC0,
0xF8,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0xF8,0xC0,0x80,0x80,
0x80,0x80,0x81,0x8F,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

//====================
// 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;
_nop_();
switch(ChipNo)
	{
	case 0:	_WR1=0; _WR2=0; _WR3=0;  break;// write into all driver
	case 1:	_WR1=0; _WR2=1; _WR3=1;  break;// write into 1st driver
	case 2:	_WR1=1; _WR2=0; _WR3=1;  break;// write into 2nd driver
	case 3:	_WR1=1; _WR2=1; _WR3=0;  break;// write into 3rd driver
	}
_WR1=1; _WR2=1; _WR3=1;
delay100us();
}

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

//====================
// 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 202x32/8 = 808 bytes
{
	u_char TempData;
	u_char i, j;
	for(i=0;i<4;i++)
	{
    	wr_command(0,0xb8 | i);	// select page
    	wr_command(0,0);	// all chip start form column 0
     	for(j=0;j<201;j++)
     		{
     		TempData=(*(DisplayData+(i*202)+j));
     		if (j<61)
			{
	     		wr_data(1,TempData);	// 0-60 column goto chip1
			}
    		else if ((j>=61)&(j<=140))
			{
	     		wr_data(2,TempData);	// 61-141 column goto chip2
			}
    		else
			{
	     		wr_data(3,TempData);	// 141-201 column goto chip3
			}
 		}
    	}
    	
}

//====================
// Init LCD module
//====================
void initLCDM(void)
{
	_WR1=1; _WR2=1; _WR3=1;	// init WR status
	RES = 0;
	delay1ms();
	RES = 1;
	delay1ms();
	RES = 0;		// RES=0, 80 I/F mode
	wr_command(0,0xa9);	// set duty cycle 1/32
	wr_command(0,0xa4);	// static drive = OFF
	wr_command(0,0xa0);	// adc=0
	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

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

⌨️ 快捷键说明

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