超声波.lst

来自「超声波的发射和接收」· LST 代码 · 共 338 行 · 第 1/2 页

LST
338
字号
 149          void LCD_Init(void) 
 150          { uchar i=250;           //延时
 151   1      while(i--);
 152   1      Select_Screen(0);
 153   1      Set_OnOff(0);            //关显示
 154   1      LCD_Clr(0);              //清屏
 155   1      Select_Screen(0);
 156   1      Set_OnOff(1);            //开显示
 157   1      Select_Screen(0);
 158   1      Set_StartLine(0);        //开始行:0
 159   1      }
 160          
 161          // 在指定位置显示字符:x=0-120(字母、数字)/0-112(汉字),y=0-6                         
 162          void Out_Char(uchar x, uchar y, bit mode, char *fmt)    //mode: 1 正常显示,0 反白显示
 163          {
 164   1          int c1,c2,cData;
 165   1              uchar i=0,j,uLen;
 166   1              uchar k;
 167   1              
 168   1          uLen=strlen(fmt);
 169   1      
 170   1              while(i<uLen)
 171   1              {
C51 COMPILER V7.06   __声瞋                                                                12/20/2007 18:29:07 PAGE 4   

 172   2                      c1 = fmt[i];
 173   2                      c2 = fmt[i+1];
 174   2      
 175   2                      if(c1>=0 && c1<128  )// ASCII
 176   2                      {                
 177   3                        if(c1 < 0x20)
 178   3                          {
 179   4                              switch(c1)
 180   4                              {
 181   5                                  case 13:
 182   5                                  case 10: // 回车或换行
 183   5                                      i++;
 184   5                                                      //if(y < (LCD_Y_MAX - (2 * HZ_CHR_HEIGHT)))
 185   5                              if (y<7)
 186   5                                 {x=0;  y+=2;}
 187   5                                      continue;
 188   5                                  case 8: // 退格
 189   5                                                      i++;
 190   5                                      if(y>ASC_CHR_WIDTH) y-=ASC_CHR_WIDTH;
 191   5                                      cData = 0x00; 
 192   5                                      break;
 193   5                              }
 194   4                          }
 195   3      
 196   3                 for(j=0;j<sizeof(ASC_16)/sizeof(ASC_16[0]);j++)                           //sizeof(ASC_16[0]
 197   3                          {
 198   4                              if(fmt[i] == ASC_16[j].Index_Char[0])
 199   4                              break;
 200   4                          }
 201   3      
 202   3                          for(k=0;k<2*ASC_CHR_WIDTH;k++)
 203   3                          {
 204   4                            if(j < sizeof(ASC_16)/sizeof(ASC_16[0]))
 205   4                       {
 206   5                        if (mode == 1)                  
 207   5                           cData=ASC_16[j].Msk_Char[k];  //正常
 208   5                        else
 209   5                           cData=~ASC_16[j].Msk_Char[k];  //反白
 210   5                       }
 211   4                    else         
 212   4                        cData=0;
 213   4      
 214   4                    if (k<ASC_CHR_WIDTH)    //字符上半部
 215   4                       { if ((x+k)<64)
 216   5                            { Select_Screen(1);  //选择左半屏
 217   6                              Set_Column(x+k);
 218   6                            }
 219   5                         else
 220   5                            { Select_Screen(2);  //选择右半屏
 221   6                              Set_Column(x+k-64);
 222   6                            }
 223   5                         Set_Line(y);
 224   5                       }
 225   4                    else        //字符下半部
 226   4                       { if ((x+k-ASC_CHR_WIDTH)<64)
 227   5                            { Select_Screen(1);  //选择左半屏
 228   6                              Set_Column(x+k-8);
 229   6                            }
 230   5                         else
 231   5                            { Select_Screen(2);  //选择右半屏
 232   6                              Set_Column((x+k-8)-64);
 233   6                            }
C51 COMPILER V7.06   __声瞋                                                                12/20/2007 18:29:07 PAGE 5   

 234   5                         Set_Line(y+1);
 235   5                               }
 236   4      
 237   4                    Write_Dat(cData);
 238   4                          }
 239   3      
 240   3                          if(c1 != 8) // 非退格
 241   3                          x+=ASC_CHR_WIDTH;
 242   3                      }
 243   2      
 244   2              else    //汉字
 245   2                      { 
 246   3                          for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)                            //sizeof(GB_1
             -6[0]
 247   3                          {
 248   4                              if(fmt[i] == GB_16[j].Index_GB16[0] && fmt[i+1] == GB_16[j].Index_GB16[1])
 249   4                              break;
 250   4                          }
 251   3                          for(k=0;k<2*HZ_CHR_WIDTH;k++)
 252   3                          {
 253   4                            if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 254   4                       {
 255   5                        if (mode == 1)                  
 256   5                           cData=GB_16[j].Msk_GB16[k];
 257   5                        else
 258   5                           cData=~GB_16[j].Msk_GB16[k];
 259   5                       }
 260   4                    else         
 261   4                        cData=0;
 262   4      
 263   4                    if (k<HZ_CHR_WIDTH)    //汉字上半部
 264   4                       { if ((x+k)<64)
 265   5                            { Select_Screen(1);  //选择左半屏
 266   6                              Set_Column(x+k);
 267   6                            }
 268   5                         else
 269   5                            { Select_Screen(2);  //选择右半屏
 270   6                              Set_Column(x+k-64);
 271   6                            }
 272   5                         Set_Line(y);
 273   5                       }
 274   4                    else        //汉字下半部
 275   4                       { if ((x+k-HZ_CHR_WIDTH)<64)
 276   5                            { Select_Screen(1);  //选择左半屏
 277   6                              Set_Column(x+k-HZ_CHR_WIDTH);
 278   6                            }
 279   5                         else
 280   5                            { Select_Screen(2);  //选择右半屏
 281   6                              Set_Column((x+k-HZ_CHR_WIDTH)-64);
 282   6                            }
 283   5                         Set_Line(y+1);
 284   5                               }
 285   4      
 286   4                    Write_Dat(cData);
 287   4                                                      
 288   4                          }
 289   3                          x+=HZ_CHR_WIDTH;
 290   3                          i++;
 291   3                      }  
 292   2      
 293   2                      i++;
 294   2              }
C51 COMPILER V7.06   __声瞋                                                                12/20/2007 18:29:07 PAGE 6   

 295   1      }


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


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

⌨️ 快捷键说明

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