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

📄 s6d0144.c

📁 1.8英寸彩色液晶屏图像文字显示程序,可以用于51单片机(环境keil C51)或者AVR(环境cvAVR)
💻 C
字号:
/*****************************************************************************
Company		:Perfect
LCM moudle	:1.8'/128*160
Made by		:Jaremy
Data		:2006-03-08
Function	:
MCU         :S6D0144
Type		:80 system 16-bit bus interface
Note		:Crystal:40MHz,Vcc=Vci=2.8V

/*******************************************************************************
Name		:
Function	:
Description	:
Modefitied	:
Company		:
Version		:

********************************************************************************/
#include<reg52.h>
#define	DBH		P2
#define	DBL		P0
#define	P4		0xd8
#define red		0xf800
#define green	0x07e0
#define blue	0x001f
#define black	0x0000
#define white	0xffff
#define C		0
#define	D		1

unsigned char a;
unsigned int pic;
bit delayflag=0;

//******************************************************************************
void Initial(void);
void writelcm(int x,bit R);
void WriteRegister(unsigned char RegisterName,unsigned int RegisterValue);
void FillColour(int Colour);
void FillGray(int Gray);
void FillSkripe(void);
void Block(void);
void Field(void);
void Photo(unsigned char Number);
bit KeyScan(void);
void AddressSlect(unsigned char Add);
void write_xdata(int erom);
void Delay(unsigned char i);

//******************************************************************************
sbit CS		=P1^7;
sbit CE1	=P1^3;
sbit CE2	=P1^4;
sbit OE		=P4^0;
sbit RS		=P1^6;
sbit W_R	=P3^6;
sbit R_D	=P3^7;
sbit RES	=P3^5;
sbit A16	=P1^0;
sbit A17	=P1^1;
sbit A18	=P1^2;
sbit G		=P1^5;
sbit DB0	=P1^4;
sbit DB9	=P3^4;
sbit Key0	=P3^2;
sbit Key1	=P3^3;
sbit Key2	=0xda;
sbit Key3	=0xdb;

//******************************************************************************
void main(void)
{
	TMOD=0x01;
    Delay(10);		//Wait for 100 mS
    G=0;
    RES=1;
    Delay(10);
    RES=0;
    Delay(50);
	Initial();
    Delay(50);

	while(1)
	{
		WriteRegister(0x16,0x7f00);		//Seg1-seg128/128 columns
		WriteRegister(0x17,0x9f00);		//Gate1-gate160/160 lines
		for(a=0;a<36;a++)
		{
			WriteRegister(0x21,0x0000);	//GRAM address
			writelcm(0x22,C);
			switch(a)
			{
				case  0:Photo(0);break;
				case  1:Photo(1);break;
				case  2:Photo(2);break;
				case  3:Photo(3);break;
				case  4:Photo(4);break;
				case  5:Photo(5);break;
				case  6:Photo(6);break;
				case  7:Photo(7);break;
				case  8:Photo(8);break;
				case  9:Photo(9);break;
				case 10:Photo(10);break;
				case 11:Photo(11);break;
				case 12:Photo(12);break;
				case 13:Photo(13);break;
				case 14:Photo(14);break;
				case 15:Photo(15);break;
				case 16:Photo(16);break;
				case 17:Photo(17);break;
				case 18:Photo(18);break;
				case 19:Photo(19);break;
				case 20:Photo(20);break;
				case 21:Photo(21);break;
				case 22:Photo(22);break;
				case 23:Photo(23);break;
				case 24:Photo(24);break;
				case 25:Block();break;
				case 26:Field();break;
				case 27:FillColour(red);break;
				case 28:FillColour(green);break;
				case 29:FillColour(blue);break;
                                case 30:FillColour(black);break;
                                case 31:FillColour(white);break;
				case 32:FillSkripe();break;
				case 33:FillGray(red);break;
				case 34:FillGray(green);break;
				case 35:FillGray(blue);break;
				default:break;
			}
			Delay(200);
		}
	}
}

//******************************************************************************
//******************************************************************************
void Initial(void)
{
	Delay(1);
	WriteRegister(0xB4,0x0010);
	WriteRegister(0x07,0x0000);
	WriteRegister(0x13,0x0000);
	Delay(1);
	WriteRegister(0x12,0x0071);
	WriteRegister(0x13,0x080b);
	WriteRegister(0x14,0x78dd);
	WriteRegister(0x10,0x1910);

	WriteRegister(0x01,0x0114);
	WriteRegister(0x02,0x0100);
	WriteRegister(0x03,0x1030);
	WriteRegister(0x08,0x0101);
	WriteRegister(0x0b,0x0005);
	WriteRegister(0x0C,0x0002);
	Delay(10);


        WriteRegister(0x30,0x0000);//r Control
	WriteRegister(0x31,0x0506);
	WriteRegister(0x32,0x0403);
	WriteRegister(0x33,0x0200);
	WriteRegister(0x34,0x0303);
	WriteRegister(0x35,0x0002);
	WriteRegister(0x36,0x0707);
	WriteRegister(0x37,0x0200);
	WriteRegister(0x38,0x0900);
	WriteRegister(0x11,0x000a);

	WriteRegister(0x40,0x0000);//Coordination Control setting
	//WriteRegister(0x41,0x00E5);
	WriteRegister(0x42,0X9f00);
	WriteRegister(0x43,0X9f00);
	WriteRegister(0x44,0x7F00);
	WriteRegister(0x45,0x9f00);

	WriteRegister(0x13,0x081b);
	Delay(5);
	WriteRegister(0x07,0x0037);	//DTE=1
        Delay(2);
//	Initial_RAM_Write(Gram_ini_Pos<<8,Gram_ini_Pos);
}

//******************************************************************************
void FillColour(int Colour)
{
	unsigned char x,y;
	for(y=160;y>0;y--)
		for(x=128;x>0;x--)
			writelcm(Colour,D);
}

//******************************************************************************
void FillGray(int Gray)
{
	unsigned char x,y;
	unsigned char high;
	int decrement;
	switch(Gray)
	{
		case red:decrement=0x1000;break;
		case green:decrement=0x0080;break;
		case blue:decrement=2;break;
		default:break;
	}
	for(y=16;y>0;y--)		//Display 32 level gray on LCD
	{
		for(high=10;high>0;high--)
			for(x=128;x>0;x--)
				writelcm(Gray,D);
		Gray-=decrement;
	}
}

//******************************************************************************
unsigned char code ColourMatrix[]={0xf8,0x00,0x07,0xe0,0x00,0x1f,0xff,0xe0,
								   0xf8,0x1f,0x07,0xff,0x00,0x00,0xff,0xff};
void FillSkripe(void)
{
	unsigned char x,y;
	unsigned char high;
	unsigned char Colour=0;
	for(y=8;y>0;y--)		//Display 7 colour
	{
		pic=ColourMatrix[Colour++];
		pic<<=8;
		pic+=ColourMatrix[Colour++];
		for(high=20;high>0;high--)
			for(x=128;x>0;x--)
				writelcm(pic,D);
	}
}

//******************************************************************************
void Block(void)
{
	unsigned char x1,y1;
	unsigned char x2,y2;
	pic=0;
	for(y1=10;y1>0;y1--)
	{
		for(y2=16;y2>0;y2--)
			for(x1=8;x1>0;x1--)
			{
				for(x2=16;x2>0;x2--)writelcm(pic,D);
				pic=~pic;
			}
			pic=~pic;
	}
}

//******************************************************************************
void Field(void)
{
	unsigned char x;
	unsigned int y;
	WriteRegister(0x21,0x0000);	//GRAM address
	writelcm(0x22,C);
	for(y=0;y<160;y++)
		for(x=0;x<128;x++)
		{
			if((y==0)||(y==1)||(y==79)||(y==80)||(y==158)||(y==159))writelcm(white,D);
			else if((x==0)||(x==1)||(x==63)||(x==64)||(x==126)||(x==127))writelcm(white,D);
			else writelcm(black,D);
		}
}

