⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ks0108.lst

📁 通过51解码38khz的红外遥控器信号
💻 LST
📖 第 1 页 / 共 2 页
字号:
 154   1      Write_0108_Reg(Set_Disp_Off);
 155   1      Write_0108_Reg(Set_Start_Line);
 156   1      Write_0108_Reg(Set_Page);
 157   1      Write_0108_Reg(Set_Column);
 158   1      Write_0108_Reg(Set_Disp_On);
 159   1      }
 160          //================================================================
 161          void SetPage(unsigned char Page)                                
 162           { if ( Page>7)Page=0; 
 163   1        Page=Page|Set_Page; 
 164   1        Write_0108_Reg(Page);}
 165          
 166          void SetColumn(unsigned char Column) 
 167           { 
 168   1        if (Column>64)Column=0;
 169   1       Column=Column | Set_Column; 
 170   1       Write_0108_Reg(Column);}
 171          //===============================================================
 172          //  清屏函数
 173          //===============================================================
 174          static void PutData(unsigned char Page,unsigned char Column,unsigned char Page_amount,unsigned char Column
             -_amount)
 175          {
C51 COMPILER V8.08   KS0108                                                                04/20/2007 20:29:50 PAGE 4   

 176   1        unsigned char i,k;
 177   1        for(k=0;k<Page_amount;k++)
 178   1       {SetPage(Page+k);SetColumn(Column);for(i=0;i<Column_amount;i++) Write_0108_Data(0x00);}
 179   1      }
 180          //================================================================
 181          void ClearScr(unsigned char Page,unsigned char Column,unsigned char Page_amount,unsigned char Column_amoun
             -t)
 182          { 
 183   1      unsigned char j;
 184   1       if (Column+Column_amount<65)                                //左半部分                  
 185   1       {CSA=1;CSB=0;PutData(Page,Column,Page_amount,Column_amount);}
 186   1      //--------------------------------------------------------------------------------------
 187   1       if (Column+Column_amount>64&&Column<=64)                   //左右交界处
 188   1       {
 189   2       j=64-Column;
 190   2       CSA=1;CSB=0;PutData(Page,Column,Page_amount,j);
 191   2       CSA=0;CSB=1;PutData(Page,Column,Page_amount,(Column_amount-j));
 192   2      }
 193   1      //--------------------------------------------------------------------------------------
 194   1       if (Column>64)                                              //右半部分
 195   1       {CSA=0;CSB=1;PutData(Page,Column,Page_amount,Column_amount);}
 196   1      }
 197          //================================================================
 198          //             输出一个ASCII字符
 199          //================================================================
 200          static void PutFont(unsigned char ascii_code,unsigned char mode,unsigned char i) 
 201           {if (mode)
 202   1        Write_0108_Data(~asc[(ascii_code-0x20)*6+i]);
 203   1        else
 204   1        Write_0108_Data(asc[(ascii_code-0x20)*6+i]);}
 205          //================================================================
 206          void PutChar(unsigned char Page,unsigned char Column,unsigned char ascii_code,unsigned char mode) 
 207          { 
 208   1        unsigned char i,j;                  //左半部分显示
 209   1        if (Column+7<65)                    //如判断左半部剩余空间在7列范围内则显示
 210   1       {CSA=1;CSB=0;SetColumn(Column);SetPage(Page);
 211   2        for(i=0;i<7;i++)PutFont(ascii_code,mode,i);}
 212   1      //--------------------------------------------------------------------------------------
 213   1       if (Column+7>64&&Column<=64)        //左右交界处显示
 214   1       {j=64-Column;                       //如判断左半部剩余空间不够7列时,先取出左半部剩余列数
 215   2        CSA=1;CSB=0;SetColumn(Column);SetPage(Page);//然后显示字符在左半部分占用的内容
 216   2        for(i=0;i<j;i++)PutFont(ascii_code,mode,i);
 217   2       
 218   2        CSA=0;CSB=1;SetColumn(Set_Column);SetPage(Page);//列指针归零,再显示字符在右半部分剩余的内容
 219   2        for(i=j;i<7;i++)PutFont(ascii_code,mode,i);} //总计在左右交界处合成显示一个字符
 220   1      //--------------------------------------------------------------------------------------
 221   1      if (Column>64)                          //右半部分显示   如判断在右半部分
 222   1       {CSA=0;CSB=1;SetColumn(Column-64);SetPage(Page);//将指定列位置指针调整到右半部允许范围内即<64
 223   2        for(i=0;i<7;i++)PutFont(ascii_code,mode,i);}  //显示
 224   1      }
 225          //--------------------------------------------------------------------------------------
 226          //================================================================
 227          //             输出一个字符串
 228          //================================================================
 229          void DisplayListChar(unsigned char Page,unsigned char Column,unsigned char *listchar,unsigned char mode)
 230          {
 231   1      while (*listchar)                    //字符串如果为空则停止显示
 232   1       {
 233   2        if((128-Column)<6)Page++,Column=0;//一个字符占用6列,如判断剩余空间不够6列时则换行
 234   2        if(Page>8)return;                  
 235   2        PutChar(Page,Column,*(listchar++),mode);
 236   2        Column+=6;  //步进为6是为了节约显示空间
C51 COMPILER V8.08   KS0108                                                                04/20/2007 20:29:50 PAGE 5   

 237   2      }
 238   1      }
 239          //================================================================
 240          //             输出一个位图
 241          //================================================================
 242          static void PutPic(unsigned char width,unsigned char *pic,unsigned char mode,unsigned char i,unsigned char
             - j)
 243          {
 244   1       if (mode)
 245   1       Write_0108_Data(~pic[i+j*width]);    //临时变量j代表位图高度计数i代表位图宽度计数 width代表位图实际宽度
 246   1       else                           //如高2x宽4图共有数据8个 第一个数据地址为pic[0+0x4],第二个数据地址为pic[1
             -+0x4]
 247   1       Write_0108_Data(pic[i+j*width]);     // 倒数第二个数据地址为pic[3+1x4],最后一个数据地址为pic[4+1x4]
 248   1      }
 249          //================================================================
 250          void DisplayPic(unsigned char Page,unsigned char Column,unsigned char high,
 251                           unsigned char width,unsigned char *pic,unsigned char mode)
 252          {
 253   1       unsigned char i,j,k;
 254   1       if(high>8||width>128)return;          //越界退出
 255   1      
 256   1      if (Column+width<65)                   //如在左半部分  则左半部显示                
 257   1       {CSA=1;CSB=0;for(j=0;j<high;j++)
 258   2       {SetPage(Page+j);SetColumn(Column);
 259   3        for(i=0;i<width;i++)PutPic(width,pic,mode,i,j);}}
 260   1      //--------------------------------------------------------------------------------------
 261   1       if (Column+width>64&&Column<=64)          //如在左右交界处并超出左半部分
 262   1       {
 263   2       k=64-Column;                              //先取出左半部剩余显示区域
 264   2       CSA=1;CSB=0;for(j=0;j<high;j++)
 265   2       {SetPage(Page+j);SetColumn(Column);
 266   3        for(i=0;i<k;i++)PutPic(width,pic,mode,i,j);}//以剩余显示区域k为上限显示在左半部内容
 267   2      
 268   2       CSA=0;CSB=1;for(j=0;j<high;j++)            //下来打开右半部
 269   2       {SetPage(Page+j);SetColumn(Set_Column);    //并将列指针归零
 270   3        for(i=k;i<width;i++)PutPic(width,pic,mode,i,j);}//以k为下限显示在右半部内容
 271   2      }
 272   1      //--------------------------------------------------------------------------------------
 273   1       if (Column>64)                                              //如在右半部分
 274   1       {CSA=0;CSB=1;for(j=0;j<high;j++)
 275   2       {SetPage(Page+j);SetColumn(Column-64);               //将指定列位置指针调整到右半部允许范围内即<64
 276   3        for(i=0;i<width;i++)PutPic(width,pic,mode,i,j);}}     //右半部显示
 277   1      }
 278          
 279          
 280          
 281          
 282          
 283          
 284          
 285          
 286          
 287          
 288          
 289          
 290          
 291          
 292          
 293          
 294          
 295          
 296          
C51 COMPILER V8.08   KS0108                                                                04/20/2007 20:29:50 PAGE 6   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1118    ----
   CONSTANT SIZE    =    552    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----      37
   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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -