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

[复制链接]
8957|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  复位的时候不就清零了嘛~ 还用专门再清零吗?

动态扫描哪里有问题呢  能具体说说嘛
 楼主| namefull 发表于 2009-4-28 13:10 | 显示全部楼层

谁帮忙看看呢嘛~

谁帮忙看看呢嘛~
快乐的水手 发表于 2009-4-28 13:33 | 显示全部楼层

re

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

粉丝
快速回复 在线客服 返回列表 返回顶部