lcd12232.c

来自「我刚写的TG12232E的测试程序,V0的电压很重要,要接个电位器仔细调节」· C语言 代码 · 共 449 行

C
449
字号

#include <reg52.h>
#include <absacc.h>
#include <intrins.h>

//TG12232E 串行方式测试程序
//22.1184MHz  AT89C52
//V0(第3脚)接电位器,要仔细调节电位器,应用中PSB可以直接接地
//第1脚地线,第2脚+5V
//7-14脚空
//17脚+5V
//18脚接地线

sbit bitCS    = P3^0;    //RS	   第4脚
sbit bitSID   = P3^1;    //RW	   第5脚
sbit bitSCLK  = P3^2;    //E	   第6脚
sbit bitPSB   = P3^3;	 //PSB	   第15脚
sbit bitRESET = P3^4;	 //RESET   第16脚

code unsigned char* textlist = "冬冬QQ:3136822  TG12232E测试    ";

code unsigned char* gb = "TG12232E测试    冬冬QQ:3136822  ";

//图片尺寸: 128 * 32
code unsigned char picture1[] =
{
      0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xE0,
      0xEE,0x7F,0xDF,0xFF,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xFF,0xF7,0x00,
      0xDF,0xFF,0xBF,0xFF,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xFF,0xCC,0x71,
      0xBF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xFF,0xC1,0xFC,
      0x30,0xC1,0xFF,0xFF,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xBF,0xC7,0xFF,
      0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0x3F,0x9F,0xC7,
      0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0x1F,0xBF,0xC4,
      0x00,0x00,0x3F,0xFF,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFE,0x1F,0xB9,0xE4,
      0x00,0x07,0x9F,0xFF,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFE,0x1F,0xA9,0xFC,
      0x00,0x0F,0xCF,0xFF,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFE,0x1F,0x83,0xC8,
      0x00,0x0D,0xEF,0xFF,0x80,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFE,0x1F,0x89,0x48,
      0x00,0x1E,0x6F,0xFF,0x80,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0x1F,0x84,0x48,
      0x00,0x36,0x2F,0xFF,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0x9F,0x82,0x10,
      0x00,0x37,0x3F,0xFE,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0x9F,0x01,0xE0,
      0x00,0x3F,0xEF,0xFC,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0xDF,0x00,0x00,
      0x00,0x3F,0xAF,0xF8,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,
      0x00,0x25,0x5F,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,
      0x00,0x23,0x9F,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,
      0x01,0x1C,0x3F,0xE0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,
      0x01,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFD,0xFF,0x00,0x00,
      0x01,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFB,0xFF,0x00,0x00,
      0x02,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x07,0xFB,0xFF,0x80,0x00,
      0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x07,0xF3,0xFF,0x80,0x00,
      0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x07,0xE7,0xFF,0xC0,0x00,
      0x7E,0x01,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x0F,0xEF,0xFF,0xC0,0x00,
      0x1C,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x0F,0xCF,0xFF,0xE0,0x00,
      0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x1F,0x9F,0xFF,0xF0,0x00,
      0x38,0x0F,0xF7,0xFE,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x1F,0x9F,0xFF,0xF8,0x00,
      0x00,0x1F,0xF7,0xFF,0xE0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x3F,0x3F,0xFF,0xFC,0x00,
      0x00,0x3F,0xF6,0x80,0x18,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7F,0x3F,0xFF,0xE7,0x00,
      0x00,0x5F,0xF6,0xC0,0x04,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7E,0x7F,0xFF,0xC4,0x80,
      0x00,0xBF,0xF7,0x60,0x03,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7E,0x7F,0xF7,0xC4,0x60,
      0x03,0x3F,0xF3,0x60,0x00,0x80,0x00,0x00
};


