找回密码
 注册
搜索
查看: 1091|回复: 2

[讨论] 一个程序,两个问题,请高手指点!

[复制链接]
发表于 2012-7-12 00:06:34 | 显示全部楼层 |阅读模式
void main()
{
unsigned char code Name[]={53,78,73,86,73,0};
                                                // Univi

unsigned char code Tel[]={13,21,24,22,21,24,22,0};
                                                // 586586

while(1)

        {

              Show_String(1,&Name,0x13,0x14);

                Show_String(1,&Tel,0x0B,0x24);

                Delay(1);

                Fill_RAM(0x00);                        // Clear Screen

        }

}


void Show_String(unsigned char a, unsigned char *Data_Pointer, unsigned char b, unsigned char c)

{

unsigned char *Src_Pointer;

        Src_Pointer=Data_Pointer;

        Show_Font57(1,96,b,c);                        // No-Break Space

                                                //   Must be written first before the string start...

        while(1)

        {

                Show_Font57(a,*Src_Pointer,b,c);

                Src_Pointer++;

                b+=3;

                if(*Src_Pointer == 0) break;

        }

}



void Show_Font57(unsigned char a, unsigned char b, unsigned char c, unsigned char d)

{

unsigned char *Src_Pointer;

unsigned char i,Font,MSB,LSB;

        switch(a)

        {

                case 1:

                        Src_Pointer=&Ascii_1[(b-1)];//为什么b要减1

                        break;

                case 2:

                        Src_Pointer=&Ascii_2[(b-1)];

                        break;

        }

        Set_Remap_Format(0x54);

        Src_Pointer--; // 为什么这里又要--

        for(i=0;i<=4;i+=2)

        {

                LSB=*Src_Pointer;

                Src_Pointer++;

                if(i == 4)

                {

                        MSB=0x00;

                }

                else

                {

                        MSB=*Src_Pointer;

                        Src_Pointer++;

                }

                Set_Column_Address(c,c);

                Set_Row_Address(d,d+7);

                Font=((MSB&0x01)<<4)|(LSB&0x01);

                Font=Font|(Font<<1)|(Font<<2)|(Font<<3);

                Write_Data(Font);

                Font=((MSB&0x02)<<3)|((LSB&0x02)>>1);

                Font=Font|(Font<<1)|(Font<<2)|(Font<<3);

                Write_Data(Font);

                Font=((MSB&0x04)<<2)|((LSB&0x04)>>2);

                Font=Font|(Font<<1)|(Font<<2)|(Font<<3);

                Write_Data(Font);

                Font=((MSB&0x08)<<1)|((LSB&0x08)>>3);

                Font=Font|(Font<<1)|(Font<<2)|(Font<<3);

                Write_Data(Font);

                Font=((MSB&0x10)<<3)|((LSB&0x10)>>1);

                Font=Font|(Font>>1)|(Font>>2)|(Font>>3);

                Write_Data(Font);

                Font=((MSB&0x20)<<2)|((LSB&0x20)>>2);

                Font=Font|(Font>>1)|(Font>>2)|(Font>>3);

                Write_Data(Font);

                Font=((MSB&0x40)<<1)|((LSB&0x40)>>3);

                Font=Font|(Font>>1)|(Font>>2)|(Font>>3);

                Write_Data(Font);

                Font=(MSB&0x80)|((LSB&0x80)>>4);

                Font=Font|(Font>>1)|(Font>>2)|(Font>>3);

                Write_Data(Font);

                c++;

        }

        Set_Remap_Format(0x50);

}


