Новости
Новости
Самый сильный научно-популярный обзор киновселенной Marvel [рекомендуемая подборка] (3)
2022-03-17 230
12,Overview of Chinese characters:
Для вывода китайских иероглифов на монитор или принтер, эти символы преобразуются в точечно-матричный код в соответствии с графическими обозначениями, и получается соответствующий точечно-матричный код (код глифа).  
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.  
  Встроенный в камеру код  
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.  
Если заменить точку в этом графическом изображении «口» на «0», мы получим очень наглядный код глифа «口»: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. Когда компьютер хочет вывести «口», он сначала находит первый адрес библиотеки шрифтов для отображения, вычисляет на основе внутреннего кода «口», затем находит код глифа «口» и последовательно сканирует экран в соответствии с кодом глифа (в двоичном виде) под управлением генератора символов. В двоичном коде, где значение равно "0", сканируется место, где оно равно "0", а место, где оно равно "1", выделяется, таким образом, можно получить последовательность символов "口".  
Шрифты китайских иероглифов упорядочены в соответствии с национальным стандартным кодом и хранятся в памяти в виде бинарных файлов, образуя библиотеку шрифтов китайских иероглифов, также называемую библиотекой глифов китайских иероглифов или библиотекой китайских иероглифов.
Два метода кодирования, см. заголовочный файл.
    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] указывает, что существует массив структуры typFNT_GB16 под названием codeGB_16. codeGB_16[k] — это k+1-й элемент массива. index является членом структуры typFNT_GB16, поэтому на него можно ссылаться с помощью codeGB_16[k].Index. В то же время index является массивом, поэтому его можно индексировать. If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && — это логический оператор И, что означает, что значения с обеих сторон символа && истинны. Истинным является только значение &&, то есть true && true = true. Это предложение означает: codeGB_16[k].Index[0]==c[0] и codeGB_16[k].Index[1]==c[1] устанавливаются одновременно. Если выполняется следующее выражение, codeGB_16[] представляет собой массив структур, а codeGB_16[k].Index[0] означает значение 0-го элемента индекса K-й структуры массива структур.    

    13,12864 LCD:

    Каждая точка на дисплее соответствует двоичному числу: 1 означает включение, 0 — выключение. Оперативная память, хранящая эту информацию, называется памятью данных дисплея. Для отображения определенного изображения или китайского символа необходимо записать соответствующую информацию с матрицы в соответствующий запоминающий блок.


    Счетчик адресов (AC) графической памяти автоматически увеличивает только горизонтальный адрес (ось X) на единицу. Когда горизонтальный адрес равен 0FH, он сбрасывается до 00H. Однако он не увеличивает автоматически вертикальный адрес автоматически при переносе. Поэтому при непрерывной записи нескольких данных программе необходимо определить, нужно ли сбрасывать вертикальный адрес.


      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

      ①. Как происходит выделение памяти для переменных в языке C для микроконтроллеров? Возможно ли, что компилятор интеллектуально добавляет код выделения и повторного использования памяти в процессе компиляции? Ключевой момент заключается в том, как я могу гарантировать отсутствие ошибок переполнения памяти в созданной мной программе? Если я выполняю рекурсивную операцию, то рассчитать требования к памяти самостоятельно сложно.  
      ②. Будут ли ограничения в определении переменных в языке C для микроконтроллеров? Например, операции умножения и деления чисел с плавающей запятой записываются на ассемблере, и код довольно сложный. Если бы он был написан непосредственно на языке C, разве это не было бы слишком просто?  
      ③. В шестнадцатеричном файле, сгенерированном микроконтроллером на языке C, распределение адресов ПЗУ инструкций и данных автоматически назначается компилятором? Могут ли пользователи назначать его самостоятельно?  
      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.  
      Если переменных слишком много, компилятор выдаст сообщение о том, что сегмент данных слишком велик. Для предотвращения ошибки переполнения памяти основным критерием является наличие переполнения стека, и это зависит от опыта.
      Язык C, используемый в микроконтроллерах, как правило, запрещает рекурсию, и рекурсивные операции обычно избегаются. В конце концов, микроконтроллеры — это не персональные компьютеры, что повлияет на скорость. Если рекурсия необходима, целесообразнее использовать DSP-чип. Короче говоря, нужно уметь выбирать подходящий чип.
      Ответ 2: Размер переменной (количество разрядов) обычно совпадает с количеством разрядов в микросхеме-аккумуляторе. Например, микроконтроллер 51 обычно использует 8 бит, поскольку это 8-битный микроконтроллер.

      Микроконтроллер может определять битовые переменные, но не может определять битовые массивы. Написание кода на языке C кажется простым, но на самом деле генерирует наибольший объем кода. Микроконтроллер, используемый для управления, практически не использует операции с плавающей запятой, что не только медленно, но и проблематично, а также занимает много места. Если это DSP-чип, то гораздо лучше, если у него будет подходящая аппаратная структура.  
       

      Ответ 3: Как правило, выделение памяти происходит автоматически. Программирование может осуществляться на языке C и ассемблере, либо в режиме онлайн с использованием Keil C. Обмен данными между микросхемой и внешним миром происходит через порт.


      Отказ от ответственности: Данная статья воспроизведена из издания «International Electronic Business Information». Эта статья отражает исключительно личное мнение автора и не представляет точку зрения компании Sacco Micro и отрасли в целом. Она предназначена только для перепечатки и распространения и способствует защите прав интеллектуальной собственности. Пожалуйста, указывайте первоисточник и автора при перепечатке. В случае нарушения авторских прав, пожалуйста, свяжитесь с нами для удаления публикации.

      Номер телефона компании: +86-0755-83044319
      Факс: +86-0755-83975897
      Почта: 1615456225@qq.com
      QQ: 3518641314 Менеджер Ли

      QQ: 332496225 Менеджер Цю

      Адрес: Комната 809, корпус C, технологический корпус Чжаньтао, проспект Миньчжи, 1079, новый район Лунхуа, Шэньчжэнь.

      whatsapp

      Горячая линия обслуживания

      tel: +86 755 83044319

      WhatsApp

      Whatsapp:+8618073002950