Nachrichten
Nachrichten
Die besten populärwissenschaftlichen Zusammenfassungen des MCU [empfohlene Sammlung] (3)
2022-03-17 230
12. Overview of Chinese characters:
Um chinesische Schriftzeichen auf einem Monitor oder Drucker auszugeben, werden die chinesischen Schriftzeichen anhand grafischer Symbole in eine Punktmatrix umgewandelt, und der entsprechende Punktmatrixcode (Glyphencode) wird ermittelt.  
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.  
  In-Camera-Code  
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.  
Ersetzen wir den Punkt "." in der Grafik "口" durch eine "0", erhalten wir den Glyphencode von "口": 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H. Wenn der Computer "口" ausgeben möchte, ermittelt er zunächst die erste Adresse der Anzeigeschriftbibliothek, berechnet anhand des internen Codes von "口" den Glyphencode und scannt dann den Bildschirm sequenziell entsprechend dem binären Glyphencode mithilfe des Zeichengenerators. Wenn der Binärcode "0" ist, wird die Stelle, an der er "0" ist, gescannt und anschließend die Stelle, an der er "1" ist, um sie hervorzuheben. So kann das Zeichenmuster von "口" ermittelt werden.  
Chinesische Schriftzeichen sind in der Reihenfolge des nationalen Standardcodes angeordnet und im Speicher in Form von Binärdateien abgelegt. Dadurch entsteht eine chinesische Schriftzeichenbibliothek, die auch als chinesische Glyphenbibliothek oder chinesische Zeichenbibliothek bezeichnet wird.
Zwei Kodierungsmethoden, siehe Headerdatei
    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;


    codeGB_16[k].Index[0] zeigt an, dass ein Array der Struktur typFNT_GB16 namens codeGB_16 existiert. codeGB_16[k] ist das (k+1)-te Element dieses Arrays. Der Index ist ein Element der Struktur typFNT_GB16 und kann daher über codeGB_16[k].Index referenziert werden. Gleichzeitig ist der Index selbst ein Array und kann daher über [0] indiziert werden. Wenn((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) ist && ein logischer UND-Operator, der bedeutet, dass die Werte auf beiden Seiten des &&-Symbols wahr sind. Nur der Wert von && ist wahr, d. h. wahr && wahr = wahr. Dieser Satz bedeutet: Die Bedingungen `codeGB_16[k].Index[0]==c[0]` und `codeGB_16[k].Index[1]==c[1]` werden gleichzeitig festgelegt. Wird die folgende Anweisung ausgeführt, ist `codeGB_16[]` ein Struktur-Array, und `codeGB_16[k].Index[0]` bezeichnet den Wert des 0. Elements des k-ten Elements dieses Struktur-Arrays.    

    13. 12864 LCD:

    Jeder Anzeigepunkt entspricht einer Binärzahl: 1 bedeutet an, 0 bedeutet aus. Der RAM, der diese Punktmatrixinformationen speichert, wird als Anzeigedatenspeicher bezeichnet. Um eine bestimmte Grafik oder ein chinesisches Schriftzeichen anzuzeigen, müssen die entsprechenden Punktmatrixinformationen in die entsprechende Speichereinheit geschrieben werden.


    Der Adresszähler (AC) des Grafikspeichers erhöht automatisch nur die horizontale Adresse (X-Achse) um eins. Sobald die horizontale Adresse 0FH erreicht, wird sie auf 00H zurückgesetzt. Die vertikale Adresse wird jedoch nicht automatisch um einen Übertrag erhöht. Daher muss das Programm bei aufeinanderfolgenden Schreibvorgängen prüfen, ob die vertikale Adresse zurückgesetzt werden muss.


      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

      ①. Wie erfolgt die Speicherverwaltung von Variablen in der Mikrocontroller-Sprache C? Fügt der Compiler während des Kompilierungsprozesses intelligent Code zur Speicherverwaltung und -wiederverwendung hinzu? Entscheidend ist, wie ich in meinem Programm Speicherüberlauffehler vermeiden kann. Bei rekursiven Operationen ist der Speicherbedarf schwer selbst zu berechnen.  
      2. Wird die C-Sprache des Mikrocontrollers bei der Variablendefinition eingeschränkt sein? Beispielsweise werden Multiplikations- und Divisionsoperationen von Gleitkommazahlen in Assembler geschrieben, und der Code ist recht komplex. Wäre es nicht zu einfach, wenn es direkt in C geschrieben wäre?  
      ③. Wird die Adressverteilung des Befehls- und Daten-ROMs in der vom Mikrocontroller in C generierten Hex-Datei automatisch vom Compiler zugewiesen? Kann sie vom Benutzer festgelegt werden?  
      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.  
      Sind zu viele Variablen vorhanden, meldet der Compiler, dass das Datensegment zu groß ist. Um einen Speicherüberlauf zu vermeiden, ist vor allem zu prüfen, ob ein Stacküberlauf auftritt; dies hängt von der Erfahrung ab.
      Die Programmiersprache C von Mikrocontrollern verbietet im Allgemeinen Rekursion, und rekursive Operationen werden generell vermieden. Schließlich sind Mikrocontroller keine PCs, was die Geschwindigkeit beeinträchtigen würde. Wenn Sie Rekursion benötigen, ist der Einsatz eines DSP-Chips sinnvoller. Kurz gesagt: Sie müssen den passenden Chip auswählen können.
      Antwort 2: Die Größe der Variablen (Anzahl der Stellen) entspricht im Allgemeinen der Anzahl der Stellen im Chip-Akkumulator. Beispielsweise verwendet 51 üblicherweise 8 Bit, da es sich um einen 8-Bit-Mikrocontroller handelt.

      Der Mikrocontroller kann Bitvariablen, aber keine Bitarrays definieren. Die Programmierung in C erscheint zwar einfach, erzeugt aber tatsächlich den größten Codeumfang. Der zur Steuerung verwendete Mikrocontroller nutzt kaum Gleitkommaoperationen, was nicht nur langsam, sondern auch umständlich ist und Speicherplatz benötigt. Bei einem DSP-Chip wäre eine geeignete Hardwarestruktur deutlich vorteilhafter.  
       

      Antwort 3: Im Allgemeinen wird der Speicherplatz automatisch zugewiesen. Die Programmierung kann in einer Mischung aus C und Assemblersprache erfolgen oder online mit Keil C assembliert werden. Der Datenaustausch zwischen dem Chip und der Außenwelt erfolgt über den Port.


      Haftungsausschluss: Dieser Artikel stammt aus „International Electronic Business Information“. Er gibt ausschließlich die persönliche Meinung des Autors wieder und spiegelt nicht die Ansichten von Sacco Micro oder der Branche wider. Er dient lediglich dem Nachdruck und der Weitergabe und unterstützt den Schutz von Urheberrechten. Bitte geben Sie bei einem Nachdruck die Originalquelle und den Autor an. Sollten Urheberrechte verletzt werden, kontaktieren Sie uns bitte, damit wir den entsprechenden Text entfernen können.

      Firmentelefonnummer: +86-0755-83044319
      Fax: +86-0755-83975897
      E-Mail: 1615456225@qq.com
      QQ: 3518641314 Manager Li

      QQ: 332496225 Manager Qiu

      Adresse: Raum 809, Gebäude C, Zhantao Technology Building, Minzhi Avenue 1079, Longhua New District, Shenzhen

      whatsapp

      Service-Hotline

      tel: +86 755 83044319

      WhatsApp

      Whatsapp:+8618073002950