unsigned char code Ascii_1[241][5]={                // Refer to "Times New Roman" Font Database...

                                                //   Basic Characters

        {0x00,0x00,0x00,0x00,0x00},                //

        {0x00,0x00,0x4F,0x00,0x00},                //   (  1)  ! - 0x0021 Exclamation Mark

        {0x00,0x07,0x00,0x07,0x00},                //   (  2)  " - 0x0022 Quotation Mark

        {0x14,0x7F,0x14,0x7F,0x14},                //   (  3)  # - 0x0023 Number Sign

        {0x24,0x2A,0x7F,0x2A,0x12},                //   (  4)  $ - 0x0024 Dollar Sign

        {0x23,0x13,0x08,0x64,0x62},                //   (  5)  % - 0x0025 Percent Sign

        {0x36,0x49,0x55,0x22,0x50},                //   (  6)  & - 0x0026 Ampersand

        {0x00,0x05,0x03,0x00,0x00},                //   (  7)  ' - 0x0027 Apostrophe

        {0x00,0x1C,0x22,0x41,0x00},                //   (  8)  ( - 0x0028 Left Parenthesis

        {0x00,0x41,0x22,0x1C,0x00},                //   (  9)  ) - 0x0029 Right Parenthesis

        {0x14,0x08,0x3E,0x08,0x14},                //   ( 10)  * - 0x002A Asterisk

        {0x08,0x08,0x3E,0x08,0x08},                //   ( 11)  + - 0x002B Plus Sign

        {0x00,0x50,0x30,0x00,0x00},                //   ( 12)  , - 0x002C Comma

        {0x08,0x08,0x08,0x08,0x08},                //   ( 13)  - - 0x002D Hyphen-Minus

        {0x00,0x60,0x60,0x00,0x00},                //   ( 14)  . - 0x002E Full Stop

        {0x20,0x10,0x08,0x04,0x02},                //   ( 15)  / - 0x002F Solidus

        {0x3E,0x51,0x49,0x45,0x3E},                //   ( 16)  0 - 0x0030 Digit Zero

        {0x00,0x42,0x7F,0x40,0x00},                //   ( 17)  1 - 0x0031 Digit One

        {0x42,0x61,0x51,0x49,0x46},                //   ( 18)  2 - 0x0032 Digit Two

        {0x21,0x41,0x45,0x4B,0x31},                //   ( 19)  3 - 0x0033 Digit Three

        {0x18,0x14,0x12,0x7F,0x10},                //   ( 20)  4 - 0x0034 Digit Four

        {0x27,0x45,0x45,0x45,0x39},                //   ( 21)  5 - 0x0035 Digit Five

        {0x3C,0x4A,0x49,0x49,0x30},                //   ( 22)  6 - 0x0036 Digit Six

        {0x01,0x71,0x09,0x05,0x03},                //   ( 23)  7 - 0x0037 Digit Seven

        {0x36,0x49,0x49,0x49,0x36},                //   ( 24)  8 - 0x0038 Digit Eight

        {0x06,0x49,0x49,0x29,0x1E},                //   ( 25)  9 - 0x0039 Dight Nine

        {0x00,0x36,0x36,0x00,0x00},                //   ( 26)  : - 0x003A Colon

        {0x00,0x56,0x36,0x00,0x00},                //   ( 27)  ; - 0x003B Semicolon

        {0x08,0x14,0x22,0x41,0x00},                //   ( 28)  < - 0x003C Less-Than Sign

        {0x14,0x14,0x14,0x14,0x14},                //   ( 29)  = - 0x003D Equals Sign

        {0x00,0x41,0x22,0x14,0x08},                //   ( 30)  > - 0x003E Greater-Than Sign

        {0x02,0x01,0x51,0x09,0x06},                //   ( 31)  ? - 0x003F Question Mark

        {0x32,0x49,0x79,0x41,0x3E},                //   ( 32)  @ - 0x0040 Commercial At

        {0x7E,0x11,0x11,0x11,0x7E},                //   ( 33)  A - 0x0041 Latin Capital Letter A

        {0x7F,0x49,0x49,0x49,0x36},                //   ( 34)  B - 0x0042 Latin Capital Letter B

        {0x3E,0x41,0x41,0x41,0x22},                //   ( 35)  C - 0x0043 Latin Capital Letter C

        {0x7F,0x41,0x41,0x22,0x1C},                //   ( 36)  D - 0x0044 Latin Capital Letter D

        {0x7F,0x49,0x49,0x49,0x41},                //   ( 37)  E - 0x0045 Latin Capital Letter E

        {0x7F,0x09,0x09,0x09,0x01},                //   ( 38)  F - 0x0046 Latin Capital Letter F

        {0x3E,0x41,0x49,0x49,0x7A},                //   ( 39)  G - 0x0047 Latin Capital Letter G

        {0x7F,0x08,0x08,0x08,0x7F},                //   ( 40)  H - 0x0048 Latin Capital Letter H

        {0x00,0x41,0x7F,0x41,0x00},                //   ( 41)  I - 0x0049 Latin Capital Letter I

        {0x20,0x40,0x41,0x3F,0x01},                //   ( 42)  J - 0x004A Latin Capital Letter J

        {0x7F,0x08,0x14,0x22,0x41},                //   ( 43)  K - 0x004B Latin Capital Letter K

        {0x7F,0x40,0x40,0x40,0x40},                //   ( 44)  L - 0x004C Latin Capital Letter L

        {0x7F,0x02,0x0C,0x02,0x7F},                //   ( 45)  M - 0x004D Latin Capital Letter M

        {0x7F,0x04,0x08,0x10,0x7F},                //   ( 46)  N - 0x004E Latin Capital Letter N

        {0x3E,0x41,0x41,0x41,0x3E},                //   ( 47)  O - 0x004F Latin Capital Letter O

        {0x7F,0x09,0x09,0x09,0x06},                //   ( 48)  P - 0x0050 Latin Capital Letter P

        {0x3E,0x41,0x51,0x21,0x5E},                //   ( 49)  Q - 0x0051 Latin Capital Letter Q

        {0x7F,0x09,0x19,0x29,0x46},                //   ( 50)  R - 0x0052 Latin Capital Letter R

        {0x46,0x49,0x49,0x49,0x31},                //   ( 51)  S - 0x0053 Latin Capital Letter S

        {0x01,0x01,0x7F,0x01,0x01},                //   ( 52)  T - 0x0054 Latin Capital Letter T

        {0x3F,0x40,0x40,0x40,0x3F},                //   ( 53)  U - 0x0055 Latin Capital Letter U

        {0x1F,0x20,0x40,0x20,0x1F},                //   ( 54)  V - 0x0056 Latin Capital Letter V

1.谁能帮我解释为什么Src_Pointer=&Ascii_1[(b-1)];这里b要见减1??
2.Src_Pointer--; // 为什么这里又要--
请高手指点??百思不得其解。。
使用环境为OLED点阵字符显示。
 楼主| 发表于 2012-7-16 20:52:31 | 显示全部楼层
[em09][em03][em13]gsdfgdfgdfhfgdfgagret
点评回复

使用道具 举报

 楼主| 发表于 2012-7-14 23:27:15 | 显示全部楼层
请高手指点!very thanks!!
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-4 11:48 , Processed in 0.048516 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表