//--  宽度x高度=128x32  --
code unsigned char picture2[] = 
{     0x00,0x00,0x00,0xFF,0x8C,0xFC,0x3F,0xC1,
      0x00,0x10,0x00,0x0F,0xFC,0x78,0x00,0x00,
      0x00,0x00,0x00,0xFF,0x8C,0xFC,0x7F,0xE1,
      0x00,0x00,0x00,0x0F,0xFC,0x3C,0x00,0x00,
      0x00,0x00,0x00,0xFF,0x8C,0xFE,0xF0,0xF1,
      0x00,0x00,0x00,0x07,0xFD,0xBC,0x00,0x00,
      0x00,0x00,0x00,0xFF,0xBC,0xFF,0xE0,0x79,
      0x00,0x00,0x00,0x07,0xFD,0xBC,0x00,0x00,
      0x00,0x00,0x00,0xFF,0x3C,0xFE,0xE6,0x79,
      0x00,0x00,0x00,0x07,0xFD,0xFC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0x38,0xFF,0xE6,0x78,
      0x00,0x00,0x00,0x07,0xFD,0xFC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0x38,0xFE,0xE6,0xF8,
      0x00,0x00,0x00,0x07,0xFD,0xFC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0x78,0xFE,0xC7,0xF8,
      0x00,0x00,0x00,0x07,0xFD,0xFC,0x00,0x00,
      0x00,0x00,0x01,0xFE,0x78,0xFF,0x07,0xF8,
      0x00,0x00,0x00,0x07,0xFD,0xFC,0x00,0x00,
      0x00,0x00,0x01,0xFE,0x78,0xFE,0x07,0xF8,
      0x00,0x03,0xFC,0x07,0xFF,0xFC,0x00,0x00,
      0x00,0x00,0x01,0xFE,0xFB,0xFE,0x03,0xD8,
      0x00,0x00,0xFF,0xC3,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x01,0xFE,0xFB,0xFE,0x03,0xF0,
      0x00,0x00,0x7F,0xFF,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0xFB,0xFE,0x0D,0xF0,
      0x00,0x00,0x00,0x0F,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0xFB,0xFE,0x0F,0xC0,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0xFB,0xFE,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x01,0xFF,0xFB,0xBE,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x05,0xFF,0xFB,0xBE,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x23,0xFF,0xFF,0x7E,0x00,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x01,0x21,0xFF,0xFF,0x7E,0x00,0x00,
      0x80,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0xE1,0xFF,0xFF,0x7E,0x00,0x01,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x71,0xFF,0xFF,0x7E,0x00,0x03,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0xD9,0xFF,0xFF,0x7E,0x00,0x02,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x01,0x07,0xFF,0xFF,0x7F,0x00,0x01,
      0x00,0x00,0x08,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x03,0xFF,0xFE,0xFF,0x00,0x00,
      0x00,0x00,0x08,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x01,0x0F,0xFF,0xFE,0xFF,0x80,0x00,
      0x00,0x00,0x18,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0xD9,0xFF,0xFE,0xFF,0x80,0x00,
      0x00,0x00,0xFF,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x61,0xFF,0xFE,0xFF,0x40,0x00,
      0x00,0x00,0x7E,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x01,0xA1,0xFB,0xFE,0xFF,0x40,0x00,
      0x00,0x00,0x3C,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x21,0xFB,0xFE,0xFF,0x20,0x01,
      0x80,0x00,0x3E,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x23,0xFB,0xFE,0xFF,0x10,0x00,
      0xFE,0x00,0x26,0x01,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x0D,0xFB,0xFE,0xFF,0x08,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00,
      0x00,0x00,0x01,0xFB,0xFE,0xFF,0x08,0x00,
      0x00,0x00,0x00,0x03,0xFF,0xEC,0x00,0x00
};



//200us子程序
void tg12232e_delay100us()
{
    unsigned char i;
	for(i=0;i<45;i++) _nop_();
}


//1S子程序
void tg12232e_delay()
{
    unsigned int i;
	for(i=0;i<10000;i++) tg12232e_delay100us();
}


void lcd_nop(void)	 //200ns
{
    _nop_();
}

