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

📄 lds191.c

📁 Lcd_IC:LDS191的初始化和测试程序
💻 C
字号:

#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#include"128x160map.h"
#define nop _nop_()
#define uchar unsigned char
#define uint unsigned int
//#define ID2_Sign  0x7f//0X00~0X7F
//#define ID3S_Sign 0x03//0x00~0x03

#define ID2_Sign  0x20//is b226(1650) use
#define ID3S_Sign 0x01//is b226(1650) use

 sbit  RS =P3^0;
 sbit  W_R=P3^1;
 sbit  R_D=P3^2;
 sbit CS1B=P3^3; 
 sbit RSTB=P3^4;

sbit  LED=P3^7;
sbit MTP_VOP=P1^5;
sbit key_mtp=P1^6;
sbit key_add=P1^7;
sbit key_sub=P1^3;
uchar electron;
uchar temp_add,temp_sub;
 /////////////////////////////////////
void delay_11us(void)
{
	uchar i=1;
	nop;
	nop;
	nop;
    do
    {
    i--;
    }while(i);
}
///////////////////////////
void delay_ms(uchar j)
{
	uchar i;
    while(j)
	{
    for(i=0;i<78;i++)
    delay_11us();
	j--;
	}
}
////////////////////////////////////
uchar ReadData(void)
{
uchar i;
    P0=0XFF;
    RS=1;//read data
    CS1B=0;
	W_R=1;
	R_D=0;
    nop;
	nop;
    nop;
    nop;
	nop;
    nop;
	nop;
    nop;
	i=P0&0xff;
	nop;
    nop;
	nop;
    nop;
	nop;
    nop;
	nop;
    nop;
    R_D=1;
    CS1B=1;
	return i;
}
/////////////////////////////////
void WriteCommand(uchar Data)
{
	RS=0;//Write Commsnd
	CS1B=0;
	W_R=0;
    P0=Data;
    nop;
    W_R=1;
	CS1B=1;
}
//////////////////////////////////
void WriteData(uchar Data)
{	

    CS1B=0;
    RS=1;//Write data
 	W_R=0;
    P0=Data;
    nop;
    W_R=1;
	CS1B=1;
}
/////////////////////////////////////
void set_whole_screen()
 {
WriteCommand(0x2a); //column address set
WriteData(0x00);    //upper 8bit start address
WriteData(0x02);    //lower 8bit start address
WriteData(0x00);    //upper 8bit end address
WriteData(129);     //lower 8bit end address
WriteCommand(0x2b); //row address set
WriteData(0x00);    //upper 8bit start address
WriteData(0x01);    //lower 8bit start address
WriteData(0x00);    //upper 8bit end address
WriteData(160);     //lower 8bit end address
WriteCommand(0x2c);
}
/*
void rgb1()

{
unsigned int i,j,k=0;
unsigned int color;
uchar code gray[7]={2,5,8,11,15,19,31};
set_whole_screen();
    WriteCommand(0x2c);//write memory
	for(i=0;i<154;i++)
	{
		color=gray[i/22];
		color<<=6;
		color|=(gray[i/22]<<1);
		color<<=5;
		color|=gray[i/22];

		for(j=0;j<128;j++)
		{
			WriteData(color>>8); //      
			WriteData((uchar)color);
		}
	}
}
*/
/////////////////////////////////////////
void INT_191(void)
{	
	RSTB=1;
	delay_ms(1);
	RSTB=0;
	delay_ms(10);
	RSTB=1;
	delay_ms(10);
	WriteCommand(0x38);//idle mode off
	
	WriteCommand(0x25);
	WriteData(electron);//write contrast
	WriteCommand(0x11);//sleep out & booster on
	delay_ms(100);
	WriteCommand(0x36);
	WriteData(0Xc0);//MY=1,MX=1,MV=0,ML=0,RGB=0
	WriteCommand(0x3A);
	WriteData(0X05);//16Bit pixel!!!
	
	WriteCommand(0xbc);//bias control
	WriteData(0X01);//00=1/9,01=1/10,10=1/11,11=1/12
	WriteCommand(0xbd);//VXH voltage control
	WriteData(0X03);//00~07
	WriteCommand(0x2a); //column address set
	WriteData(0x00);    //upper 8bit start address
	WriteData(0x02);    //lower 8bit start address 0 2
	WriteData(0x00);    //upper 8bit end address
	WriteData(129);     //lower 8bit end address   129
	WriteCommand(0x2b); //row address set
	WriteData(0x00);    //upper 8bit start address
	WriteData(0x01);    //lower 8bit start address 01
	WriteData(0x00);    //upper 8bit end address
	WriteData(160);     //lower 8bit end address  160
	WriteCommand(0x20);//display inversion off(normal)
	WriteCommand(0x13);//normal display on
	WriteCommand(0x29);//display on
	WriteCommand(0x2c);
}

