Tin tức
Tin tức
Bản tóm tắt khoa học phổ biến hay nhất của MCU [bộ sưu tập được đề xuất] (3)
2022-03-17 230
12,Overview of Chinese characters:
Để hiển thị các ký tự tiếng Trung trên màn hình hoặc máy in, các ký tự tiếng Trung được thiết kế thành ma trận điểm dựa trên các ký hiệu đồ họa, và mã ma trận điểm tương ứng (mã ký tự) được thu được.  
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.  
  Mã trong máy ảnh  
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.  
Nếu ta thay dấu "." của ký tự "口" này bằng "0", ta có thể thấy rõ mã ký tự của "口" như sau: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H. Khi máy tính muốn xuất ra ký tự "口", trước tiên nó sẽ tìm địa chỉ đầu tiên của thư viện phông chữ hiển thị, tính toán dựa trên mã nội bộ của "口", sau đó tìm mã ký tự của "口", và sau đó quét màn hình theo trình tự dựa trên mã ký tự (ở dạng nhị phân) thông qua sự điều khiển của bộ tạo ký tự. Tại vị trí có mã nhị phân là "0", ta quét vị trí có mã nhị phân là "0", và quét vị trí có mã nhị phân là "1" để làm nổi bật, từ đó thu được mẫu ký tự "口".  
Các ký tự chữ Hán được sắp xếp theo thứ tự mã chuẩn quốc gia và được lưu trữ trong bộ nhớ dưới dạng các tệp nhị phân, tạo thành thư viện ký tự chữ Hán, còn được gọi là thư viện ký tự chữ Hán hoặc thư viện chữ Hán.
Có hai phương pháp mã hóa, xem tệp tiêu đề.
    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] cho biết có một mảng cấu trúc typFNT_GB16 được gọi là codeGB_16. codeGB_16[k] là thành viên k+1 của mảng. index là một thành viên của cấu trúc typFNT_GB16, vì vậy nó có thể được tham chiếu bằng codeGB_16[k].Index. Đồng thời, index là một mảng, vì vậy nó có thể được lập chỉ mục[0]. Nếu((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && là một toán tử logic AND, có nghĩa là các giá trị ở cả hai phía của ký hiệu && đều đúng. Chỉ có giá trị của && là đúng, tức là đúng && đúng = đúng. Câu này có nghĩa là: codeGB_16[k].Index[0]==c[0] và codeGB_16[k].Index[1]==c[1] được thiết lập cùng một lúc. Nếu câu lệnh sau được thực thi, codeGB_16[] là một mảng cấu trúc, codeGB_16[k].Index[0] có nghĩa là giá trị phần tử thứ 0 của thành viên chỉ mục của cấu trúc thứ K trong mảng cấu trúc.    

    13,12864 LCD:

    Mỗi điểm ảnh hiển thị tương ứng với một số nhị phân, 1 nghĩa là bật, 0 nghĩa là tắt. Bộ nhớ RAM lưu trữ thông tin ma trận điểm ảnh này được gọi là bộ nhớ dữ liệu hiển thị. Để hiển thị một hình ảnh hoặc ký tự tiếng Trung nhất định, cần ghi thông tin ma trận điểm ảnh tương ứng vào đơn vị lưu trữ tương ứng.


    Bộ đếm địa chỉ (AC) của RAM đồ họa chỉ tự động tăng địa chỉ ngang (trục X) lên một. Khi địa chỉ ngang bằng 0FH, nó sẽ được đặt lại về 00H. Tuy nhiên, nó sẽ không tự động tăng địa chỉ dọc khi có bit nhớ. Do đó, khi ghi nhiều dữ liệu liên tục, chương trình cần xác định xem địa chỉ dọc có cần được đặt lại hay không.


      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

      ①. Việc cấp phát bộ nhớ cho các biến trong ngôn ngữ C dành cho vi điều khiển được thực hiện như thế nào? Liệu trình biên dịch có tự động thêm mã cấp phát và tái sử dụng bộ nhớ trong quá trình biên dịch không? Điểm mấu chốt là chương trình tôi viết ra, làm thế nào để đảm bảo nó không bị lỗi tràn bộ nhớ? Nếu tôi thực hiện một phép toán đệ quy, thì việc tự tính toán yêu cầu bộ nhớ sẽ rất khó khăn.  
      2. Ngôn ngữ C dành cho vi điều khiển có bị hạn chế trong việc định nghĩa biến không? Ví dụ, các phép nhân và chia dữ liệu dấu phẩy động được viết bằng ngôn ngữ assembly, và mã khá phức tạp. Nếu viết trực tiếp bằng ngôn ngữ C, liệu nó có quá đơn giản không?  
      ③. Trong tập tin hex được tạo ra bởi ngôn ngữ C của vi điều khiển, việc phân bổ địa chỉ cho ROM lệnh và ROM dữ liệu có được trình biên dịch tự động gán không? Người dùng có thể gán địa chỉ này không?  
      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.  
      Nếu có quá nhiều biến, trình biên dịch sẽ báo lỗi rằng phân đoạn dữ liệu quá lớn. Để đảm bảo không xảy ra lỗi tràn bộ nhớ, điều cần xem xét chính là liệu ngăn xếp có bị tràn hay không, và điều này phụ thuộc vào kinh nghiệm.
      Ngôn ngữ lập trình C của vi điều khiển nói chung cấm đệ quy, và các thao tác đệ quy thường được tránh. Xét cho cùng, vi điều khiển không phải là máy tính cá nhân, điều này sẽ ảnh hưởng đến tốc độ. Nếu muốn sử dụng đệ quy, việc sử dụng chip xử lý tín hiệu số (DSP) sẽ phù hợp hơn. Tóm lại, bạn phải biết cách chọn chip phù hợp.
      Câu trả lời 2: Kích thước của biến (số chữ số) thường bằng với số chữ số trong bộ tích lũy của chip. Ví dụ, 51 thường sử dụng 8 bit vì nó là vi điều khiển 8 bit.

      Vi điều khiển có thể định nghĩa các biến bit, nhưng không thể định nghĩa mảng bit. Viết bằng ngôn ngữ C có vẻ đơn giản, nhưng thực tế lại tạo ra lượng mã lớn nhất. Vi điều khiển dùng để điều khiển hầu như không sử dụng các phép toán dấu phẩy động, điều này không chỉ chậm mà còn rắc rối và chiếm nhiều không gian. Nếu là chip DSP, sẽ tốt hơn nhiều nếu nó có cấu trúc phần cứng phù hợp.  
       

      Câu trả lời 3: Thông thường, nó được cấp phát tự động. Nó có thể được lập trình bằng sự kết hợp giữa ngôn ngữ C và ngôn ngữ hợp ngữ, hoặc có thể được biên dịch trực tuyến bằng Keil C. Việc trao đổi dữ liệu giữa chip và bên ngoài được thực hiện thông qua cổng.


      Tuyên bố miễn trừ trách nhiệm: Bài viết này được sao chép từ "Thông tin Thương mại Điện tử Quốc tế". Bài viết này chỉ thể hiện quan điểm cá nhân của tác giả và không đại diện cho quan điểm của Sacco Micro hay toàn ngành. Bài viết chỉ được phép in lại và chia sẻ nhằm hỗ trợ bảo vệ quyền sở hữu trí tuệ. Vui lòng ghi rõ nguồn gốc và tác giả khi in lại. Nếu phát hiện vi phạm bản quyền, vui lòng liên hệ với chúng tôi để xóa bỏ.

      Số điện thoại công ty: +86-0755-83044319
      Số fax: +86-0755-83975897
      Email: 1615456225@qq.com
      QQ: 3518641314 Quản lý Li

      QQ: 332496225 Quản lý Qiu

      Địa chỉ: Phòng 809, Tòa nhà C, Tòa nhà Công nghệ Zhantao, Số 1079 Đại lộ Minzhi, Khu Longhua Mới, Thâm Quyến

      whatsapp

      Đường dây nóng Dịch vụ

      tel: +86 755 83044319

      WhatsApp

      Whatsapp:+8618073002950