void tg12332e_wbyte(unsigned char sendbyte)
{
    unsigned char data j=8;

    for(;j>0;j--){
        sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
        bitSID=CY;
        lcd_nop();
        bitSCLK=1;
        lcd_nop();
        bitSCLK=0;
    }
}

void tg12232e_wrins(unsigned char indata)
{
    bitCS = 1;
    tg12332e_wbyte(0xf8);
    tg12332e_wbyte(indata & 0xf0);
    tg12332e_wbyte(indata << 4);
    bitCS = 0;
}

void tg12232e_wrdata(unsigned char indata)
{
    bitCS = 1;
    tg12332e_wbyte(0xfa);
    tg12332e_wbyte(indata & 0xf0);
    tg12332e_wbyte(indata << 4);
    bitCS = 0;
}


//图形子程序
void tg12232e_tuxing(unsigned char * ppicture)
{
    unsigned char ROW,COL,count1,count2;

	COL = 0x00;
    ROW = 0x00;
    for(count2=32;count2>0;count2--){
		tg12232e_wrins(0x3e);  //EXSET	 开图形显示,进入扩展指令模式
		tg12232e_wrins(ROW | 0x80);//SETB  ACC.7	 first write vertical address
		tg12232e_wrins(COL | 0x80);//SETB  ACC.7	 second write horizontal address
		tg12232e_wrins(0x3a);  //NXSET	 开图形显示,进入基本指令模式
		for(count1=8 ;count1>0;count1--){
		    tg12232e_wrdata(*ppicture);
			ppicture ++;
		    tg12232e_wrdata(*ppicture);
			ppicture ++;			 
		}
		ROW ++;
	}

	COL = 0x08;
    ROW = 0x00;
    for(count2=32;count2>0;count2--){
		tg12232e_wrins(0x3e);  //EXSET	 开图形显示,进入扩展指令模式
		tg12232e_wrins(ROW | 0x80);//SETB  ACC.7	 first write vertical address
		tg12232e_wrins(COL | 0x80);//SETB  ACC.7	 second write horizontal address
		tg12232e_wrins(0x3a);  //NXSET	  开图形显示,进入基本指令模式
		for(count1=8 ;count1>0;count1--){
		    tg12232e_wrdata(*ppicture);
			ppicture ++;
		    tg12232e_wrdata(*ppicture);
			ppicture ++;			 
		}
		ROW ++;
	}
}



//图形模式清屏子程序
void tg12232e_clear(unsigned char indata)
{
    unsigned char ROW,COL,count1,count2;

	ROW = 0x00;
	COL = 0x00;
    for(count2=32;count2>0;count2--){
		tg12232e_wrins(0x3e);  //EXSET
		tg12232e_wrins(ROW | 0x80);//SETB  ACC.7	 first write vertical address
		tg12232e_wrins(COL | 0x80);//SETB  ACC.7	 second write horizontal address
		tg12232e_wrins(0x3a);  //NXSET
		for(count1=8;count1>0;count1--){
		    tg12232e_wrdata(indata);
		    tg12232e_wrdata(indata);
		}
		ROW ++;
	}

	ROW = 0x00;
	COL = 0x08;
    for(count2=32;count2>0;count2--){
		tg12232e_wrins(0x3e);  //EXSET
		tg12232e_wrins(ROW | 0x80);//SETB  ACC.7	 first write vertical address
		tg12232e_wrins(COL | 0x80);//SETB  ACC.7	 second write horizontal address
		tg12232e_wrins(0x3a);  //NXSET
		for(count1=8;count1>0;count1--){
		    tg12232e_wrdata(indata);
		    tg12232e_wrdata(indata);
		}
		ROW ++;
	}
}




