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

📄 nt39106-16bit.c

📁 液晶显示的一款驱动代码
💻 C
字号:
/************************************************
dots		176*220
controller	NT39106
interface	8080/16bits   P0-L,P1-H
************************************************/
#include<absacc.h>
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define p0 XBYTE[0x0000]

sbit cs		=P3^4; 
sbit res 	=P3^3;
sbit rs		=P3^5;
sbit wr		=P3^6;
sbit rd		=P3^7;

uchar code pictrue[];
uchar code palette[];


void delay(uint t)
{
	uchar t1;
	while(t--)
	for(t1=16;t1>0;t1--)
	{;}  //0.1ms
}

void write_command(uchar dd)
{
 
 cs=0;
 rs=0;
 rd=1;
 
 P1=0x00;
 //P0=dd;
 P0=dd;
 wr=0;
 //delay(0);
 wr=1;
 cs=1;
}


void write_data(uchar data_h,data_l)
{ 
 cs=0;
 rs=1;
 rd=1;
 //wr=0;
 P1=data_h;
 P0=data_l;
 wr=0;
 //P0=data_l;
 //delay(0);
 wr=1;
 cs=1;
}




void initialization()
{ 
        write_command(0x07);
        write_data(0x00,0x05);
	delay(400);

        write_command(0x07);
        write_data(0x00,0x25);
	delay(400);

        write_command(0x07);
        write_data(0x00,0x27);
	delay(400);

        write_command(0x07);
        write_data(0x00,0x37);
	delay(100);

	write_command(0x12);        //
        write_data(0x00,0x09);

        write_command(0x13);        //power control 4
        write_data(0x13,0x3e);      

       write_command(0x10);        //Power Control 5                write_data(0x06,0x04);

        write_command(0x11);        //driver output control
       write_data(0x00,0x04);

        write_command(0x10);        //LCD drive waveform control
        write_data(0x46,0x34);

        write_command(0x12);       //entry mode control
        write_data(0x00,0x19);
        delay(200);

        write_command(0x10);       //compare register
        write_data(0x47,0x30);

        write_command(0x13);       //frame cycle control
        write_data(0x33,0x3e);

        write_command(0x02);       //power control 3
        write_data(0x07,0x00);

        write_command(0x01);       //power control 1
        write_data(0x01,0x1b);

        write_command(0x08);       //power control 2
        write_data(0x02,0x02);

        write_command(0x03);       //power control 5
        write_data(0x10,0x30);

        write_command(0x0b);       //power control 4
        write_data(0x58,0x00);

        write_command(0x21);       //RAM address set
        write_data(0x00,0x00);
   
        write_command(0x30);
        write_data(0x03,0x03);

        write_command(0x31);
        write_data(0x03,0x03);

        write_command(0x32);
        write_data(0x03,0x03);

        write_command(0x33);
        write_data(0x03,0x03);

        write_command(0x34);
        write_data(0x04,0x04);

        write_command(0x35);
        write_data(0x04,0x04);

        write_command(0x36);
        write_data(0x04,0x04);

        write_command(0x37);
        write_data(0x03,0x03);

        write_command(0x38);
        write_data(0x00,0x00);

        write_command(0x39);
        write_data(0x00,0x00);

        write_command(0x40);
        write_data(0x00,0x00);

        write_command(0x41);
        write_data(0x00,0x00);

        write_command(0x42);
        write_data(0xdb,0x00);

        write_command(0x43);
        write_data(0x00,0x00);

        write_command(0x44);
        write_data(0xaf,0x00);

        write_command(0x45);
        write_data(0xdb,0x00);

        write_command(0x07);
        write_data(0x00,0x05);
	delay(200);

        write_command(0x07);
        write_data(0x00,0x25);

        write_command(0x07);
        write_data(0x00,0x27);
	delay(600);//400

        write_command(0x07);
        write_data(0x00,0x37);







}



void displaypalette(uchar *palette)
{   uint i,j,k;
	write_command(0x22);
	for(j=0;j<220;j++)
	{
	  for(i=0;i<8;i++)
		for(k=0;k<22;k++)
		{
		write_data(*(palette+2*i),*(palette+2*i+1));
		}
	}
}




void display_eprom(uchar a)
{   int i,j,k;
    uchar d1,d2;
    uint addr;

   // write_command(0x22);

	for(k=0;k<4;k++)
	{   
	    addr=0x0000;
		for(i=0;i<128;i++)
			for(j=0;j<64;j++)
			{	
				P1=(5*(a-1)+k);
				d1=XBYTE[addr++];
				d2=XBYTE[addr++];
				write_data(d1,d2);				
			}
	}

        
	addr=0x0000;
	for(i=0;i<5952;i++)
	{  
	   	P1=(5*(a-1)+4);
		d1=XBYTE[addr++];
		d2=XBYTE[addr++];
		write_data(d1,d2);
	   }
}



void display_pic(uchar *pictrue)
{
	uint i,j;
    write_command(0x22);
	for(i=0;i<220;i++)
	{
		for(j=0;j<176;j++)
		{
		write_data(*(pictrue+i*(2*128)+2*j),*(pictrue+i*(2*128)+2*j+1));
		}
	}
}



void display_rgb(uchar h_data,l_data)
{      
    
	uint i,j;
	write_command(0x22);
	for(i=0;i<220;i++)
		for(j=0;j<176;j++)
			{
			write_data(h_data,l_data);
			}
	write_command(0x22);
}


void main()
{
    res=0;
	delay(20);
	res=1;
	delay(200); 
	initialization();
	while(1)
	{
		display_rgb(0xf8,0x00);
		delay(20000); 
		display_rgb(0x07,0xe0);
		delay(20000); 
		display_rgb(0x00,0x1f);
		delay(20000);
		display_rgb(0x00,0x00);
		delay(1000);
        display_rgb(0xff,0xff);
		delay(1000); 
		displaypalette(palette);
		delay(20000);
        //display_eprom(1);
        //delay(20000);
        //display_eprom(2);
        //delay(20000);
        //display_eprom(3);
        //delay(20000);
        //display_eprom(4);
        //delay(20000);
        //display_eprom(5);
        //delay(20000);
        //display_eprom(6);
        //delay(20000);
        //display_eprom(7);
        //delay(20000);
        //display_eprom(8);
        //delay(20000);
	}
}




uchar code palette[]={
			    0xf8,0x00,//red
                0x07,0xe0,//green
                0x00,0x1f,//blue
				0xfc,0x08,//orange
				0xff,0xe0,//yellow
				0x00,0x00,//purple
				0xf8,0x1f,//purple
				0xff,0xff,//purple
};

⌨️ 快捷键说明

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