Red de conocimiento informático - Conocimientos de programación - Dame un programa para mostrar caracteres chinos en MCU LCD 1602, gracias

Dame un programa para mostrar caracteres chinos en MCU LCD 1602, gracias

Algunos programas básicos para el microcontrolador 51 para lcd1602

#include

#define dataport P1

sbit RS= P2 ^ 6;

bit RW=P2^5;

bit EN=P2^4;

//========= = ==============

//===========================

void waitfor() //Función de detección de señal de ocupado

{

dataport=0xff

RS=0;RW=1; ;_nop_ (); //Seleccione la operación de lectura del registro de instrucciones

EN=1;_nop_(); //Habilite la operación

while(dataport&0x80); El bit es 1, significa que 1602 está ocupado. Después de terminar su trabajo, el chip bajará el bit alto

EN=0;

}

/. /======== ===============

void writedata(unsigned char dataw) //Escribir datos en lcm

{

waitfor(); //Prueba ocupada

RS=1;RW=0;_nop_(); //Selecciona la operación de escritura del registro de datos

dataport=dataw;_nop_(); / /Enviar datos al puerto de datos

EN=1;_nop_();_nop_();ES=0;

/ /==========================

void writecmd(cmd de caracteres sin firmar) / /Escribir comando en lcm

{

waitfor();

RS=0;RW=0;_nop_();

puerto de datos=cmd;_nop_();

ES=1;_nop_();_nop_();ES=0;

}

//== ======== =================

void init(void) // Función de inicialización

{

writecmd( 0x38); // Configuración de función Pantalla de doble línea de transmisión de datos de 8 bits

writecmd(0x0c);//Interruptor de visualización

writecmd(0x01) ;//Borrar pantalla

writecmd(0x06);//Al ingresar al modo de caracteres, el cursor se mueve un espacio hacia la derecha y el carácter original no se mueve

//I No sabía el siguiente carácter cuando comencé a aprender. ¿La visualización está relacionada con el valor de CA o con la posición del cursor?

//Finalmente, descubrí que solo está relacionada con la posición del cursor. Ahora todavía no sé para qué se usa el valor Ac.

}

//=================. =========

ubicación vacía (carácter x sin firmar, char y sin firmar) //Función de coordenadas exactas

{

temperatura de caracteres sin firmar ;

temp=x&0x0f; //Siempre que los últimos cuatro dígitos de x data

if(y){temp=temp|0x40;} //La primera línea es 0 y la segunda línea es 1. If y=1, agregue 0x40 a la dirección

temp|=0x80; //El comando DB7 de la dirección DDRAM es uno

writecmd(temp);

}

// ===============================

nulo displyonechar(unsigned char x,unsigned char y,unsigned char dataw) //Mostrar una función de carácter

{

ubicación(x,y);

escribir datos (datos);

}

//============================== ===========

void displylistchar(unsigned char x,unsigned char y,unsigned char *p) //Mostrar cadena

{

while(*p) //Cuando a Cuando se lee la matriz de caracteres, *P se refiere a cero

{

displyonechar(x,y,*(p++)) ;

x++;

}

}

//================ ============= ==========================

escritura vacía (sin firmar) dirección char, char unsigned *p) //Escribir datos CGRAM

{

unsigned char i=8;

writecmd(address); El valor de la dirección en CGRAM es 0x40, aumentando en 0x80 cada vez

while(i--)

{

writedata(*p);

p++;

}

}

//=================== ================== ==================

void displyonecharacter(unsigned char x, unsigned char y, unsigned char dirección, unsigned char *p) //Mostrar caracteres autodefinidos

{

unsigned char i=8;

writecmd( dirección); //El valor inicial de la dirección en CGRAM es 0x40, aumentando en 0x08 cada vez

p>

while(i--)

{

escribir datos(*p);

p++;

}

//=============== ============================ ===================

ubicación(x,y); //Establece la ubicación que se mostrará

w

ritedata((address&=0x3f)/0x08); //Para leer datos de CGRAM, se mostró en el 1602 durante mucho tiempo y encontró la dirección en CGRAM

} //La dirección en DDRAM es lo mismo que arriba Relación de conversión

//==================================== ======= =================

void displynumber(unsigned char x, unsigned char y, unsigned long num) //Mostrar un entero

{

unsigned int número[8];

int k,gh;

for(k=0;;k++ )

{

*(number+k)=(unsigned int)(num%10);//Conversión de tipo forzada

num=num/10 ;

if(num==0)break;

}

for(gh=k;gh>=0;gh--)

{

displyonechar(x,y,(*(número+gh)+48));

x++;

}

}

//Código de fuente

uchar code nin[]={0x08,0x0f,0x12,0x0f,0,0x1f,0x02,0x02};// " Año"

código uchar yue[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11};// "月"

código uchar ri[] ={0x1f,0x11, 0x11,0x1f,0x11,0x11,0x11,0x1f};// "日"

Mostrar caracteres chinos

displyonecharacter(0,0,0x40,nin );

displyonecharacter(1,0,0x80,yue);

displyonecharacter(1,0,0xc0,ri);