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

📄 测距程序.lst

📁 避障模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
 185   1              Write_char(0,0x36); //图形方式
 186   1              for(i=0;i<32;i++)
 187   1              { 
 188   2                      Write_char(0,0x80+i);
 189   2                      Write_char(0,0x80);
 190   2              for(j=0;j<16;j++) 
 191   2                      {
 192   3                              Write_char(1,img[k++]);
 193   3                      }
 194   2              }
 195   1      
 196   1              for(i=0;i<32;i++)
 197   1              { 
 198   2                      Write_char(0,0x80+i);
 199   2                      Write_char(0,0x88);
 200   2              for(j=0;j<16;j++) 
 201   2                      {
 202   3                              Write_char(1,img[k++]);
 203   3                      }
 204   2              }
 205   1      }
 206                  
 207          /******************************************************************************/
 208          void Clr_Scr(void)//清屏函数
 209          {
 210   1              Write_char(0,0x01);
 211   1      }
 212          
 213          /******************************************************************************/
 214          void LCD_set_xy( unsigned char x, unsigned char y )
 215          {       //设置LCD显示的起始位置,X为行,Y为列
 216   1          unsigned char address;
 217   1              switch(x)
 218   1              {
 219   2                      case 0: address = 0x80 + y; break;    
 220   2              case 1: address = 0x80 + y; break; 
 221   2                      case 2: address = 0x90 + y; break; 
 222   2                      case 3: address = 0x88 + y; break;
 223   2                      case 4: address = 0x98 + y; break; 
 224   2                      default:address = 0x80 + y; break;
 225   2              }
 226   1          Write_char(0, address);
 227   1      }
 228          
 229          /******************************************************************************/
 230          void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
 231          {       //      中英文字符串显示函数
 232   1              LCD_set_xy( X, Y );
 233   1          
 234   1          while (*s) 
 235   1          {
 236   2                      Write_char( 1, *s );
 237   2                  s ++;
 238   2                      Delaynms(1);
 239   2              }
 240   1      }
 241          
C51 COMPILER V8.02   测__程序                                                              10/23/2009 21:37:13 PAGE 5   

 242          /******************************************************************************/
 243          void LCD_Write_number(unsigned char s)//        数字显示函数
 244          {       
 245   1              Write_char(1,num[s]);
 246   1              Delaynms(1);
 247   1      }
 248          /******************************************************************************/
 249          void Lcd_Mark2(void)
 250          {
 251   1              Clr_Scr();//清屏
 252   1              LCD_Write_string(1,0,znwk);//
 253   1              LCD_Write_string(2,0,waves);//  
 254   1              LCD_Write_string(3,7,CM);//     
 255   1      }
 256          
 257          /********************************************************/
 258              void Conut(void)
 259                  {
 260   1                 time=TH0*256+TL0;
 261   1                 TH0=0;
 262   1                 TL0=0;
 263   1                 S=time*1.87/100;       //算出来是CM    11。0592M晶振
 264   1                 if(flag==1)                //超出测量
 265   1                {      
 266   2                 flag=0;
 267   2                 LCD_set_xy( 3, 4 );
 268   2                 LCD_Write_number(13);
 269   2                 LCD_Write_number(12);
 270   2                 LCD_set_xy( 3, 5 );
 271   2                 LCD_Write_number(13);
 272   2                 LCD_Write_number(13);
 273   2                
 274   2                 }
 275   1               else
 276   1                {
 277   2                 disbuff[1]=S%1000/100;
 278   2                 disbuff[2]=S%1000%100/10;
 279   2                 disbuff[3]=S%1000%10 %10;
 280   2                 LCD_set_xy( 3, 4 );
 281   2                 LCD_Write_number(disbuff[1]);
 282   2                 LCD_Write_number(12);
 283   2                 LCD_set_xy( 3, 5 );
 284   2                 LCD_Write_number(disbuff[2]);
 285   2                 LCD_Write_number(disbuff[3]);
 286   2                }
 287   1              }
 288          /********************************************************/ 
 289          void delayms(unsigned int ms)
 290          {
 291   1              unsigned char i=100,j;
 292   1              for(;ms;ms--)
 293   1              {
 294   2                      while(--i)
 295   2                      {
 296   3                              j=10;
 297   3                              while(--j);
 298   3                      }
 299   2              }
 300   1      }
 301          /********************************************************/
 302               void zd0() interrupt 1              //T0中断用来计数器溢出,超过测距范围
 303            {
C51 COMPILER V8.02   测__程序                                                              10/23/2009 21:37:13 PAGE 6   

 304   1          flag=1;                                                      //中断溢出标志
 305   1        }
 306          /********************************************************/
 307             void  StartModule()                   //T1中断用来扫描数码管和计800MS启动模块
 308            {
 309   1                TX=1;                                  //800MS  启动一次模块
 310   1                _nop_(); 
 311   1                _nop_(); 
 312   1                _nop_(); 
 313   1                _nop_(); 
 314   1                _nop_(); 
 315   1                _nop_(); 
 316   1                _nop_(); 
 317   1                _nop_(); 
 318   1                _nop_(); 
 319   1                _nop_(); 
 320   1                _nop_(); 
 321   1                _nop_(); 
 322   1                _nop_(); 
 323   1                _nop_(); 
 324   1                _nop_(); 
 325   1                _nop_(); 
 326   1                _nop_();
 327   1                _nop_(); 
 328   1                _nop_(); 
 329   1                _nop_(); 
 330   1                _nop_();
 331   1                TX=0;
 332   1        }
 333          /********************************************************/
 334          void main(void)
 335          {  
 336   1          TMOD=0x01;             //设T0为方式1,GATE=1
 337   1              TH0=0;
 338   1              TL0=0; 
 339   1              TR0=1; 
 340   1      
 341   1              Lcd_init();       //设置液晶显示器
 342   1              Clr_Scr();        //清屏        
 343   1              Disp_img(logo);   //显示欢迎使用本产品LOGO
 344   1              Delaynms(1000);
 345   1              Lcd_init();       //从图形显示状态下返回
 346   1          Lcd_Mark2();
 347   1      
 348   1      
 349   1              while(1)
 350   1              {
 351   2               StartModule();  
 352   2                                              //计算
 353   2               while(!RX);            //当RX为零时等待
 354   2               TR0=1;                     //开启计数
 355   2               while(RX);                     //当RX为1计数并等待
 356   2               TR0=0;                         //关闭计数
 357   2               Conut();
 358   2               delayms(80);           //80MS
 359   2      
 360   2              }
 361   1      
 362   1      }              


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.02   测__程序                                                              10/23/2009 21:37:13 PAGE 7   

   CODE SIZE        =    872    ----
   CONSTANT SIZE    =   1071    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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