打印
[AVR单片机]

AVR测编码器转数并显示在数码管上

[复制链接]
1125|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Z巧er|  楼主 | 2014-8-18 16:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Z巧er 于 2014-8-19 16:23 编辑

板子是MEGA16的,旋转编码器时两相的,A相接普通端口--PA0,B相接外部中断INT2,电路图如下上传的。编程数码管显示00000000,旋转编码器没反应,高人帮我看看,谢啦!

未命名.bmp (995.68 KB )

未命名.bmp

相关帖子

沙发
qqq_147258| | 2014-8-20 10:31 | 只看该作者
由于你写的是"显示000",推测你的显示部分没有问题。
你是使用的什么编码器?
长线驱动型?集电极开路?
集电极开路需要加上拉电阻。
发一下完整的电路和程序吧。

使用特权

评论回复
板凳
Z巧er|  楼主 | 2014-8-20 16:20 | 只看该作者
本帖最后由 Z巧er 于 2014-8-21 11:45 编辑

我用的是两相增量式旋转编码器  程序如下:

/**********************************************
              HC595 字节写入函数
**********************************************/
void hc595send(unsigned char x)
{
   unsigned char n,temp;
   for(n=0;n<=7;n++)                       //一个字节要分8次写入
   {  
       temp=x&0x80;                        //记住一定要先写最高位
      if(temp!=0)                        //判断是否不等于0
      {
             PORTB|=(1<<PB5);   //PB5赋为1
                 hc595shift();                //使寄存器移位
      }
      else                                        //等于0
      {
         PORTB&=~(1<<PB5);  //PB5赋为0
         hc595shift();                //使寄存器移位
      }         
      x<<=1;                                //数据左移一位,那么下一个循环将是获取第7位的数据 跟着是第6位 第5位。。。第1位 最后把所有数据都移入HC595
   }
}
/**********************************************
               寄存器移位函数
**********************************************/
void hc595shift(void)
{
   PORTB|=(1<<PB7);                //一开始初始化端口时,PB7已为低,这时若把PB7拉高,则是上升沿,就会把进行寄存器移位操作
   PORTB&=~(1<<PB7);                //每次上升沿完成,要重新将时钟线置低,准备下一次上升
}
/**********************************************
      字节写入存储寄存器,并且送往输出端口
**********************************************/
void hc595store(void)
{
   PORTB|=(1<<PB4);                   //一开始初始化端口时,PB4已为低,这时若把PB4拉高,则是上升沿,就会把字节写入存储寄存器
   PORTB&=~(1<<PB4);                //每次上升沿完成,要重新将时钟线置低,准备下一次上升
}
void display(void)
{
unsigned char i;
for(i=0;i<8;i++)
{
  hc595send(ledwei);
  hc595send(ledduan[dis_buff]);
  hc595store();
  }
}
int main(void)
{
//unsigned char i=0;
  pulse=10;
    a=21;
device_init();
//for(i=0;i<=7;i++)
   //dis_buff=0;

    //sei();          //开启全局中断

while(1)
{
  gengxin_disbuff();       //缓冲区的脉冲数更新
}
}

使用特权

评论回复
地板
Z巧er|  楼主 | 2014-8-20 17:46 | 只看该作者
怎么都没啥人参与呢、。

使用特权

评论回复
5
ddllxxrr| | 2014-8-21 19:19 | 只看该作者
旋转编码器啥型号???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