//******************************************************************************
void writelcm(int x,bit R)
{
    G=0;
    RS=R;
    CS=0;
    DBH=x>>8;
    DBL=x;
    W_R=0;
	W_R=1;
    CS=1;
}

//******************************************************************************
void WriteRegister(unsigned char RegisterName,unsigned int RegisterValue)
{
    G=0;
    RS=0;
    CS=0;
	DBH=0;
	DBL=RegisterName;
    W_R=0;
	W_R=1;
	RS=1;
    DBH=RegisterValue>>8;
	DBL=RegisterValue;
    W_R=0;
	W_R=1;
    CS=1;
}

//******************************************************************************
void write_xdata(int erom)//EXTERNAL DATA WRITE SUB
{
	RS=1;
	CS=0;
	DBL=erom;
	DBH=erom>>8;
	W_R=0;
	W_R=1;
	CS=1;
}

//******************************************************************************
void Photo(unsigned char Number)
{
	unsigned int x,y;
	AddressSlect(Number);
	G=1;
	CE2=1;
	CE1=0;
	G=1;
	for(y=0;y<160;y++)
		for(x=0;x<128;x++)
		{
			if(pic==0xffff)
			{
				AddressSlect(++Number);
				pic=0x0000;
				write_xdata(pic++);
			}
			else write_xdata(pic++);
		}
}

//******************************************************************************
void AddressSlect(unsigned char Add)
{
	pic=5*Add;
	switch(pic&0x00f0)
	{
		case  0x0000:{A18=0;A17=0;A16=0;};break;
		case  0x0010:{A18=0;A17=0;A16=1;};break;
		case  0x0020:{A18=0;A17=1;A16=0;};break;
		case  0x0030:{A18=0;A17=1;A16=1;};break;
		case  0x0040:{A18=1;A17=0;A16=0;};break;
		case  0x0050:{A18=1;A17=0;A16=1;};break;
		case  0x0060:{A18=1;A17=1;A16=0;};break;
		case  0x0070:{A18=1;A17=1;A16=1;};break;
		default:break;
	}
	pic<<=12;
}

//******************************************************************************
void Delay(unsigned char i)
{
	unsigned char b;
	bit key=0;
	for(;i>0;i--)
	{
		b=delayflag==0?1:20;
		for(;b>0;b--)
		{
			TH0=0x7e;TL0=0x00;TR0=1;
			do{key=KeyScan();}while((TF0==0)&&(key==0));	//Delay for 10ms
			TF0=0;
			if(key==1)
			{
				i=1;
				b=1;
			}
		}
	}
	TR0=0;
	delayflag=key;
}

//******************************************************************************
/*Function Name			;Key_Test()											*/
/*Entireness variable	:Key_Value											*/
/*Local variable		:None												*/
/*Description			;This subroutine detects the keyboard and input
						 the value of the key,then return the key value
						 to the program which call it.						*/
bit KeyScan(void)
{
	Key0=Key1=Key2=Key3=1;
	if((Key0&&Key1&&Key2&&Key3)!=1)
	{
		TH1=0x90;TL1=0;TF1=0;TR1=1;while(TF1==0);				//Delay 30ms
		TF1=0;TR1=0;Key0=Key1=Key2=Key3=1;
		if((Key0&&Key1&&Key2&&Key3)!=1)
		{
			if(Key0==0)a=a<24?a:35;						//Photo++
			else if(Key1==0){							//Photo--
				if((a>=1)&&(a<=25))a-=2;
				else if(a==0)a=23;
				else a=23;}
			else if(Key2==0)a=((a>=24)&&(a<35))?a:23;		//Picture++
			else{										//Picture--
				if((a>=26)&&(a<=35))a-=2;
				else if(a==25)a=34;
				else a=34;}
			return 1;
		}
	}										//Keyboard detect faile
	else return 0;
}

⌨️ 快捷键说明

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