hy12864.lst

来自「Keil c工程」· LST 代码 · 共 238 行

LST
238
字号
C51 COMPILER V7.10   HY12864                                                               08/29/2005 13:02:21 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE HY12864
OBJECT MODULE PLACED IN .\out\HY12864.obj
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE c\HY12864.C BROWSE INTVECTOR(0XC000) DEBUG OBJECTEXTEND PRINT
                    -(.\lst\HY12864.lst) OBJECT(.\out\HY12864.obj)

line level    source

   1          
   2          //2004/04/11 add draw bmp picture function
   3          
   4          //#define HY_12864B
   5          #ifdef HY_12864B
              
              #include "..\h\globle.h"
              #include "..\h\HY12864B.h"
              //#include <..\a\HY12864B.A51>
              
              extern void RESET(void);
              extern void INITIAL(void);
              extern void CLEARPAGE(byte);
              extern void ROLL(byte);
              extern void CHAR_PR(byte,byte,byte); 
              extern void DrawAByteLeft(byte,byte,byte); 
              extern void DrawAByteRight(byte,byte,byte); 
              
              byte        PROMPT_X;                   //当前光标横坐标
              byte            PROMPT_Y;                       //当前光标纵坐标(0-7)
              byte        V_PROMPT_Y;         //虚拟当前光标纵坐标(0--0xff)
              //word      V_PROMPT_Y;         //虚拟当前光标纵坐标(0--0xffff)
              
              byte    BACKSPACECODE;
              
              byte            CHAR_WIDTH=16;          //输出字符的宽度
              byte            CHAR_HEIGHTH=16;                //输出字符的高度
              
              /*
              void LcdReset(void)
              {
              RESET();
              }
              */
              
              void LcdInit(void)
              {
              INITIAL();
              PROMPT_X=0;
              PROMPT_Y=0;
              V_PROMPT_Y=0;
              }
              
              void LcdClearLine(byte line)
              {
              CLEARPAGE(line);
              }
              
              void LcdClearAll(void)
              {
              byte i;
              for(i=0;i<8;i++)
              CLEARPAGE(i);
              }
