Red de conocimiento informático - Conocimiento de la instalación - ¿Está buscando un programa sencillo para controlar el LCD 12864ZB mediante un microcontrolador?

¿Está buscando un programa sencillo para controlar el LCD 12864ZB mediante un microcontrolador?

Antes de usar el siguiente programa, defina sus puertos IO de acuerdo con el circuito

#include

#include

# incluir

#include

#include

#include < / p>

delay100us();

}

uchar RdData()

{

// uchar ocupado;

p>

uchar DData;

RS = 0;

RW = 1;

/* hacer

{

LCDBUS=0xff;

E=1;

ocupado=LCDBUS&0x80;

E=0;

}

mientras (ocupado==0x80);*/

RS=1;

LCDBUS=0xff;

E =1;

DData = LCDBUS;

E = 0;

retorno(DData);

}

/ ----- Función de escritura en español----------------

void PrintASCII(uint x,y,uchar *pstr) //función genérica

{

uint addr;

y=y<<4;

addr=y|0x8x;

SdCmd(addr);

while(*pstr>0)

{

SdData(*pstr++);

}

}

/----Función de escritura china-----------------

void PrintGB (uchar x,y, uchar *pstr)

{

uint addr;

y=y<<4;

addr =y|0x8x;

SdCmd(addr);

while(*pstr>0)

{

SdData ( *pstr++);

delayms(300); //demostración

}

}

//---- Inicialización función ------------------

void initLCM()

{

RST=0;

delayms(5);

RST=1;

delayms(800);

SdCmd(0x30); modo (bus de 8 bits) */

SdCmd(0x06); /* Establecer modo de entrada*/

SdCmd(0x0f); >

SdCmd(0x01); /* Borrar pantalla*/

delayms(2);

}

/---- Función borrar pantalla --- -------

--------

void ClearRAM()<

{

uchar i,j;

// SdCmd (0x01);

// delayms(2);

SdCmd(0x34);

for(i=0;i<32;i++)

{

SdCmd (i|0x80);

SdCmd(0x80);

for(j=0;j<16; j++)

{

SdData(0x00); //

SdData(0x00);

}

}

SdCmd(0x30);

}

/---- Función de dibujo-------------- ---------------

void ShowBmp(uchar x,y, ancho,alto,uchar *bmp)

{

uchar i,j;

SdCmd(0x34);

SdCmd(0x36);

for(i=y;i<(y+ alto );i++)

{

si (i<32)

{

SdCmd( 0x80|i);

p>

SdCmd(0x80|x);

}

más

{

SdCmd(0x80|(i - 32));

SdCmd(0x80|(x+8));

}

for(j=0.j

{

SdData(*bmp++);

SdData(*bmp++); //

}

}

}

SdCmd(0x30);

}

// ---- Función de punto de dibujo---- - .

-------------

void Draw_Dot(uint x,y)

{

uchar m,n;< / p>

uint k;

if(y>=32)

{

y=y-32;

x=x +128;

}

SdCmd(y|0x80);

k=x/16;

SdCmd ( k|0x80);

k=0x8000;

k=k>>x%16;

m=RdData()

m=RdData()|k>>8;

n=RdData()|k;

k=x/16;

SdCmd ( y|0x80);

SdCmd(k|0x80);

SdData(m);

SdData(n);

}

/--- Función Draw_Line---------------

void Draw_Line(uint x1,y1,x2,y2)

