请帮我看看我的程序哪里有问题

2019-07-16 03:33发布

想实现让电机加速然后减速,用传感器测转速并用数码管显示的功能,但下到单片机里没反应呀,求帮助呀


#include<reg52.h>
#define  uchar unsigned char
#define  uint  unsigned int
char  gw,sw,bw,qw;  //转速值
uchar j;  //定时次数,每次20ms
uint x;      //数码管显示的数值
uchar z;   //1s内的脉冲数
uchar smg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
数值
char led[4]={0xfe,0xfd,0xfb,0xf7};      //选择数码管

uchar h_h8, h_l8,l_h8,l_l8; //pwm高低电平
int n=1;
uint times=30000;//pwm周期
uchar flag;
sbit  p26=P2^6; //蜂鸣器
sbit p20=P2^0; //led灯
chushi();
biansu();
display();

delays()
{
uchar a;      
                                             
for(a=5000;a>0;a--);
}
  void t1() interrupt 3  //定时器1中断   定时1s
{
TH1=0xb1;  //重装t0
TL1=0xe0;
        j++;
  if(j==50)
    {
   
     j=0;
         x=z;  //读入脉冲数
  z=0;
  display();
     }
}

void t0() interrupt 1   //  定时器1中断 产生pwm
{
if(flag)
   {
TH0=h_h8;
TL0=h_l8;
       P3=0xff;
flag=0;
}
else
  {
TH0=l_h8;
TL0=l_l8;
       P3=0;
flag=1;
}
}

void int0() interrupt  0 //外部中断0  记脉冲数
{
          EX0=0;
     z++;
    EX0=1;

  }
void main ()
{
        chushi();
       gw=sw=bw=qw=0; //数码管初始化
  P0=1;
  P2=1;
   while(1)
   {
    biansu();
  display();

   }
}
chushi()  //初始化
{
TMOD=0x11;    //T0方式1  定时    t1方式1
TH1=0xb1;    //装入初值   20MS
TL1=0xe0;
TH0=(65536-n)>>8;
TL0=(65536-n)&0xff;
        EA=1;   //开总中段
ET0=1;   //开定时器0
ET1=1;
TR0=1;       //启动  t0
TR1=1;
EX0=1;   //开外部中断0
IT0=1;  //下降沿触发
}

display() //数码管显示
{
uchar i;        

     
gw=x%10;          //求速度个位值,
sw=(x/10)%10;     //求速度十位值,
bw=(x/100)%10;   //求速度百位值,
qw=x/1000;        //求速度千位值,
for(i=0;i<4;i++)      

                                                  
{
  P2=led[i];
  if(i==0)                  //显示个位
   {
      P1=smg[gw];
      delays();
    }
  else if(i==1)     //显示十位
     {
              P1=smg[sw];
        delays();
       }
  else if(i==2)  //显示百位
    {
        P1=smg[bw];
              delays();
    }

}
}

biansu()
{
          char delta;
    n+=delta;
if(n>=times-1)
   {
  delta=-1;
          p26=0;
   p20=0;
    }
       if(n<=1)
   {
    n=1;
    delta=0;

           }
h_h8=(65536-n)>>8;
h_l8=(65536-n)&0xff;
l_h8=(65536-times+n)>>8;
l_l8=(65536-times+n)&0xff;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lstcspring
1楼-- · 2019-07-16 03:33
先一步一步的高,先把显示调好,再加速度检测,现加控制
暮鼓
2楼-- · 2019-07-16 04:36
 精彩回答 2  元偷偷看……

一周热门 更多>