Ligne d'assistance
Pour afficher des caractères chinois sur un écran ou une imprimante, ces caractères sont conçus sous forme de matrice de points selon des symboles graphiques, et le code de matrice de points correspondant (code glyphe) est obtenu.
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.
Code intégré à l'appareil photo
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 l'on remplace le point de ce symbole « 口 » par un zéro, on obtient clairement le code du glyphe « 口 » : 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H. Lorsque l'ordinateur souhaite afficher « 口 », il repère d'abord la première adresse de la bibliothèque de polices d'affichage, calcule à partir du code interne de « 口 », puis détermine le code du glyphe correspondant, et enfin parcourt l'écran séquentiellement en fonction de ce code (en binaire), grâce au générateur de caractères. Là où le code binaire est « 0 », l’endroit où il est « 0 » est scanné, et l’endroit où il est « 1 » est scanné pour être mis en évidence, de sorte que le motif de caractères « 口 » peut être obtenu.
Les polices de caractères chinois sont organisées selon l'ordre du code standard national et stockées en mémoire sous forme de fichiers binaires, formant une bibliothèque de polices de caractères chinois, également appelée bibliothèque de glyphes de caractères chinois ou bibliothèque de caractères chinois.
Deux méthodes d'encodage, voir le fichier d'en-tête
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:
Chaque point d'affichage correspond à un nombre binaire : 1 signifie allumé, 0 signifie éteint. La mémoire vive (RAM) qui stocke ces informations matricielles est appelée mémoire de données d'affichage. Afficher un graphique ou un caractère chinois consiste à écrire les informations matricielles correspondantes dans l'unité de stockage appropriée.
Le compteur d'adresses (AC) de la mémoire RAM graphique incrémente automatiquement l'adresse horizontale (axe X) de un. Lorsque l'adresse horizontale vaut 0FH, il est réinitialisé à 00H. En revanche, l'adresse verticale n'est pas incrémentée automatiquement avec retenue. Par conséquent, lors d'écritures successives de plusieurs données, le programme doit déterminer si l'adresse verticale doit être réinitialisée.
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
1. Comment l'allocation mémoire des variables est-elle effectuée en langage C pour microcontrôleur ? Le compilateur ajoute-t-il intelligemment le code d'allocation et de recyclage lors de la compilation ? L'important est de savoir comment garantir que mon programme ne génère pas d'erreurs de dépassement de mémoire. Si j'effectue une opération récursive, il est difficile de calculer moi-même les besoins en mémoire.
2. Le langage C du microcontrôleur impose-t-il des restrictions à la définition des variables ? Par exemple, les opérations de multiplication et de division des nombres à virgule flottante sont écrites en assembleur, et le code est assez complexe. S'il était écrit directement en C, ne serait-il pas trop simple ?
③ Dans le fichier hexadécimal généré par le langage C du microcontrôleur, la distribution des adresses des ROM d'instructions et de données est-elle automatiquement attribuée par le compilateur ? Les utilisateurs peuvent-ils la modifier ?
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 le nombre de variables est trop élevé, le compilateur signalera que le segment de données est trop volumineux. Pour éviter une erreur de dépassement de mémoire, il faut principalement vérifier si la pile déborde, et cela dépend de l'expérience.
Le langage C des microcontrôleurs interdit généralement la récursivité, et les opérations récursives sont généralement évitées. En effet, les microcontrôleurs ne sont pas des ordinateurs, ce qui impacte leurs performances. Si la récursivité est nécessaire, il est préférable d'utiliser un processeur de signal numérique (DSP). En résumé, il est essentiel de choisir le processeur adapté.
Réponse 2 : La taille de la variable (nombre de chiffres) correspond généralement au nombre de chiffres de l’accumulateur du microcontrôleur. Par exemple, 51 utilise généralement 8 bits car il s’agit d’un microcontrôleur 8 bits.
Le microcontrôleur peut définir des variables binaires, mais pas de tableaux de bits. Programmer en C semble simple, mais génère en réalité une quantité importante de code. Le microcontrôleur utilisé pour le contrôle utilise très peu les opérations en virgule flottante, ce qui est non seulement lent, mais aussi complexe et gourmand en ressources. S'il s'agit d'une puce DSP, une architecture matérielle adaptée serait bien plus performante.
Réponse 3 : Généralement, l’allocation est automatique. La programmation peut se faire en langage C et en langage assembleur, ou par assemblage en ligne avec Keil C. L’échange de données entre la puce et l’extérieur se fait via le port.
Avertissement : Cet article est reproduit à partir de « International Electronic Business Information ». Il reflète uniquement l’opinion de son auteur et n’engage en rien Sacco Micro ni le secteur. Sa reproduction et son partage sont autorisés uniquement dans le respect des droits de propriété intellectuelle. Veuillez citer la source originale et l’auteur. En cas d’infraction, veuillez nous contacter afin que nous supprimions le contenu.
Numéro de téléphone de l'entreprise : +86-0755-83044319
Fax/FAX : +86-0755-83975897
Courriel : 1615456225@qq.com
QQ : 3518641314 Gestionnaire Li
QQ : 332496225 Gestionnaire Qiu
Adresse : Salle 809, Bâtiment C, Immeuble technologique Zhantao, n° 1079 avenue Minzhi, Nouveau district de Longhua, Shenzhen




粤公网安备44030002007346号