Notícias
Notícias
Resumo de divulgação científica mais forte da MCU [coleção recomendada] (3)
2022-03-17 230
12,Overview of Chinese characters:
Para exibir caracteres chineses em um monitor ou impressora, os caracteres chineses são dispostos em uma matriz de pontos de acordo com símbolos gráficos, obtendo-se assim o código de matriz de pontos correspondente (código de 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.  
  Código interno da câmera  
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 substituirmos o "." deste gráfico "口" por "0", podemos obter o código do glifo de "口" de forma muito vívida: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H. Quando o computador deseja exibir "口", ele primeiro encontra o primeiro endereço da biblioteca de fontes de exibição, calcula com base no código interno de "口", e então encontra o código do glifo de "口", e então percorre a tela sequencialmente de acordo com o código do glifo (em binário) através do controle do gerador de caracteres. Onde o código binário é "0", o local onde é "0" é escaneado, e o local onde é "1" é escaneado para destacar, de modo que o padrão de caracteres de "口" possa ser obtido.  
As fontes de caracteres chineses são organizadas de acordo com o código padrão nacional e armazenadas na memória na forma de arquivos binários, formando uma biblioteca de fontes de caracteres chineses, também chamada de biblioteca de glifos de caracteres chineses ou biblioteca de caracteres chineses.
Existem dois métodos de codificação; consulte o arquivo de cabeçalho.
    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] indica que existe um array de estruturas do tipo typFNT_GB16 chamado codeGB_16. codeGB_16[k] é o elemento k+1 do array. index é um elemento da estrutura typFNT_GB16, portanto, pode ser referenciado com codeGB_16[k].Index. Ao mesmo tempo, index é um array, então pode ser indexado como indexed[0]. Se ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && é um operador lógico AND, o que significa que os valores em ambos os lados do símbolo && são verdadeiros. Somente o valor de && é verdadeiro, ou seja, verdadeiro && verdadeiro = verdadeiro. Esta frase significa: codeGB_16[k].Index[0]==c[0] e codeGB_16[k].Index[1]==c[1] são estabelecidos simultaneamente. Se a seguinte instrução for executada, codeGB_16[] é um array de estruturas, codeGB_16[k].Index[0] significa o valor do elemento 0 do índice k da k-ésima estrutura do array de estruturas.    

    13,12864 LCD:

    Cada ponto de exibição corresponde a um número binário, onde 1 significa ligado e 0 significa desligado. A memória RAM que armazena essas informações da matriz de pontos é chamada de memória de dados de exibição. Para exibir um determinado gráfico ou caractere chinês, basta escrever as informações da matriz de pontos correspondentes na unidade de armazenamento apropriada.


    O contador de endereços (AC) da memória RAM gráfica incrementará automaticamente apenas o endereço horizontal (eixo X) em um. Quando o endereço horizontal for igual a 0FH, ele será zerado para 00H. No entanto, ele não incrementará automaticamente o endereço vertical com um carry. Portanto, quando vários dados são gravados continuamente, o programa precisa determinar se o endereço vertical precisa ser zerado.


      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. Como é feita a alocação de memória para variáveis ​​na linguagem C de microcontroladores? O compilador adiciona código de alocação e reciclagem de forma inteligente durante o processo de compilação? A questão principal é: como posso garantir que o programa que desenvolvi não apresente erros de estouro de memória? Se eu estiver realizando uma operação recursiva, os requisitos de memória são difíceis de calcular manualmente.  
      2. A linguagem C do microcontrolador terá restrições na definição de variáveis? Por exemplo, as operações de multiplicação e divisão de dados de ponto flutuante são escritas em assembly, e o código é bastante complexo. Se fosse escrito diretamente em linguagem C, não seria muito simples?  
      ③. No arquivo hexadecimal gerado pela linguagem C do microcontrolador, a distribuição de endereços da ROM de instruções e dados é atribuída automaticamente pelo compilador? Os usuários podem fazer essa atribuição?  
      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 houver variáveis ​​em excesso, o compilador alertará que o segmento de dados é muito grande. Para garantir que não ocorra um erro de estouro de memória, a principal consideração é se haverá estouro de pilha, e isso depende da experiência.
      A linguagem C dos microcontroladores geralmente proíbe recursão, e operações recursivas são geralmente evitadas. Afinal, microcontroladores não são PCs, o que afetaria a velocidade. Se você precisar usar recursão, é mais apropriado usar um chip DSP. Em resumo, você precisa saber escolher o chip adequado.
      Resposta 2: O tamanho da variável (número de dígitos) geralmente é o mesmo que o número de dígitos no acumulador do chip. Por exemplo, 51 geralmente usa 8 bits porque é um microcontrolador de 8 bits.

      O microcontrolador pode definir variáveis ​​binárias, mas não vetores binários. Programar em linguagem C parece simples, mas na realidade gera a maior quantidade de código. O microcontrolador usado para controle raramente utiliza operações de ponto flutuante, o que não só é lento, como também trabalhoso e ocupa espaço. Se fosse um chip DSP, seria muito melhor se ele tivesse uma estrutura de hardware adequada.  
       

      Resposta 3: Geralmente, a alocação é automática. O chip pode ser programado em uma combinação de linguagem C e linguagem assembly, ou pode ser montado online usando o Keil C. A troca de dados entre o chip e o exterior é feita através da porta.


      Aviso: Este artigo foi reproduzido da "International Electronic Business Information". Este artigo representa apenas a opinião pessoal do autor e não representa a opinião da Sacco Micro ou do setor. Sua reprodução e compartilhamento são permitidos apenas para fins de proteção dos direitos de propriedade intelectual. Ao reproduzir este artigo, favor indicar a fonte original e o autor. Em caso de infração de direitos autorais, entre em contato conosco para que possamos removê-lo.

      Número de telefone da empresa: +86-0755-83044319
      Fax: +86-0755-83975897
      E-mail: 1615456225@qq.com
      QQ: 3518641314 Gerente Li

      QQ: 332496225 Gerente Qiu

      Endereço: Sala 809, Edifício C, Edifício de Tecnologia Zhantao, nº 1079 Avenida Minzhi, Novo Distrito de Longhua, Shenzhen

      whatsapp

      Service Hotline

      tel: +86 755 83044319

      WhatsApp

      Whatsapp:+8618073002950