无法编译通过

2019-07-16 05:11发布

我自己编程的程序在法编译通过,我反复查找,找不到原因,请帮忙检查一下到底在那个地方有错误,是什么原因?麻烦你告诉我出错误的地方,是什么原因发生这样的错误。
   下面是我编程的程序:
//频率程序//
#include<intrins.h>
#include <reg52.h>
#define  SEG   P2                           //7段数码管接P2
#define  SCANP P1                            //数码管扫描线接P1
sbit    PB0=P3^2;                                 //PBO安纽接P3.2
char    TAB[3]={0xc0,0xf9,0xa4};
char  disp[4]={0xc0,0xc0,0xc0,0xc0};           //显示区数组初始显示0000;
//=======声明T0定时函数=====
#define  count_M1  5000                                //(T0(MODE1)的计数值0.05S
#define  H_0 (65636-count_M1)/256                                      //(T0(MODE1)的计算高8位
#define  L_0 (65636-count_M1)%256                                    //(T0(MODE1)的计算低8位
char     times=0;                                      // 计算中断次数
//=====声明基本变量=======
bit     status_F=1;                                   //状态标志位
char    scan=1;                                       // 扫描信号
unsigned  int fred=0;                                  // 频率变量
void    delay1m(int);                                // 声明延迟函数
void   measure(void);                                  // 声明测量函数
void   display(void);                                 // 声明显示函数
sfr16  DPTR=0x82;                                      //声明DPTR
//=========主程序============
  main()                                    //主程序开始
   {     while(1)                             //无穷循环,程序一直运行
     {if(PB0==0)                                //如果安下PB0
         {  status_F=0;                            //则进入测量阶段
          measure();                               //调测量函数
           while(status_F=0);                       //等待0;测量完毕
         }
         else display();                            // 显示阶段
      }                                             // while 循环结束
    }                                               //主程序结束
//=======  测量函数========
   void measure()                                //测量函数开始
     { SCANP=0xff;                               //关闭显示器
         IE=0X8a;                                   //启用T0,T1中断
         TMOD=0X51;                                 //T1为计算器, T0定时器
         TH0=H_0;                                   //设置T0高位
         TL0=L_0;                                   //设置T0低位
         TH1=0;                                     //TH1归0
         TL1=0;                                     //TL1归0
         TR0=1;                                     //启动TR0
         TR1=1;                                     //启动TR1
      {                                            //测量函数结束
//==========T0_1S=============                     //T0_1S中断开始
    void To_1s()interrupt 1
      { TH0=H_0;                                     //设置T0计算器的高位
        TL0=L_0;                                     //设置T0计算器的低位
        if(++times==20)                             //如果达到1S
       {   times=0;                                  //重新计次
           status_F=1;                                //完成测量
           TR0=0;                                   //关闭TR0
           TR1=0;                                   //关闭TR1
           DPL=TL1;                                 //计算量的低8位
           DPH=TH1;                                     //计算量的高8位
            fred=DPTR;
            if(fred>=10000)                        //超过10KZ
           {  disp[3]=TAB[10];                      //负号填入千位数显示区
              disp[2]=TAB[10];                      //负号填入百位数显示区
              disp[1]=TAB[fred/10000];              //填入十位数显示区
              disp[0]=TAB[(fred/100)%10];  }          //填入个位数显示区                                    
          else                                    //低于10KZ
           {
              disp[3]=TAB[(fred/1000)%10];               //填入千位数显示区
              disp[2]=TAB[(fred/100)%10];               //填入百位数显示区
              disp[1]=TAB[(fred/10)%10];              //填入十位数显示区
              disp[0]=TAB[fred%10];}              //填入个位数显示区
        }                                           //结束if判断(达到1S)
     }                                              //T0_1S中断程序结束

    //===============显示程序=============
    void  display(void)                                //显示程序开始
      {    char i;                                //声明变量
           while(PB0==1)                          //如果按下PB0
          {  scan=0x01;                            //初始扫描信号
             for(i=0;i<4;i++)                     //扫描4次
             {  SEG=0xff;                      //关闭7段LED数码管
                 SCANP=~scan;                     //输出扫描信号
                SEG=disp[i];                    //输出显示信号
                  delay1m(4);                       //延迟4hm
                 scan<<=1;                         //下一个扫描信号
                          }                     //for结束扫描4次
                    }                          //结束while按下PB0
               }                               //显示函数结束
      //======延迟扫描===============
         void delay1m(int x)                     //延迟函数开始
        {      int i,j;                            //声明变量
               for(i=0;i<x;i++)                    //数X次,约Xms
                    for(j=0;j<120;j++);           //数120次结束;约1ms
       }                                        //延迟函数结束











友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
Lovedanpianji
1楼-- · 2019-07-16 07:05
char    TAB[3]={0xc0,0xf9,0xa4};
char  disp[4]={0xc0,0xc0,0xc0,0xc0};
char的范围是-128~127,数组里明显有好多数超过了char的范围,换成unsigned char
另外SCANP是什么?没定义
lovezjf234
2楼-- · 2019-07-16 07:12
同意楼上,同时在把错误调试信息也发上来,不要让别人给你猜谜语!很难的!

一周热门 更多>