头像-367873

你大爷1

个人成就

获得 0 次赞

帮助过0人

在使用单片机+EC11编码器中遇到的问题,请大家帮忙

我想使用编码器控制数码管值的加减,一直没有反应,望高手指教,非常感谢!#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;          //对数据类型进行声明定义typedef unsigned char u8;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit EC11_A=P2^5;sbit EC11_B=P2^6;u8 code smgduan[17]={0x3f0x060x5b0x4f0x660x6d0x7d0x07                                        0x7f0x6f0x770x7c0x390x5e0x790x71};//显示0~F的值u8 d=125;/@@******************************************************************************** 函 数 名         : delay* 函数功能                   : 延时函数,i=1时,大约延时10us*******************************************************************************/void delay(u16 i){        while(i--);        }/@@******************************************************************************** 函 数 名         : DigDisplay* 函数功能                   : 数码管动态扫描函数,循环扫描8个数码管显示*******************************************************************************/void DigDisplay(){        u8 i;        for(i=0;i<3;i++)        {                switch(i)         //位选,选择点亮的数码管,                {                        case(0):                                LSA=0;LSB=0;LSC=0; P0=smgduan[d%10];delay(100); P0=0x00;  break;//显示第0位                        case(1):                                LSA=1;LSB=0;LSC=0; P0=smgduan[d%100/10];delay(100);P0=0x00; break;//显示第1位                        case(2):                                LSA=0;LSB=1;LSC=0; P0=smgduan[d/100];delay(100);P0=0x00;    break;//显示第2位                }                }}void xuanzhun(){        u8 flag=0left_flag=0right_flag=0;        if((EC11_A)&&(EC11_B))                 {                                flag=1;                }                if(EC11_A!=EC11_B)                {                                left_flag = EC11_A; //记录AB的信号状态                                right_flag = EC11_B;                }                if(flag==1)                {                                if((EC11_A==0)&&(EC11_B==0))                                {                                                flag=0;                                                if(left_flag==0)  //左转                                                {                                                                d--;                                                }                                                if(right_flag==0)                                                {                                                                d++;                                                 }                                }                        }}/@@******************************************************************************** 函 数 名       : main* 函数功能                 : 主函数* 输    入       : 无* 输    出             : 无*******************************************************************************/void main(){                while(1)        {                xuanzhun();                DigDisplay();  //数码管显示函数                }        }