{

uint temp;

int dalt_x, dalt_y,err=0;

if (y1>y2)

{

temp=x1;

x1=x2;

x2=temp;

temp=y1;

p>

y1=y2;

y2=temp;

}

Draw_Dot(x1,y1); dalt_x =x2-x1;

dalt_y=y2-y1;

if(dalt_x>=0)

{

if( dalt_y >dalt_x)//k.gt;1

{

while(y1

{

if(err < 0)

{

x1=x1+1;

y1=y1+1;

err=err+dalt_y- dalt_x ;

}

else

{

y1=y1+1;

err=err- dalt_x ;

}

Draw_Dot(x1,y1);

}

}

más // 0 <=k= <1

{

si (dalt_y==0)

y1=y1-1;

mientras ( x1

{

si(err<0)

{

x1=x1+1;

err =err+dalt_y;

}

else

{

y1=y1+1;

x1=x1+1;

err=err+dalt_y-dalt_x;

}

Draw_Dot(x1,y1);

}

}

}

más

{

dalt_x= x1 -x2;

if(dalt_y>dalt_x)//k<-1

{

mientras(y1

{

si(err<0)

{

x1=x1-1;

y1=y1+1;

err=err+dalt_y-dalt_x;

}

else

{

y1= y1+1;

err=err-dalt_x;

}

Draw_Dot(x1,y1);

}

else //0>k>=-1

{

if (dalt_y==0)

y1=y1-1;

while(x1>x2)

{

if(err<0)

{

x1=x1-1;

err=err+dalt_y;

}

más

{

x1=x1-1;

y1=y1+1;

err= err+dalt_y-dalt_x;

}

Draw_Dot(x1,y1);

}

}

}

}

}

}

// ----- Función de fuente de creación propia----- - -------------

void Set_CGRAM(uint num,uchar *pstr)

// num es el número de caracteres chinos pstr: el nombre de la matriz de caracteres chinos

{

uchar i;

SdCmd(0x40

for(i=0; i

{

SdData(*pstr++);

}

}

/ --Función de demostración de función--------------- ----------

void quxian1( )

{

SdCmd(0x06);

PrintGB( 0,0, "La pantalla no mueve la dirección del cursor más 1 código de instrucción es 06");

demorams(3000 );

SdCmd (0x01);

demorams(2);

SdCmd(0x04); p>

PrintGB( 15,0 , "La pantalla no mueve la dirección del cursor menos 1 código de instrucción 04");

delayms(3000);

SdCmd(0x01); /p>

SdCmd(0x01) ;

delayms(2);

SdCmd(0x07);

PrintGB(0,0, "El general izquierdo 1- El código de comando de dígitos de la pantalla es 07");

delayms(3000);

SdCmd(0x01);

delayms(2);

SdCmd(0x01);

delayms(2);

delayms(2);

SdCmd(0x05);

< pag

> PrintGB( 15,0, "El código de comando para desplazar toda la pantalla 1 bit hacia la derecha es 05");

delayms(3000);

SdCmd(0x06) ;

}

//---- Hacer una función de demostración gráfica------- ---------------- ------- -------

void quxian2()

{

código uint data1[48]={88, 89,85,87,89 ,90,89,89,89,

88,86,87,86,88,.89,90,94,

95,96 ,96,97,99, 99,101,103,

101,101,100,103,105,113,113,

117,117,116,114,107,110,114,

113,112,115 113,112,113,11 9.120,

125.124.128};

uint a1, b1,a2,b2,i;

SdCmd(0x01);

delayms(2);

SdCmd(0x0c) ;

PrintASCII(0,0, "Hora");

PrintASCII(14,1, "Temp"); /p>

SdCmd (0x36);

Draw_Line(1, 60, 125,60);//Establece las coordenadas Coordenada X

Draw_Line(1, 15, 1 , 60);//Establece las coordenadas Coordenada Y

delayms(1000);

a1=1;

for ( i=0;i<40 ;i++)

{

b1=data1[i]-70;

Draw_Dot(a1,b1);//dibujar punto

a1=a1+3;

}

demorams(3000);

a1=1;

for ( i= 0;i<40;i++)

{

b1=datos1[i]-70;

b2=datos1[i+1] -70;

a2=a1+3;

Draw_Line(a1,b1,a2,b2);//dibujar línea

a1=a2;

}

SdCmd(0x32);

}

//-------------- --------- ------------

// Programa principal

/---------- -------- ----------------

void main()

{

SP=0x60;

EA=0;

// PSB=0; // Selección de interfaz serie

PSB=1; /p>

LCDBUS= 0xff; // Interfaz de inicialización

RW= 1;

E = 0;

initLCM();

Set_CGRAM(3, CCTAB);

while(1)

{

SdCmd(0x01);

Cortina*/

delayms(2);

ClearRAM();

/-- Visualización de caracteres personalizados

SdCmd(0x0f ) ;

SdCmd(0x82);

SdData(0x00);

SdData(0x00);

SdData(0x00); /p>

SdData(0x00);

SdData(0x00);

SdData(0x00);

SdData(0x00);

p>

SdData(0x00);

SdData(0x02);

SdData(0x00);

SdData(0x04);

//-- Visualización de líneas de caracteres

PrintASCII(8,0," Programa de demostración ST7920");

delayms(3000) )

/ /-- Visualización gráfica

SdCmd(0x01); /* ClearRAM */

delayms(2);

ClearRAM();

ShowBmp(0,0,8,32,symbo);

ShowBmp(0,32,8, "Programa de demostración ST7920");

ShowBmp(0,32 , 8, 32,symbo);

delayms(3000);

//-- Función de escritura show

SdCmd(0x01);

delayms(2);

quxian1();

delayms(3000);

//-- Dibujar gráficos

ClearRAM();

quxian2(); // Solo interfaz paralela

delayms(3000);

}

}< / p>

//Fin del programa