Nieuws
Nieuws
De sterkste populaire wetenschappelijke samenvatting van het MCU [aanbevolen verzameling] (3)
2022-03-17 230
12,Overview of Chinese characters:
Om Chinese karakters op een monitor of printer weer te geven, worden de Chinese karakters omgezet in een puntmatrix volgens grafische symbolen, en wordt de bijbehorende puntmatrixcode (glyphcode) verkregen.  
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.  
Als we de "." van deze "口"-afbeelding vervangen door "0", krijgen we de glyphcode van "口" heel duidelijk te zien: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. Wanneer de computer "口" wil weergeven, zoekt hij eerst het eerste adres van de lettertypebibliotheek, berekent op basis van de interne code van "口" de glyphcode van "口" en scant vervolgens het scherm sequentieel volgens de glyphcode (in binair) via de aansturing van de tekengenerator. Als de binaire code "0" is, wordt de plaats waar "0" staat gescand en de plaats waar "1" staat gescand om te markeren, zodat het tekenpatroon "口" kan worden verkregen.  
Chinese karakters worden gerangschikt volgens de nationale standaardcode en opgeslagen in het geheugen in de vorm van binaire bestanden, waarmee een Chinese karakterlettertypebibliotheek wordt gevormd, ook wel een Chinese karakterglyphbibliotheek of een Chinese karakterbibliotheek genoemd.
Twee coderingsmethoden, zie headerbestand
    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] codeGB_16[k] geeft aan dat er een array van de structuur typFNT_GB16 bestaat met de naam codeGB_16. codeGB_16[k] is het k+1e element van de array. index is een element van de structuur typFNT_GB16, dus er kan naar verwezen worden met codeGB_16[k].Index. Tegelijkertijd is index een array, dus kan het geïndexeerd worden met index[0]. Als((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && is een logische EN-operator, wat betekent dat de waarden aan beide zijden van het &&-symbool waar zijn. Alleen de waarde van && is waar, dat wil zeggen: waar && waar = waar. Deze zin betekent: codeGB_16[k].Index[0]==c[0] en codeGB_16[k].Index[1]==c[1] worden tegelijkertijd vastgesteld. Als de volgende instructie wordt uitgevoerd, is codeGB_16[] een structuurarray en codeGB_16[k].Index[0] betekent de 0e elementwaarde van het indexlid van de K-de structuur van de structuurarray.    

    13,12864 LCD:

    Elk weergavepunt komt overeen met een binair getal: 1 betekent aan, 0 betekent uit. Het RAM-geheugen dat deze puntmatrixinformatie opslaat, wordt weergavedatageheugen genoemd. Om een ​​bepaalde afbeelding of Chinees teken weer te geven, moet de bijbehorende puntmatrixinformatie in de corresponderende geheugeneenheid worden geschreven.


    De adressteller (AC) van het grafische RAM-geheugen verhoogt automatisch alleen het horizontale adres (X-as) met één. Wanneer het horizontale adres 0FH is, wordt deze gereset naar 00H. Het verticale adres wordt echter niet automatisch verhoogd met een overdracht. Daarom moet het programma, wanneer er continu meerdere gegevens worden geschreven, bepalen of het verticale adres gereset moet worden.


      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

      ①. Hoe wordt de geheugentoewijzing van variabelen uitgevoerd in de C-taal voor microcontrollers? Zou het kunnen dat de compiler tijdens het compilatieproces op intelligente wijze code voor toewijzing en hergebruik toevoegt? De belangrijkste vraag is: hoe kan ik ervoor zorgen dat mijn programma geen geheugenoverloopfouten bevat? Als ik een recursieve bewerking uitvoer, is het lastig om de geheugenbehoefte zelf te berekenen.  
      ②. Zijn er beperkingen aan de variabeledefinitie in de C-taal van de microcontroller? Bijvoorbeeld, de vermenigvuldigings- en delingsbewerkingen met drijvende-komma getallen worden in assembler geschreven, en de code is behoorlijk complex. Zou het niet te simpel zijn als dit direct in C geschreven zou worden?  
      ③. Wordt in het hex-bestand dat door de C-taal van de microcontroller wordt gegenereerd, de adresverdeling van het instructie- en data-ROM automatisch door de compiler toegewezen? Kunnen gebruikers dit ook zelf toewijzen?  
      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.  
      Als er te veel variabelen zijn, zal de compiler een melding geven dat het datasegment te groot is. Om een ​​geheugenoverloopfout te voorkomen, is het belangrijkste om te controleren of de stack overloopt, en dat hangt af van de ervaring.
      De C-taal van microcontrollers verbiedt over het algemeen recursie, en recursieve bewerkingen worden doorgaans vermeden. Microcontrollers zijn immers geen pc's, wat de snelheid zou beïnvloeden. Als je toch recursieve bewerkingen wilt uitvoeren, is het geschikter om een ​​DSP-chip te gebruiken. Kortom, je moet de juiste chip kunnen kiezen.
      Antwoord 2: De grootte van de variabele (het aantal cijfers) is over het algemeen gelijk aan het aantal cijfers in de chipaccumulator. Zo gebruikt de 51 bijvoorbeeld meestal 8 bits, omdat het een 8-bits microcontroller is.

      De microcontroller kan bitvariabelen definiëren, maar geen bitarrays. Programmeren in C lijkt eenvoudig, maar genereert in werkelijkheid de grootste hoeveelheid code. De microcontroller die voor de besturing wordt gebruikt, maakt nauwelijks gebruik van drijvende-komma-bewerkingen, wat niet alleen traag is, maar ook omslachtig en geheugenintensief. Als het een DSP-chip betreft, is een geschikte hardwarestructuur veel beter.  
       

      Antwoord 3: Over het algemeen wordt het automatisch toegewezen. Het kan geprogrammeerd worden in een combinatie van C en assembleertaal, of het kan online geassembleerd worden met Keil C. De gegevensuitwisseling tussen de chip en de buitenwereld verloopt via de poort.


      Disclaimer: Dit artikel is overgenomen uit "International Electronic Business Information". Dit artikel geeft uitsluitend de persoonlijke mening van de auteur weer en vertegenwoordigt niet de standpunten van Sacco Micro en de branche. Het is alleen bedoeld voor herpublicatie en verspreiding en ondersteunt de bescherming van intellectuele eigendomsrechten. Vermeld bij herpublicatie de oorspronkelijke bron en auteur. Neem bij inbreuk contact met ons op zodat we het artikel kunnen verwijderen.

      Telefoonnummer van het bedrijf: +86-0755-83044319
      Fax: +86-0755-83975897
      E-mail: 1615456225@qq.com
      Vraag: 3518641314 Manager Li

      Vraag: 332496225 Manager Qiu

      Adres: Kamer 809, Gebouw C, Zhantao Technologiegebouw, Minzhilaan 1079, Longhua Nieuw District, Shenzhen

      whatsapp

      Service Hotline

      tel: +86 755 83044319

      WhatsApp

      Whatsapp:+8618073002950