void EepromDataClear(void)
{
        uchar i;
		WriteCommand(0xD1);        //Write ID2 for EEPROM programming
		WriteData(0x00);           //ID2[6-0]=000000
		WriteCommand(0xD2);        //Write ID3 for EEPROM programming
		WriteData(0x00);           //ID3S[1-0]=00
		WriteCommand(0xD3);        //Electron volume offset
		WriteData(0x00);           //EVOF[5-0]=00000
		WriteCommand(0xD9);        //EEPROM Write start
		delay_ms(220);	           //24M OSC,220ms/2=delay 110ms(min 100ms)

		MTP_VOP=0;                 //append VOP to EPCVD pad,VOP=16V~17V
		for(i=0;i<16;i++)
		delay_ms(200);             //24M OSC,200ms*16/2=delay 1.6s(min 1.5s)
		MTP_VOP=1;                 //remove VOP,VOP=0V!!!
		delay_ms(220);	           //24M OSC,220ms/2=delay 110ms(min 100ms)
		WriteCommand(0xD8);        //EEPROM Write end
		                           //EEPROM init clear data over
}
///////////////////////////////////////
uchar EepromClearVerify(void)
{
uchar i,j;
                                   //EEPROM Clear Data Verification start
        j=0;
		WriteCommand(0xd7);        //EEPROM verify register set
		WriteData(0x81);           //EEVF[7-0]=0X81,Eraser status of EEPROM verify
		WriteCommand(0x11);        //sleep out & booster on
		delay_ms(220);              //delay 10ms(min 5ms)modify from 5ms to 110ms!(2007-08-29)

		WriteCommand(0xdb);//read ID2
		ReadData();//dummy read
		i=ReadData();
		if((i&0x7f)!=0)
		j=1;
		WriteCommand(0xd6);//read EV offset
		i=ReadData();//
		if((i&0x9f)!=0)
		j=1;

		WriteCommand(0xde);//read ID3S Value
		ReadData();//dummy read
		i=ReadData();
		if((i&0x03)!=0) 
		j=1;
		WriteCommand(0xd7);        //EEPROM verify register set
		WriteData(0x00);           //EEVF[7-0]=0X00,exit EEPROM verify
		//EEPROM Clear Data Verification over
		return j;
}

///////////////////////////////////////
void EepromWriteData(void)//eeprom programming
{
//EEPROM Write Data start
uchar i;

		WriteCommand(0xd1);        //Write ID2 for EEPROM programming
		WriteData(ID2_Sign);           //0x01-0x7f
		WriteCommand(0xd2);        //Write ID3S for EEPROM programming
		WriteData(ID3S_Sign);           //0x01-0x03
		if(temp_add>0)
		{
		WriteCommand(0xd3);        //Write electronic volume offset
		WriteData(temp_add);       //Write electronic volume offset
		}
		if(temp_sub>0)
		{
		WriteCommand(0xd3);        //Write electronic volume offset
		WriteData(0x80+temp_sub);  //Write electronic volume offset
		}
		WriteCommand(0x10);               //sleep in & booster off
		WriteCommand(0xd9);           //EEPROM Write start
		delay_ms(220);	           //24M OSC,220ms/2=delay 110ms(min 100ms)
		MTP_VOP=0;                 //append VOP to EPCVD pad,VOP=16V~17V
		for(i=0;i<16;i++)
		delay_ms(200);             //24M OSC,200ms*16/2=delay 1.6s(min 1.5s)
		MTP_VOP=1;                 //remove VOP,VOP=0V!!!
		delay_ms(220);	           //24M OSC,220ms/2=delay 110ms(min 100ms)
		WriteCommand(0xd8);           //EEPROM Write end
}
////////////////////////////////////////
uchar EepromWriteVerify(void)
{
uchar i,k;
k=0;
		WriteCommand(0xd7);        //EEPROM verify register set
		WriteData(0x82);           //EEVF[7-0]=0X82,program status EEPROM verify
		MTP_VOP=0;                 //append VOP to EPCVD pad,VOP=16V~17V
		for(i=0;i<2;i++)
		delay_ms(220);             //24M OSC,220ms/2=delay 110ms(min 100ms)
		WriteCommand(0x11);        //sleep out & booster on
		delay_ms(15);	           //15ms/2=7.5ms (min 5ms)

		WriteCommand(0xdb);//read ID2
		ReadData();//dummy read
		i=ReadData();
		if((i&ID2_Sign)!=ID2_Sign)
		k=1;
		WriteCommand(0xde);//read ID3S Value
		ReadData();//dummy read
		i=ReadData();
		if((i&ID3S_Sign)!=ID3S_Sign)
		k=1;
		WriteCommand(0xd6);//read EV offset
        ReadData();//dummy read
		i=ReadData();
		if(i&0x80)//EOF5==1
		{
			if((i&temp_sub)!=temp_sub)																												
			k=1;
        }
		else
		{
			if((i&temp_add)!=temp_add)																												
			k=1;
		}
		WriteCommand(0xd7);        //EEPROM verify register set
		WriteData(0x00);           //EEVF[7-0]=0X00,exit EEPROM verify
		MTP_VOP=1;                 //remove VOP,VOP=0V!!!
return k;
}

