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

📄 测距程序.lst

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

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

 304   1        }
 305          /********************************************************/
 306             void  StartModule()                   //T1中断用来扫描数码管和计800MS启动模块
 307            {
 308   1                TX=1;                                  //800MS  启动一次模块
 309   1                _nop_(); 
 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                TX=0;
 331   1        }
 332          /********************************************************/
 333          void main(void)
 334          {  
 335   1          TMOD=0x01;             //设T0为方式1,GATE=1
 336   1              TH0=0;
 337   1              TL0=0; 
 338   1              TR0=1; 
 339   1      
 340   1              Lcd_init();       //设置液晶显示器
 341   1              Clr_Scr();        //清屏        
 342   1              Disp_img(logo);   //显示欢迎使用本产品LOGO
 343   1              Delaynms(1000);
 344   1              Lcd_init();       //从图形显示状态下返回
 345   1          Lcd_Mark2();
 346   1      
 347   1      
 348   1              while(1)
 349   1              {
 350   2               StartModule();  
 351   2                                              //计算
 352   2               while(!RX);            //当RX为零时等待
 353   2               TR0=1;                     //开启计数
 354   2               while(RX);                     //当RX为1计数并等待
 355   2               TR0=0;                         //关闭计数
 356   2               Conut();
 357   2               delayms(80);           //80MS
 358   2      
 359   2              }
 360   1      
 361   1      }              


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    872    ----
C51 COMPILER V8.08   瞋距程序                                                              05/01/2010 20:54:00 PAGE 7   

   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 + -