微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有关超声波测距的问题?

有关超声波测距的问题?

时间:10-02 整理:3721RD 点击:

KEIIL  提示这个错误:                              CX.C(18): error C216: subscript on non-array or too many dimensions
哪位大神教教我怎么修改程序,错在哪


#include <AT89x51.H>  //器件配置文件   
#include <intrins.h>     
#define  RX  P0_1   
#define  TX  P0_2   
sbit     beep=P3^7;   
unsigned int  time=0;   
unsigned int  timer=0;   
unsigned char posit=0;
unsigned char disbuff;   
unsigned long S=0;   
bit      flag =0;   
unsigned char const discode[17] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x80,0x7c,0x39,0x5e,0x79,0x71};   
unsigned char const positon[4]={ 0x20,0x10,0x08,0x40};   
void Display(void)     //扫描数码管  
{   
        if(posit==0)   
         {
        P1=(discode[disbuff[posit]]);
        }  
        else      
        {
        P1=discode[disbuff[posit]];
        }
        P2=positon[posit];        
        if( ++posit>=4)
        {      
        posit=0;   
         }  
         }   
        
         void Conut(void)
         {time=TH0*256+TL0;  
          TH0=0;  
          TL0=0;
          S=(time*1.7)/100;     //算出来是CM  
          if(S<10|S>200)     //判断蜂鸣器响的数值范围  
          beep=1;
          else beep=0;
          if((S>=700)||flag==1) //超出测量范围显示“-”
          {   
          flag=0;
          disbuff[0]=10;    //“-”   
          disbuff[3]=11;
          disbuff[1]=10;    //“-”   
          disbuff[2]=10;    //“-”   
          }
          else  
          {     
          disbuff[0]=S%1000/100;      
          disbuff[3]=11;     
          disbuff[1]=S%1000%100/10;   
          disbuff[2]=S%1000%10 %10;   
          }  
          }  
                                                  /********************************************************/      
          void zd0() interrupt 1    //T0中断用来计数器溢出,超过测距范围   
          {      
          flag=1;        //中断溢出标志   
          }                                          /****************************/     
          void  zd3()  interrupt 3    //T1中断用来扫描数码管和计800MS启动模块   
          {   
          TH1=0xf8;   TL1=0x30;   
          Display();   
          timer++;   
         
          if(timer>=400)   
          {     
          timer=0; TX=1;                   //  启动一次模块   
          _nop_();     
          _nop_();     
          _nop_();   
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();  
       _nop_();     
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();     
           _nop_();   
            _nop_();     
                _nop_();     
                _nop_();     
                _nop_();   
                TX=0;   
                }   
                }  /*********************************************************/   
                void  main(  void  )     
                {        
                TMOD=0x11;     //设T0为方式1,GATE=1;  
                TH0=0;
                TL0=0;  
                TL1 = 0x66;  //设置定时初值  
                TH1 = 0xFC; //1ms          //
                                        //        TH1=0xf8;     //2MS定时 //
                                        //        TL1=0x30;   
                ET0=1;             //允许T0中断  
                ET1=1;      //允许T1中断  
                TR1=1;      //开启定时器  
                EA=1;      //开启总中断   
                while(1)  
                {   
                while(!RX);  //当RX为零时等待   
                TR0=1;       //开启计数   
                while(RX);   //当RX为1计数并等待   
                TR0=0;    //关闭计数      
                Conut();   //计算  
                }   
                }

HC-SR04的,百度看懂了。不知道怎么下手改

这里出了问题 P1=(discode[disbuff[posit]]);    你没有定义 disbuff[] 这个数组

加油,好好干,慢慢做会做出来的

看看,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top