///////////////////////////////////////
void AdjustOptimumDisplay(void)
{
	uchar i,j;
	INT_191();

	set_whole_screen();
	for(i=0;i<160;i++)
	{
		for(j=0;j<128;j++)
		{
			WriteData(0xf8);
			WriteData(0x00);
		}
	}
 while(!key_mtp)
{
	delay_ms(20);
}
	 while(key_mtp)
	{
	delay_ms(20);
	
		while(!key_add)
		{
			delay_ms(20);
			WriteCommand(0x25);
			WriteData(++electron);
			temp_sub=0;
	        temp_add+=2;
			while(!key_add)
			delay_ms(20);
		}
		while(!key_sub)
		{
			delay_ms(20);
			WriteCommand(0x25);
			WriteData(--electron);
			temp_sub+=2;
	        temp_add=0;
			while(!key_sub)
			delay_ms(20);
		}	
	}
}
///////////////////////////////////

LDS191_MTP()
{


	//	uchar Hdata,Ldata;
		uchar i,MtpClearCount;
		uchar temp_electron;
		//EXTC=1;                        //EXTERN CODE ENABLE
		RSTB=0;
		delay_ms(10);
		RSTB=1;
		delay_ms(1);
    //  WriteCommand(0x10);       //sleep in & booster off
    	temp_add=0;	
    	temp_sub=0;	
	    MtpClearCount=4;
	    temp_electron=electron;	
 ResetEraserEEPROM:		             			   
		LED=0;                     //EEPROM init clear data start/
		MtpClearCount--;
	    if(MtpClearCount==0)
		while(1);
        EepromDataClear();
        LED=1;
		WriteCommand(0x11);        //sleep out & booster on
		delay_ms(220);	           //24M OSC,220ms/2=delay 110ms(min 100ms)
        i=EepromClearVerify();
		if(i!=0)
        goto ResetEraserEEPROM;
		AdjustOptimumDisplay();
        EepromWriteData();
		WriteCommand(0x11);        //sleep out & booster on
		delay_ms(220);	           //24M OSC,220ms/2=delay 110ms(min 100ms)
        //i=EepromWriteVerify();
       // if(i!=0)
        //goto ResetEraserEEPROM;

		WriteCommand(0x25);         //EV set
		WriteData(temp_electron);	
		WriteCommand(0x29);         //display on
}

////////////////////////////////

main()
{
	uchar i,j;
	uchar *sp;
	electron=60;//max=127, 60
	while(1)
	{
P0=0XAA;
P3=0X0A;
		for(i=0;i<5;i++)
		delay_ms(255);
P0=0X55;
P3=0X05;
		for(i=0;i<5;i++)
		delay_ms(255);

	}
	INT_191();
	while(1)
	{
		set_whole_screen();
		for(i=0;i<160;i++)
		{
			for(j=0;j<128;j++)
			{
				WriteData(0xf8);
				WriteData(0x00);
			}
		}
		for(i=0;i<5;i++)
		delay_ms(255);

		set_whole_screen();
		for(i=0;i<160;i++)
		{
			for(j=0;j<128;j++)
			{
				WriteData(0x07);
				WriteData(0xe0);
			}
		}
		for(i=0;i<5;i++)
		delay_ms(255);

		set_whole_screen();
		for(i=0;i<160;i++)
		{
			for(j=0;j<128;j++)
			{
				WriteData(0x00);
				WriteData(0x1f);
			}
		}
		for(i=0;i<5;i++)
		delay_ms(255);

		set_whole_screen();
		for(i=0;i<160;i++)
		{
			for(j=0;j<128;j++)
			{
				WriteData(0xff);
				WriteData(0xff);
			}
		}
		for(i=0;i<5;i++)
		delay_ms(255);

		set_whole_screen();
		for(i=0;i<160;i++)
		{
			for(j=0;j<128;j++)
			{
				WriteData(0x00);
				WriteData(0x00);
			}
		}
		for(i=0;i<5;i++)
		delay_ms(255);

		sp=map;
		set_whole_screen();
		for(i=0;i<160;i++)
		{
			for(j=0;j<128;j++)
			{
				WriteData(*sp++);
				WriteData(*sp++);
			}
		}
		for(i=0;i<7;i++)
		delay_ms(255);
	}
}


⌨️ 快捷键说明

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