找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1585|回复: 0
打印 上一主题 下一主题
收起左侧

为什么示数不动啊

[复制链接]
跳转到指定楼层
楼主
ID:116352 发表于 2016-5-1 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大神请指教   本程序测得是增量式编码器位置  说白了就是计数A B脉冲  但是烧进去之后示数一直是0  转动编码器不会有反应  前后改了几次实在是改不出来了  求大神支招


#include <REG51.H>
#include <intrins.h>

#define  uchar unsigned char

#define GPIO_DIG P0

sbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;
sbit PINA = P1^0;          //A相
sbit PINB = P1^1;          //B相
sbit PIND  = P1^2;
static unsigned int  counter = 0;          //编码器脉冲计数
int xx[3]={0,0,0};
unsigned char code DIG_CODE[17]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};


/************************************
void Timer0Init(void)
{
        TMOD &= 0xF0;        //设置定时器模式
        TMOD |= 0x01;        //设置定时器模式
        TL0 = 0x30;                //设置定时初值
        TH0 = 0xF8;                //设置定时初值
        PT0 = 0;
        TF0 = 0;                //清除TF0标志
        ET0 = 1;
        TR0 = 1;                //定时器0开始计时
        PT0 = 1;                //数码管刷新优先
        EA = 1;
}


*****利用STC89系列的外中断模式*******

void Inti_INT0()
{
                            //set INT1 int type (1:Falling only 0:Low level)
                          //enable INT1 interrupt
     EA = 1;  
}
************************************/
void main (void)
{
       
        TMOD &= 0xF0;        //设置定时器模式
        TMOD |= 0x01;        //设置定时器模式
        TL0 = 0x30;                //设置定时初值
        TH0 = 0xF8;                //设置定时初值
        PT0 = 0;
        TF0 = 0;                //清除TF0标志
        ET0 = 1;
        TR0 = 1;                //定时器0开始计时
        PT0 = 1;                //数码管刷新优先
        EA = 1;

       
  while(1)
  {       

  }
}

void Timer0() interrupt 1
{
static        unsigned char i;
        unsigned int j;
        unsigned char check[8];
        check[0]=counter/100;
        check[1]=counter%100/10;
        check[2]=counter%100%10;
        check[3]=0;
        check[4]=0;
        check[5]=0;
        check[6]=0;
        check[7]=0;
        TL0 = 0x30;                //设置定时初值
        TH0 = 0xF8;                //设置定时初值
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//显示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//显示第7位       
                }
                GPIO_DIG=DIG_CODE[check[i]];//发送段码
                j=5;       
                i++;
                if(i==8)
                {
                 i=0;
                }                                         //扫描间隔时间设定
                while(j--);       
                GPIO_DIG=0x00;//消隐

}

void exint1() interrupt 0           //(location at 0013H)
{
  static  bit  Curr_encoder_b;  //定义一个变量来储存当前B信号
   static  bit  Last_encoder_b;  //定义一个变量来储存上次B脚信号
   static  bit  updata= 0;
   if(PINA && PINB)           //编码器无转动退出
   {
     updata = 0;
     return;
   }

         Last_encoder_b = PINB;
        while(!PINA)
        {
         Curr_encoder_b = PINB;
         updata = 1;
        }
        if(updata)
        {
          updata = 0;
          if(Last_encoder_b==1&&Curr_encoder_b==0)
          {
          if(counter == 400)
            return;       
           counter++;
          }
          else if(Last_encoder_b==0&&Curr_encoder_b==1)
          {
          if(counter == 0)
                    return;
           counter--;              
          }
        }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表