点阵LCD中具体的像素点和十六进制数的关系

http://bbs.csdn.net/topics/90113612

点阵字库就是将一个字分成m x n个小方块,每个小方块相当于一个像素,每个像素用1 bit记录点的颜色,字体颜色或背景颜色。比如1表示字体颜色0表示背景颜色。


据我猜测,你写出的点阵字库是16X16的。即每个字有16X16个像素。一般16X16点阵字库是横向扫瞄
两个字节记录一行的16个像素。比如:0x03 0x0f写成二进制是:
0000001100001111,象素值为0在相应位置显示背景色,1显示字体颜色。


http://blog.csdn.net/u012519969/article/details/17298011

下面的二维数组定义了10个数字的字模(要是采用别的字体,这个数组中的数字变一下即可):

[cpp]  view plain copy
  1. char a[10][8]=  
  2. {  
  3.     {0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x18}, //0  
  4.     {0x00,0x18,0x1c,0x18,0x18,0x18,0x18,0x18}, //1  
  5.     {0x00,0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e}, //2  
  6.     {0x00,0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e}, //3  
  7.     {0x00,0x30,0x38,0x34,0x32,0x3e,0x30,0x30}, //4  
  8.     {0x00,0x1e,0x02,0x1e,0x30,0x30,0x30,0x1e}, //5  
  9.     {0x00,0x1c,0x06,0x1e,0x36,0x36,0x36,0x1c}, //6  
  10.     {0x00,0x3f,0x30,0x18,0x18,0x0c,0x0c,0x0c}, //7  
  11.     {0x00,0x1c,0x36,0x36,0x1c,0x36,0x36,0x1c}, //8  
  12.     {0x00,0x1c,0x36,0x36,0x36,0x3c,0x30,0x1c}, //9  
  13. };  
这个数组,表示的是数字的字模?这,这,从何说起?

  以数字3对应的数据a[3]({0x00,0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e}, //3)为例,包括有8个十六进制的数,每行一个十六进制数,并且换成二进制的表示,会是什么样的呢?

  是这样的:

00000000  //0x00
00011110  //0x1e
00110000  //0x30
00110000  //0x30
00011100  //0x1c
00110000  //0x30
00110000  //0x30
00011110  //0x1e
  请看1出现的地方,可以借着鼠标按1出现的轨迹跟着划一划,不就是 数字3字型的轮廓 吗?只不过,耳朵状的3是反着的(这自有道理,看完程序1自会明白)。

[cpp]  view plain copy
  1. #include  
  2. using  std::cout;  
  3. using std::endl;  
  4. using std::cin;  
  5. char a[10][8]=  
  6. {  
  7.     {0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x18}, //0  
  8.     {0x00,0x18,0x1c,0x18,0x18,0x18,0x18,0x18}, //1  
  9.     {0x00,0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e}, //2  
  10.     {0x00,0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e}, //3  
  11.     {0x00,0x30,0x38,0x34,0x32,0x3e,0x30,0x30}, //4  
  12.     {0x00,0x1e,0x02,0x1e,0x30,0x30,0x30,0x1e}, //5  
  13.     {0x00,0x1c,0x06,0x1e,0x36,0x36,0x36,0x1c}, //6  
  14.     {0x00,0x3f,0x30,0x18,0x18,0x0c,0x0c,0x0c}, //7  
  15.     {0x00,0x1c,0x36,0x36,0x1c,0x36,0x36,0x1c}, //8  
  16.     {0x00,0x1c,0x36,0x36,0x36,0x3c,0x30,0x1c}, //9  
  17. };  
  18. int main()  
  19. {  
  20.     int b[8];  
  21.     int c[10];  
  22.     int x;  
  23.     int n;  
  24.     int num=0;  
  25.     cout<<"输入要显示的数字:";  
  26.     cin>>n;  
  27.     while(n!=0)  
  28.         //选择whie与for循环的关键一点是:结束循环的条件的确定  
  29.         //如果用for循环如何确定这个结束条件呢?  
  30.         //这么写  
  31. //  for(k=0; n&&k<8; k++)   //c数组将分离出n中的各位数,不过是倒着的,例n=123,c中保存3 2 1  
  32. //        {  
  33. //            c[k]=n%10;  
  34. //            n/=10;  
  35. //        }  
  36.     {  
  37.         c[num]=n%10;  
  38.         n=n/10;  
  39.         num++;  
  40.     }  
  41.     for(int i=0;i<8;i++)  
  42. //  for循环的次序能够影响输出的格式,  
  43. //  i与q的调换就是 横着与竖着输出,这里犯错误了,  
  44. //  基本弄明白了。需要再熟练理解。  
  45.     {  
  46.         for(int q=num-1;q>=0;q--)  
  47.         {  
  48.             x=a[c[q]][i];  
  49.            for(int j=0;j<8;j++)  
  50.            {  
  51.                b[j]=x%2;  
  52.                x=x/2;  
  53.                 if(b[j]%2)cout<<"p";  
  54.                else cout<<" ";  
  55.          }  
  56.        }  
  57.         cout<
  58.     }  
  59.     return 0;  
  60. }  

点阵LCD中具体的像素点和十六进制数的关系_第1张图片

你可能感兴趣的:(嵌入式)