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;
//========= = ==============
//=========================== p>
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);
}
//============================== =========== p>
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++; p>
}
}
//================ ============= ==========================
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>
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--)
{ p>
displyonechar(x,y,(*(número+gh)+48));
x++;
}
} p>
//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);