C51 COMPILER V7.10   HY12864                                                               08/29/2005 13:02:21 PAGE 2   

              
              void LcdRoll(byte pixels)                                               //每次卷动pixels像素
              {
              
              ROLL(PROMPT_Y*8+pixels);
              }
              
              byte LcdPutOne(byte x,byte y,byte code0)                //输出一个字符,(x,y)为坐标,y是行号
              {
              
              CHAR_PR(x,y,code0);
              
              return(code0);
              }
              
              void NextLine(void)
              {
              byte  i,line;
              line=CHAR_HEIGHTH/8;
              
                              PROMPT_X=0;
                              V_PROMPT_Y+=line;
                              PROMPT_Y+=line;
                              if(PROMPT_Y>=TOTAL_PAGES)  PROMPT_Y-=8;
                              if(V_PROMPT_Y>=TOTAL_PAGES)
                      {
                                      LcdRoll(CHAR_HEIGHTH);                  //如果超出范围则自动卷动屏幕
                                  for(i=0;i<line;i++)
                                      LcdClearLine(PROMPT_Y+i);               //并将不应该出现的行清楚
                              }
              
              }
              
              void BackSpace(void)
              {
              PROMPT_X-=CHAR_WIDTH;
              if(PROMPT_X>=0x80) PROMPT_X=0;          //只能在本行有效
                                              
              LcdPutOne(PROMPT_X,PROMPT_Y,BACKSPACECODE);
              }
              
              /*
              void SuperBackSpace(void)
              {
              byte k;
              
              PROMPT_X-=CHAR_WIDTH;
              if(PROMPT_X>=0x80) 
                      {                       
                  k=V_PROMPT_Y;               //此段代替上一行代码,可以清除上一行显示,不建议使用
                      V_PROMPT_Y-=CHAR_HEIGHTH/8;                             
                      if(k<V_PROMPT_Y) V_PROMPT_Y=k;
                      PROMPT_Y=V_PROMPT_Y%8;
                  }                           
              LcdPutOne(PROMPT_X,PROMPT_Y,BACKSPACECODE);
              }
              */
              
              byte LcdPutChar(byte charcode)
              {
              
              if(charcode==LR ) NextLine();                                           //遇到回车符则换行
C51 COMPILER V7.10   HY12864                                                               08/29/2005 13:02:21 PAGE 3   

              else
                {
                       if(charcode<0x40)              {CHAR_WIDTH=8;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE8_16;} 
                       else if(charcode<0x80) {CHAR_WIDTH=6;CHAR_HEIGHTH=8;BACKSPACECODE=BACKSPACECODE8_8;} //CHAR_WIDTH=8;
                       else if(charcode<0xd0) {CHAR_WIDTH=16;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE16_16;}
                       else if(charcode<0xe0) {CHAR_WIDTH=24;CHAR_HEIGHTH=24;BACKSPACECODE=0xdf;}
                       else if(charcode<0xf0) {CHAR_WIDTH=32;CHAR_HEIGHTH=32;BACKSPACECODE=0xef;}
                       else if(charcode<0xfd) {CHAR_WIDTH=12;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE12_16;}
                   //else 
               
                       if(charcode==BACKSPACE) BackSpace();                           //退一格
                       else
                         {
                                if((PROMPT_X+CHAR_WIDTH)>TOTAL_X_PIXELS) NextLine();  //如果右边超出显示范围则从下一行显示,或卷页 
                                 LcdPutOne(PROMPT_X,PROMPT_Y,charcode);
                              PROMPT_X+=CHAR_WIDTH;
                     }//else BACKSPACE
              
                 }//else  LR
              return(charcode);
              }
              
              void Display(byte *string)                      //从当前坐标处开始输出字符串,具有自动换行、退格功能,能够自动卷动屏幕          
              {
              byte i=0;
              byte charcode;
              
              while((charcode=*(string+i))!=STRING_END) 
                  {
                  LcdPutChar(charcode);
                      i++;
                      
                 }            //while
              
              }
              
              
              void DisplayNumber(word number)         //number为要显示的数字
              {
              byte NumDisplay[5];
              byte i,*string;
              bit rtn=0;
              
                      NumDisplay[0]=number/10000;                     //最高位
                      number-=NumDisplay[0]*10000;
              
                      NumDisplay[1]=number/1000;
                      number-=NumDisplay[1]*1000;
              
                      NumDisplay[2]=number/100;
                      number-=NumDisplay[2]*100;
              
                      NumDisplay[3]=number/10;
                      number-=NumDisplay[3]*10;
              
                      NumDisplay[4]=number;
              
                      string=NumDisplay;
                      
              for(i=0;(i<5)&&(rtn==0);i++)                    //寻找第一个不为0的数字位置//保证至少输出一个数字
                      {
                       if(*(string+i)!=0) rtn=1;
C51 COMPILER V7.10   HY12864                                                               08/29/2005 13:02:21 PAGE 4   

                              
                      }
              
              
              for(i-=1;i<5;i++) LcdPutChar(*(string+i));
              
              }
              
              void DrawAByte(byte line,byte x_pixel,byte DATA)
              {
              if(x_pixel<64)DrawAByteLeft(line,x_pixel,DATA);         //write left half
              else if(x_pixel<128)DrawAByteRight(line,x_pixel-64,DATA);       //write right half
              }
              
              void DrawPicture(byte *bmpPicture)
              //display 128*64 bmp
              //对齐方式:左下
              //纵向取模 高位在下
              //位图大小128*64 
              //点阵由牧马字模输出
              {
              
              byte line,x_pixel;
                      for(line=0;line<8;line++)
                        {
                              for(x_pixel=0;x_pixel<128;x_pixel++) DrawAByte(line,x_pixel,*(bmpPicture+line*128+x_pixel));
                        }
              }
              #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?