Línea directa de servicio
Para mostrar caracteres chinos en un monitor o impresora, estos se diseñan en una matriz de puntos según los símbolos gráficos, y se obtiene el código de matriz de puntos (código de glifo) correspondiente.
The unified encoding method used to represent Chinese characters in computers is called internal code (such as national standard code), and the internal code is unique (equivalent to the ID number of the character). The Chinese character encoding formed to facilitate the input of Chinese characters is an input code, which is an external code of Chinese characters. The input code is different due to different encoding methods and is diverse. The Chinese character code formed for displaying and printing out Chinese characters is a glyph code. The computer finds the glyph code of the Chinese character in the font model library through the Chinese character internal code and realizes its conversion.
Código en la cámara
According to the provisions of the national standard code, each Chinese character has a certain binary code, but this code will conflict with the ASCII code when processed internally by the computer. To solve this problem, add 1 to the first byte of each byte of the national standard code. Since the ASCII code only uses 7 bits, the "1" in the first place can be used as a mark to identify Chinese character codes. When the computer processes the code with "1" in the first place, it understands it as Chinese character information, and when it processes the code with "0" in the first place, it understands it as an ASCII code. The national standard code (internal code) processed in this way is the internal code.
Si reemplazamos el "." de este gráfico "口" con "0", podemos obtener el código de glifo de "口" de forma muy vívida: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. Cuando la computadora quiere mostrar "口", primero encuentra la primera dirección de la biblioteca de fuentes de visualización, calcula en base al código interno de "口", y luego encuentra el código de glifo de "口", y luego escanea la pantalla secuencialmente de acuerdo con el código de glifo (en binario) a través del control del generador de caracteres. Cuando el código binario es "0", se escanea el lugar donde es "0" y se escanea el lugar donde es "1" para resaltarlo, de modo que se pueda obtener el patrón de caracteres "口".
Las fuentes de caracteres chinos están organizadas según el código estándar nacional y se almacenan en la memoria en forma de archivos binarios, formando una biblioteca de fuentes de caracteres chinos, también llamada biblioteca de glifos de caracteres chinos o biblioteca de caracteres chinos.
Dos métodos de codificación, véase el archivo de cabecera.
GB1616.h//------------------ Data structure definition of Chinese character font ------------------------//struct typFNT_GB16 //Chinese character font data structure { unsignedchar Index[3]; //Chinese character internal code index unsignedchar Msk[32]; //Dot matrix code data }; ///////////////////////////////////////////////////////////////////////////// Chinese character font table //// Chinese character library: Song style 16.dot, horizontal modulo left high bit, data arrangement: left to right, top to bottom ///////////////////////////////////////////////////////////////////////////// conststruct typFNT_GB16 codeGB_16[]= //Data table {/*------------------------------------------------------------------------------------------------ Source file/text: Xu; Width×Height (pixels):16×16---------------------------------------------------------------------------------*/ "Xu",0x10,0x80,0x10,0x80,0x21,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x8 0,0xAF,0xF8,0x20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00,
This structure is very simple:One is the internal code, a dot matrix sequence. The previous dot matrix library was placed in the order of the internal code, and no internal code index was needed. If only some Chinese characters were placed, the internal code index was needed. (The Chinese character "Xu" in the front is to find the dot matrix sequence of the word when outputting "Xu". This dot matrix sequence is written by myself. When displayed with 1602, because the chip has an English dot matrix sequence in the memory, there is no need to write it.) Generally, two bytes are enough for the internal code. If you use one more byte, you just add a trailing 0. In this way, the Chinese character string can be directly placed in the Chinese character internal code;
13,12864 LCD:
Cada punto de visualización corresponde a un número binario: 1 significa encendido y 0, apagado. La memoria RAM que almacena esta información de la matriz de puntos se denomina memoria de datos de visualización. Para mostrar un gráfico o un carácter chino, se escribe la información de la matriz de puntos correspondiente en la unidad de almacenamiento correspondiente.
El contador de direcciones (AC) de la memoria RAM gráfica solo incrementa automáticamente la dirección horizontal (eje X) en uno. Cuando la dirección horizontal es igual a 0FH, se reinicia a 00H. Sin embargo, no incrementa automáticamente la dirección vertical con un acarreo. Por lo tanto, cuando se escriben varios datos de forma continua, el programa debe determinar si es necesario reiniciar la dirección vertical.
14,Graphics RAM (GDRAM)
The drawing display RAM provides 128×8 bytes of memory space. When changing the drawing RAM, first write the horizontal and vertical coordinate values continuously, and then write two bytes of data to the drawing RAM. The address counter (AC) will automatically increase the horizontal address (X address) by one. When the horizontal address is 0XFH, it will be reset to 00H; the vertical address will not be automatically incremented by 1. The drawing display must be turned off during writing to drawing RAM.
[cpp] view plain copy//Display Chinese characters voiddispString (uchar X, Y,uchar *msg) //Which row is X and which column is Y. msg is Chinese characters { if(X==0) X = 0x80; // First line, Chinese characters display coordinates else if(X==1) write_data(*msg++); //Display Chinese characters } } ////////////////////////////////// //////////////// //////////////// // Display image voiddisppicture(uchar code *adder) { uint i,j; //*******Display the upper half screen content setting for(i=0;i<32;i++) // 32 column addresses in the upper half of the screen { write_com(0x80 + i); //SET vertical address VERTICALADD write_com(0x80); //SET horizontal address HORIZONTAL ADD for(j=0;j<16;j++) { write_data(*adder); adder++; } } //************Display the content settings of the lower half of the screen for(i=0;i<32;i++) // { write_com(0x80 + i); //SET vertical address VERTICALADD write_com(0x88); //SET horizontal address HORIZONTAL ADD for(j=0;j<16;j++) { write_data(*adder); adder++; } } } For the C language, space is automatically allocated for a defined variable, and its address is the name of the variable. Through this name, the data can be retrieved in the memory and new data can be obtained through calculation. However, in assembly, the programmer needs to define the storage space and send the data to the accumulator for calculation. Every step requires the programmer's operation. In C language, these processes are completed by the compiler.
15,Some useful FAQs
①. ¿Cómo se realiza la asignación de memoria de las variables en el lenguaje C para microcontroladores? ¿Es posible que el compilador añada de forma inteligente código de asignación y reciclaje durante el proceso de compilación? Lo fundamental es que, ¿cómo puedo asegurarme de que el programa que he creado no tenga errores de desbordamiento de memoria? Si realizo una operación recursiva, los requisitos de memoria son difíciles de calcular por mi cuenta.
②. ¿El lenguaje C del microcontrolador tendrá restricciones en la definición de variables? Por ejemplo, las operaciones de multiplicación y división de datos de punto flotante se escriben mediante lenguaje ensamblador, y el código es bastante complejo. Si se escribiera directamente en lenguaje C, ¿no sería demasiado simple?
③. En el archivo hexadecimal generado por el lenguaje C del microcontrolador, ¿la distribución de direcciones de la ROM de instrucciones y datos se asigna automáticamente por el compilador? ¿Pueden los usuarios asignarla?
Answer 1: The microcontroller program written in C language is first compiled by a program (it seems to be c51.exe). After the compilation is completed, the storage space size of the variables has been arranged, but the specific address has not yet been allocated (the address is floating). Next, another program (it seems to be a51.exe) is connected. After the connection, the specific address is determined.
Si hay demasiadas variables, el compilador indicará que el segmento de datos es demasiado grande. Para evitar errores de desbordamiento de memoria, lo principal es considerar si la pila se desborda, lo cual depende de la experiencia.
El lenguaje C para microcontroladores generalmente prohíbe la recursión, y las operaciones recursivas suelen evitarse. Al fin y al cabo, los microcontroladores no son ordenadores personales, lo que afectaría a su velocidad. Si se desea utilizar recursión, es más apropiado usar un chip DSP. En resumen, es fundamental elegir el chip adecuado.
Respuesta 2: El tamaño de la variable (número de dígitos) suele ser el mismo que el número de dígitos del acumulador del chip. Por ejemplo, el microcontrolador 51 suele usar 8 bits porque es de 8 bits.
El microcontrolador puede definir variables de bits, pero no matrices de bits. Escribir en lenguaje C parece sencillo, pero en realidad genera la mayor cantidad de código. El microcontrolador utilizado para el control apenas utiliza operaciones de punto flotante, lo que no solo es lento, sino también problemático y consume mucho espacio. Si se trata de un chip DSP, sería mucho mejor si contara con una estructura de hardware adecuada.
Respuesta 3: Generalmente, se asigna automáticamente. Se puede programar combinando lenguaje C y lenguaje ensamblador, o bien ensamblar en línea con Keil C. El intercambio de datos entre el chip y el exterior se realiza a través del puerto.
Descargo de responsabilidad: Este artículo se reproduce de «International Electronic Business Information». Este artículo solo representa la opinión personal del autor y no la de Sacco Micro ni la del sector. Se permite su reproducción y distribución únicamente, y se respetan los derechos de propiedad intelectual. Para reproducirlo, por favor, indique la fuente original y el autor. Si detecta alguna infracción, póngase en contacto con nosotros para que lo eliminemos.
Número de teléfono de la empresa: +86-0755-83044319
Fax/FAX: +86-0755-83975897
Correo electrónico: 1615456225@qq.com
Pregunta: 3518641314 Gerente Li
Pregunta: 332496225 Gerente Qiu
Dirección: Habitación 809, Edificio C, Edificio de Tecnología Zhantao, Avenida Minzhi n.° 1079, Nuevo Distrito de Longhua, Shenzhen




粤公网安备44030002007346号