微控制器控制點陣字元顯示及字模提取原理

2021-07-31 07:21:09 字數 3103 閱讀 2711

微控制器應用經常會用到液晶顯示或者led點陣屏,是用點陣的方式顯示的,要顯示漢字或字元的時候會用到字模,字模就是字在點陣上顯示時對應的編碼。以字模的方式儲存圖形或者文字,每乙個點都需要乙個bit位來儲存,該位為0代表該畫素點不顯示,為1代表顯示。這樣,乙個位元組就可以儲存8個畫素點的顯示情況。

一般採用宋體小四號的字元來做顯示,這樣乙個英文本元剛好佔8*16個畫素;而漢字需要兩倍,即16*16畫素來顯示乙個漢字。這樣,儲存乙個英文本元每行8個點需要1個位元組儲存,一共16行需要16個位元組,

同理乙個漢字需要32個

所以如果m這個英文本元按從左到右從上到下的方式從高位到低位取模

c**  

0 0 0 0 0 0 0 0   

0 0 0 0 0 0 0 0   

0 0 0 0 0 0 0 0   

1 1 1 0 1 1 1 0   

0 1 1 0 1 1 0 0   

0 1 1 0 1 1 0 0   

0 1 1 0 1 1 0 0   

0 1 1 0 1 1 0 0   

0 1 0 1 0 1 0 0   

0 1 0 1 0 1 0 0   

0 1 0 1 0 1 0 0   

0 1 0 1 0 1 0 0   

0 1 0 1 0 1 0 0   

1 1 0 1 0 1 1 0   

0 0 0 0 0 0 0 0   

0 0 0 0 0 0 0 0   

其中為1的地方畫出了m的形狀;如果把0換成空格,由1拼成的m就顯示出來了:             

c**  

1 1 1   1 1 1     

1 1   1 1       

1 1   1 1       

1 1   1 1       

1 1   1 1       

1   1   1       

1   1   1       

1   1   1       

1   1   1       

1   1   1       

1 1   1   1 1     

因此,我們要記錄16行中每一行由0和1組成的一位元組整數的值,就記錄了這張位圖;   

如第1,2,3行是00000000,它的值為0,第四行是11101110,用十六進製制表示就是0xee;

以此類推,得到16個單位元組整數:0x00,0x00,0x00,0xee,0x6c,0x6c,0x6c,0x6c,0x54,0x54,0x54,0x54,0x54,0xd6,0x00,0x00

這些陣列可以通過軟體計算出來,我們只需要在微控制器中通過**讀取這些資料就可以顯示出來了,

解析過程與編碼這些資料是剛好相反的。

c**  

#include 

#include 

unsigned char am = ; //m

void showm()else  

t <<= 1;          //將右邊的資料往左移動

}  printf("\n");  

}  }  

int main(void)   

然而,對於中文字元,每個漢字每行有16個畫素,需要2個位元組,所以每行需要對兩個位元組資料進行列印,所以要增加乙個for迴圈:

c**  

#include 

#include 

unsigned char ch = ;  

void showm()  

else

t <<= 1;          //將右邊的資料往左移動

}  for (j = 0; j 

else

u <<= 1;          //將右邊的資料往左移動

}  printf("\n");  

}  }  

int main(void)   

列印結果:

c**  

mm              mmmmmmmm      

mm    mmmmmmmmmm              

mm      mm    mm    mm        

mmmmmmmmmm    mm  mm  mm          

mm    mmmmmmmmmmmmmmmmmmmm    

mm          mmmmmm            

mm  mm    mm  mm  mm          

mmmm    mm    mm    mmmmmm    

mmmm  mmmmmmmmmmmmmmmmmmmm      

mm  mm      mm    mm    mm        

mm      mm    mm    mm        

mm      mmmmmmmmmmmmmm        

mm      mm    mm    mm        

mm      mm    mm    mm        

mm  mm      mmmmmmmmmmmmmm        

mm        mm          mm        

這樣就顯示了乙個漢字。

public class en ; //m 

public static void showm()else

t <<= 1;//將右邊的資料往左移動

} system.out.println();

} }

public static void main(string args)

}public class cn ;

public static void showm() else

t <<= 1; // 將右邊的資料往左移動

}for (j = 0; j < 8; ++j)// 列印右半邊畫素

else

u <<= 1; // 將右邊的資料往左移動

}system.out.println();

} }public static void main(string args)

}

微控制器例項 定時器控制點陣顯示0 9

顯示狀態 點陣上每隔1s顯示乙個數字,顯示到9又重頭顯示不斷迴圈 include includetypedef unsigned int u16 typedef unsigned char u8 u8 flag 0 時間標誌位 define lie io p0 定義p0埠 sbit rclkk p3...

51微控制器控制LED顯示漢字

2007 12 25 12 34 26 用51微控制器控制led顯示漢字,電路中行方向由p0口和p2口完成掃瞄,由於p0口沒有上拉電阻,因此接乙個4.7k 8的排阻上拉。如沒有排阻,也可用8個普通的4.7k 1 8w電阻。為提供負載能力,接16個2n5551的npn三極體驅動。列方向則由4 16解碼...

51微控制器 8X8點陣顯示

74hc595.h ifndef 74hc595 h define 74hc595 h 位定義 sbit data in p1 0 序列資料輸入 sbit st ck p1 1 儲存暫存器時鐘輸入 sbit sh ck p1 2 移位暫存器時鐘輸入 函式宣告 void ser in unsigned...