c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字
// matrix2pcs20140821.ino
const int SH_CP = 8;
const int DS = 9;
const int ST_CP = 10;
//聲明4個數(shù)組臨時變量
byte part_A[8], part_B[8],part_C[8],part_D[8],
part_A_A[8],part_B_B[8],part_C_C[8],part_D_D[8],
part_E[8],part_F[8],part_G[8],part_H[8];
//字符列數(shù)據(jù),規(guī)則是二維數(shù)組的第1維代表上下兩個矩陣,第二維中第0數(shù)組和第1數(shù)組分別是左邊的8*8點陣和右邊的8*8點陣
byte Col[][2][16]={
{
{0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0xFC,0x03,0xFD,0xFF,0xFD,0xFF,0xC0,0x0F,0xDF,0xEF},
{0xDF,0xEF,0xDF,0xEF,0xC0,0x0F,0xFF,0xFF,0xDB,0x77,0xDD,0xBB,0xBD,0xBB,0x7F,0xFB},/*"點",0*/
}
,
{
{0xFF,0xBF,0x83,0xBF,0xBB,0xBF,0xB4,0x01,0xB7,0x7F,0xAF,0x5F,0xB6,0xDF,0xB6,0x03},
{0xBB,0xDF,0xBB,0xDF,0xBB,0xDF,0x94,0x01,0xAF,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xDF},/*"陣",1*/
}
,
{
{0xFF,0x7F,0xDF,0xBF,0xE8,0x03,0xEE,0xEF,0x7D,0xB7,0xBB,0x7B,0xBE,0xDF,0xEC,0x0F},
{0xEF,0xEF,0xDF,0x77,0x1E,0xAF,0xDC,0xDF,0xDA,0xEF,0xD6,0xB7,0xDE,0x79,0xFE,0xFF},/*"滾",2*/
}
,
{
{0xFF,0xFF,0xC0,0x07,0xDF,0xF7,0xDF,0xF7,0xC0,0x07,0xDB,0xEF,0xDD,0xDF,0xD0,0x07},
{0xDD,0xDF,0xDD,0xDF,0xC0,0x03,0xDD,0xDF,0xBD,0xDF,0xBB,0xDF,0x7B,0xDF,0xF7,0xDF},/*"屏",3*/
}
,
{
{0xDF,0xBF,0xC1,0x81,0xB7,0x6F,0x7F,0xFF,0xC0,0x07,0xDF,0xF7,0xC0,0x07,0xDF,0xF7},
{0xC0,0x07,0xDF,0xF7,0xC0,0x07,0xF7,0xDF,0x00,0x01,0xF7,0xDF,0xEF,0xDF,0xDF,0xDF},/*"算",4*/
}
,
{
{0xFF,0xBF,0xDF,0xBF,0xEF,0xBF,0xEF,0xBF,0x78,0x03,0xBF,0xBF,0xBF,0xBF,0xEF,0xBF},
{0xE0,0x01,0xDF,0xBF,0x1F,0x7F,0xDE,0xFF,0xDD,0xEF,0xDB,0xF7,0xD0,0x03,0xFB,0xFB},/*"法",5*/
}
,
};
byte Row[] = {1,2,4,8,16,32,64,128};
void setup() {
pinMode(SH_CP, OUTPUT);
pinMode(DS,OUTPUT);
pinMode(ST_CP,OUTPUT);
}
//定義待顯示字符數(shù)量
byte ch_num=6;
//定義顯示速度變量
byte speed = 10;
void loop() {
//初始化點陣移動計數(shù)器
byte counter=0;
//col[][]二維數(shù)組中兩個數(shù)組,均為16個數(shù)據(jù),循環(huán)16次,將數(shù)據(jù)分配各臨時變量,4個臨時變量對應(yīng)4個8*8點陣,
//對應(yīng)順序是part_A對應(yīng)左上;part_B對應(yīng)右上;part_C對應(yīng)左下;
//A和C點陣都是數(shù)組中的計數(shù)數(shù)據(jù);B和C都是數(shù)組中的偶數(shù)數(shù)據(jù)
for(int c=0; c
byte a=0;
byte b=0;
for(int i=0; i<16; i++){
//i%2==0證明是數(shù)組中的偶數(shù)數(shù)據(jù),包括0%2==0,故col數(shù)組中0,2,4,6,8,10,12,14,16相應(yīng)數(shù)據(jù)裝入part_A和part_C
if(i%2==0)
{
//如果讀取的字符數(shù)據(jù)時字符數(shù)據(jù)庫col中的倒數(shù)第二個數(shù)據(jù)時,
if(c==(ch_num-2)){
part_A[a]=Col[c][0][i];
part_C[a]=Col[c][1][i];
//第二個點陣數(shù)據(jù)為倒數(shù)第一個數(shù)據(jù)
part_A_A[a]=Col[c+1][0][i];
part_C_C[a]=Col[c+1][1][i];
//緩沖數(shù)據(jù)為字符庫數(shù)據(jù)中開頭數(shù)據(jù)
part_E[a]=Col[0][0][i];
part_G[a]=Col[0][1][i];
//將col[]數(shù)組中的數(shù)據(jù)逐一分配給臨時變量
a++;
}
//如果讀取的字符數(shù)據(jù)時字符數(shù)據(jù)庫col中的倒數(shù)第一個數(shù)據(jù)時,
else if(c==(ch_num-1)){
part_A[a]=Col[c][0][i];
part_C[a]=Col[c][1][i];
//循環(huán)到字符數(shù)據(jù)庫的開頭數(shù)據(jù)
part_A_A[a]=Col[0][0][i];
part_C_C[a]=Col[0][1][i];
part_E[a]=Col[1][0][i];
part_G[a]=Col[1][1][i];
//將col[]數(shù)組中的數(shù)據(jù)逐一分配給臨時變量
a++;
}
else
//這段是正常思路:逐個獲取字符數(shù)據(jù)
{
part_A[a]=Col[c][0][i];
part_C[a]=Col[c][1][i];
part_A_A[a]=Col[c+1][0][i];
part_C_C[a]=Col[c+1][1][i];
part_E[a]=Col[c+2][0][i];
part_G[a]=Col[c+2][1][i];
a++;
}
}
//與i%2==0相對應(yīng),如果i%2≠0,就執(zhí)行下面else里面的內(nèi)容
else
{
//如果讀取的字符數(shù)據(jù)時字符數(shù)據(jù)庫col中的倒數(shù)第二個字符數(shù)據(jù)時
if(c==(ch_num-2)){
part_B[b]=Col[c][0][i];
part_D[b]=Col[c][1][i];
//第二個點陣數(shù)據(jù)為字符數(shù)據(jù)庫中最后一個字符數(shù)據(jù)
part_B_B[b]=Col[c+1][0][i];
part_D_D[b]=Col[c+1][1][i];
//為了循環(huán)顯示,緩沖數(shù)據(jù)回到字符數(shù)據(jù)庫開頭數(shù)據(jù)
part_F[b]=Col[0][0][i];
part_H[b]=Col[0][1][i];
//將col[]數(shù)組中的數(shù)據(jù)逐一分配給臨時變量
b++;
}
//如果讀取的字符數(shù)據(jù)時變量c為字符數(shù)據(jù)庫col中的倒數(shù)第1個字符數(shù)據(jù)時
else if(c==(ch_num-1)){
part_B[b]=Col[c][0][i];
part_D[b]=Col[c][1][i];
part_B_B[b]=Col[0][0][i];
part_D_D[b]=Col[0][1][i];
part_F[b]=Col[1][0][i];
part_H[b]=Col[1][1][i];
b++;
}
//這個else里面的內(nèi)容為正常思路,逐字符獲取數(shù)據(jù)
else {
part_B[b]=Col[c][0][i];
part_D[b]=Col[c][1][i];
part_B_B[b]=Col[c+1][0][i];
part_D_D[b]=Col[c+1][1][i];
part_F[b]=Col[c+2][0][i];
part_H[b]=Col[c+2][1][i];
b++;
}
}
}
//第一次dowhile循環(huán)將點陣B數(shù)據(jù)移動到點陣A的位置;點著A_A數(shù)據(jù)移動到點陣B的位置。
do{
for(int t=0; t
for(int i=0; i<8; i++){
digitalWrite(ST_CP, LOW);
shiftOut(DS, SH_CP, MSBFIRST, part_A[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_B[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_A_A[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_B_B[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, Row[i]);
shiftOut(DS, SH_CP, MSBFIRST, part_C[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_D[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_C_C[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_D_D[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, Row[i]);
digitalWrite(ST_CP, HIGH);
}
}
counter++;
}
//第二次dowhile循環(huán)將點陣A_A數(shù)據(jù)移動到點陣A的位置;將點陣B_B的數(shù)據(jù)移動到點陣B的位置;第二個完整的字進入顯示屏。
while (counter<8);
counter=0;
do{
for(int t=0; t
for(int i=0; i<8; i++){
digitalWrite(ST_CP, LOW);
shiftOut(DS, SH_CP, MSBFIRST, part_B[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_A_A[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_B_B[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_E[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, Row[i]);
shiftOut(DS, SH_CP, MSBFIRST, part_D[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_C_C[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_D_D[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, part_G[i]<>(8-counter));
shiftOut(DS, SH_CP, MSBFIRST, Row[i]);
digitalWrite(ST_CP, HIGH);
}
}
counter++;
}
while (counter<8);
counter=0;
}
}
總結(jié)
以上是生活随笔為你收集整理的c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言放大字符怎么编程,c语言中怎么将个
- 下一篇: android布局加色,android