打印

旋转编码器原理图程序已经完成,贴出来,大家帮忙看看有

[复制链接]
7966|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
namefull|  楼主 | 2009-4-27 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不废话直接上程序了,大家帮忙看看还有什么大错小错,我明天去实验室测试下,做好这个还要做上机程序呢

谢谢指点


#include "regx51.h"

unsigned char h,r,i;
unsigned char a,b,c,d;
unsigned char code diaplay[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};


long counter=0;                      //旋转编码器的脉冲计数值
void main()

  TMOD=0x22;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  TR0=1;
  ET0=1;
  
  TH1=(65536-4000)/256;
  TL1=(65536-4000)%256;
  TR1=1;
  ET1=1;
  IT1 = 1;                                                 //外部中断1为边沿触发
  EX1 = 1;                                                       //使能外部中断1
  EA  = 1;                                                            //使能中断
  while(1)
  {if(P3_6==1)
     {
       P1_0=0;
      } 
   else P1_1=0;
    a=r%10;
    b=(r/10)%10;
    c=(r/100)%10;
    d=(r/1000)%10;

  }
}


void int1()   interrupt 1
{
   
       counter++;
  
}
void t0_() interrupt 2 using 1
  {
    TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
    h++;
    if(h==100)
      {
        h=0;
        r=60*counter/500;
         
       }


   }
void t1_() interrupt 3 using 1
  {
    TH1=(65536-4000)/256;
    TL1=(65536-4000)%256;
     
    if(i==0)
    {P2=display[d];
    P0_3=0;}
    if(i==1)
    {P2=display[c];
     P0_2=0;}
    if(i==2)
    {P2=display;
     P0_1=0;}
     if(i==3)
     {P2=display[a];
      P0_2=0;} 
     if(i==4)
       {i=0;}
     i++;

 }

相关帖子

沙发
namefull|  楼主 | 2009-4-28 11:16 | 只看该作者

大家帮忙看看嘛~

都帮忙看看嘛~还有什么问题嘛 过2天去实验室调试下~!!

使用特权

评论回复
板凳
快乐的水手| | 2009-4-28 11:26 | 只看该作者

counter没有清0,动态扫描也有问题

使用特权

评论回复
地板
namefull|  楼主 | 2009-4-28 12:01 | 只看该作者

楼上的具体点嘛

couort  复位的时候不就清零了嘛~ 还用专门再清零吗?

动态扫描哪里有问题呢  能具体说说嘛

使用特权

评论回复
5
namefull|  楼主 | 2009-4-28 13:10 | 只看该作者

谁帮忙看看呢嘛~

谁帮忙看看呢嘛~

使用特权

评论回复
6
快乐的水手| | 2009-4-28 13:33 | 只看该作者

re

if(h==100)
      {
        h=0;
        r=60*counter/500;
        count = 0;          //完成计算后要清0
       }
运行后,P0_0到P0_3一直为0,不能达到循环点亮

使用特权

评论回复
7
namefull|  楼主 | 2009-4-28 16:45 | 只看该作者

修改显示

谢谢楼上的  我已经把清零加上了 呵呵

动态显示不用定时器了,因为串口发送需要定时 把显示加到主程序了,帮忙看看
void main()

  TMOD=0x22;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  TR0=1;
  ET0=1;
  
  TH1=(65536-4000)/256;
  TL1=(65536-4000)%256;
  TR1=1;
  ET1=1;
  IT1 = 1;                                                 //外部中断1为边沿触发
  EX1 = 1;                                                       //使能外部中断1
  EA  = 1;                                                            //使能中断
  while(1)
  {if(P3_6==1)
     {
       P1_0=0;
      } 
   else P1_1=0;
    a=r%10;
    b=(r/10)%10;
    c=(r/100)%10;
    d=(r/1000)%10;

    P2=display[d];
    P0_3=0;
    delay(); 

    P2=display[c];
     P0_2=0;
     delay();

    P2=display;
     P0_1=0;
    delay();

    P2=display[a];
      P0_2=0;}
      delay();


  }
}

uchar delay() 

unsigned int i; 
for (i=0;i<50;i++); 



        

使用特权

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

本版积分规则

6

主题

21

帖子

0

粉丝