//文本模式下写汉字&字符子程序
void tg12232e_text(unsigned char *ptext)
{
    unsigned char count1;

	tg12232e_wrins(0x38);
	tg12232e_delay100us();

	tg12232e_wrins(0x80);//SET FIRST ROW DDRAM ADDRESS
    for(count1=8;count1>0;count1--){
	    tg12232e_wrdata(*ptext);
		ptext++;
	    tg12232e_wrdata(*ptext);
		ptext++;
	}

	tg12232e_wrins(0x90);//SET SECOND ROW DDRAM ADDRESS
    for(count1=8;count1>0;count1--){
	    tg12232e_wrdata(*ptext);
		ptext++;
	    tg12232e_wrdata(*ptext);
		ptext++;
	}

	tg12232e_wrins(0x88);//SET THIRD  ROW DDRAM ADDRESS
    for(count1=8;count1>0;count1--){
	    tg12232e_wrdata(*ptext);
		ptext++;
	    tg12232e_wrdata(*ptext);
		ptext++;
	}

	tg12232e_wrins(0x98);//SET FOURTH  ROW DDRAM ADDRESS
    for(count1=8;count1>0;count1--){
	    tg12232e_wrdata(*ptext);
		ptext++;
	    tg12232e_wrdata(*ptext);
		ptext++;
	}
	tg12232e_delay();
}

//文本模式下清屏子程序
void tg12232e_clear_text()
{
    unsigned char count1;

    tg12232e_wrins(0x38);
	tg12232e_delay100us();
	tg12232e_wrins(0x80);	//SET DDRAM ADDRESS

    for(count1=64;count1>0;count1--){
	    tg12232e_wrdata(0x20);
	}
}

//初始化子程序
void tg12232e_initial()
{
    unsigned char i;

    bitCS = 0;
    bitSID = 0;
    bitSCLK = 0;
    bitPSB = 0;

    bitRESET = 0;
	tg12232e_delay100us();
	tg12232e_delay100us();
	tg12232e_delay100us();
	tg12232e_delay100us();
	tg12232e_delay100us();
	bitRESET = 1;


	tg12232e_wrins(0x38); //function set   DL--8 bit MPU bus interface set
	tg12232e_delay100us();
	tg12232e_wrins(0x38); //function set   RE--basic instruction set
	tg12232e_delay100us();
	tg12232e_wrins(0x38); //function set   x
	tg12232e_delay100us();

	tg12232e_wrins(0x01); //display clear screen
	for(i=0;i<100;i++) tg12232e_delay100us();

	tg12232e_wrins(0x06); //entry mode set  I/D=1
	tg12232e_delay100us();
	tg12232e_wrins(0x0c); //display on
	tg12232e_delay100us();
}


void main()
{
    unsigned char dat,count1;

	while(1){
	    tg12232e_initial();




	    tg12232e_tuxing(picture2);
	    tg12232e_delay();

	    tg12232e_tuxing(picture1);
	    tg12232e_delay();

		tg12232e_clear(0x00);
	    tg12232e_delay();

	    tg12232e_wrins(0x38);
	    tg12232e_delay100us();
	    tg12232e_wrins(0x80);	 //SET DDRAM ADDRESS
        dat = 0x41;
        for(count1=64;count1>0;count1--) tg12232e_wrdata(dat++);
	    tg12232e_delay();

	    tg12232e_text(textlist);
	    tg12232e_delay();

	    tg12232e_text(gb);
	    tg12232e_delay();

	    tg12232e_clear_text();
	    tg12232e_delay();

        tg12232e_clear(0x00);
	    tg12232e_delay();

	    tg12232e_clear(0xaa);
	    tg12232e_delay();

	    tg12232e_clear(0x55);
	    tg12232e_delay();

	    tg12232e_clear(0xff);
	    tg12232e_delay();

	    tg12232e_clear(0x00);
	    tg12232e_delay();

	    tg12232e_clear(0x80);
	    tg12232e_delay();

	    tg12232e_clear(0x00);

	    tg12232e_delay();

	    tg12232e_clear(0xff);
	    tg12232e_delay();
    }
}

⌨️ 快捷键说明

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