Notizie
Notizie
Il riassunto più efficace della divulgazione scientifica dell'MCU [raccolta consigliata] (3)
2022-03-17 230
12,Overview of Chinese characters:
Per visualizzare i caratteri cinesi su un monitor o una stampante, questi vengono rappresentati in una matrice di punti secondo simboli grafici, ottenendo così il corrispondente codice a matrice di punti (codice glifo).  
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.  
  Codice interno della fotocamera  
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.  
Se sostituiamo il punto e virgola (".") di questo grafico "口" con "0", possiamo ottenere il codice glifo di "口" in modo molto chiaro: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H. Quando il computer vuole visualizzare "口", trova prima il primo indirizzo della libreria dei font di visualizzazione, calcola in base al codice interno di "口", quindi trova il codice glifo di "口" e infine scansiona lo schermo sequenzialmente in base al codice glifo (in binario) tramite il controllo del generatore di caratteri. Dove il codice binario è "0", viene scansionata la posizione in cui è "0", e viene scansionata la posizione in cui è "1" per evidenziarla, in modo da ottenere il modello di caratteri "口".  
I font di caratteri cinesi sono disposti secondo l'ordine del codice standard nazionale e memorizzati in memoria sotto forma di file binari, formando una libreria di font di caratteri cinesi, detta anche libreria di glifi di caratteri cinesi o libreria di caratteri cinesi.
Due metodi di codifica, vedere il file di intestazione
    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] indica che esiste un array di struttura typFNT_GB16 chiamato codeGB_16 codeGB_16[k] è il membro k+1 dell'array index è un membro della struttura typFNT_GB16, quindi può essere referenziato con codeGB_16[k].Index. Allo stesso tempo, index è un array, quindi può essere indicizzato[0] If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && è un operatore AND logico, il che significa che i valori su entrambi i lati del simbolo && sono veri. Solo il valore di && è vero, cioè vero && vero = vero. Questa frase significa: codeGB_16[k].Index[0]==c[0] e codeGB_16[k].Index[1]==c[1] vengono stabiliti contemporaneamente. Se viene eseguita l'istruzione seguente, codeGB_16[] è un array di strutture, codeGB_16[k].Index[0] indica il valore dell'elemento 0 dell'elemento indice della K-esima struttura dell'array di strutture.    

    13,12864 LCD:

    Ogni punto di visualizzazione corrisponde a un numero binario: 1 significa acceso, 0 significa spento. La RAM che memorizza queste informazioni a matrice di punti è chiamata memoria dati di visualizzazione. Per visualizzare un determinato elemento grafico o carattere cinese, è necessario scrivere le corrispondenti informazioni a matrice di punti nell'unità di memoria corrispondente.


    Il contatore degli indirizzi (AC) della RAM grafica incrementa automaticamente di uno solo l'indirizzo orizzontale (asse X). Quando l'indirizzo orizzontale raggiunge 0FH, viene azzerato a 00H. Tuttavia, non incrementa automaticamente l'indirizzo verticale con un riporto. Pertanto, quando vengono scritti più dati consecutivamente, il programma deve determinare se è necessario azzerare l'indirizzo verticale.


      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

      ①. Come avviene l'allocazione della memoria per le variabili nel linguaggio C per microcontrollori? È possibile che il compilatore aggiunga in modo intelligente il codice di allocazione e riciclo durante il processo di compilazione? Il punto chiave è: come posso garantire che il programma che ho scritto non presenti errori di overflow della memoria? Se eseguo un'operazione ricorsiva, i requisiti di memoria sono difficili da calcolare autonomamente.  
      ②. Il linguaggio C del microcontrollore sarà limitato nella definizione delle variabili? Ad esempio, le operazioni di moltiplicazione e divisione di dati in virgola mobile sono scritte in linguaggio assembly e il codice è piuttosto complesso. Se fossero scritte direttamente in linguaggio C, non sarebbero troppo semplici?  
      ③. Nel file esadecimale generato dal linguaggio C del microcontrollore, la distribuzione degli indirizzi della ROM delle istruzioni e dei dati viene assegnata automaticamente dal compilatore? È possibile assegnarla manualmente dall'utente?  
      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.  
      Se ci sono troppe variabili, il compilatore segnalerà che il segmento di dati è troppo grande. Per evitare errori di overflow della memoria, la considerazione principale è se si verifica un overflow dello stack, e questo dipende dall'esperienza.
      Il linguaggio C dei microcontrollori generalmente vieta la ricorsione, e le operazioni ricorsive sono solitamente evitate. Dopotutto, i microcontrollori non sono PC, e questo influirà sulla velocità. Se si desidera utilizzare la ricorsione, è più opportuno impiegare un chip DSP. In breve, è necessario saper scegliere il chip appropriato.
      Risposta 2: La dimensione della variabile (numero di cifre) è generalmente uguale al numero di cifre dell'accumulatore del chip. Ad esempio, il numero 51 utilizza comunemente 8 bit perché è un microcontrollore a 8 bit.

      Il microcontrollore può definire variabili di bit, ma non array di bit. Scrivere in linguaggio C sembra semplice, ma in realtà genera la maggior quantità di codice. Il microcontrollore utilizzato per il controllo fa raramente uso di operazioni in virgola mobile, che non solo sono lente, ma anche problematiche e occupano spazio. Se si tratta di un chip DSP, sarebbe molto meglio se avesse una struttura hardware adeguata.  
       

      Risposta 3: Generalmente, l'allocazione avviene automaticamente. Può essere programmato con una combinazione di linguaggio C e linguaggio assembly, oppure può essere assemblato online utilizzando Keil C. Lo scambio di dati tra il chip e l'esterno avviene tramite la porta.


      Disclaimer: Questo articolo è riprodotto da "International Electronic Business Information". L'articolo rappresenta esclusivamente il punto di vista personale dell'autore e non quello di Sacco Micro o del settore. È consentito solo per la ristampa e la condivisione, nel rispetto dei diritti di proprietà intellettuale. Si prega di indicare la fonte originale e l'autore in caso di ristampa. Qualora si riscontrasse una violazione del copyright, si prega di contattarci per richiederne la rimozione.

      Numero di telefono dell'azienda: +86-0755-83044319
      Fax: +86-0755-83975897
      E-mail: 1615456225@qq.com
      QQ: 3518641314 Responsabile Li

      QQ: 332496225 Responsabile Qiu

      Indirizzo: Stanza 809, Edificio C, Edificio Tecnologico Zhantao, Viale Minzhi n. 1079, Nuovo Distretto di Longhua, Shenzhen

      whatsapp

      Linea diretta di assistenza

      tel: +86 755 83044319

      WhatsApp

      Whatsapp:+8618073002950