你大爷1
获得 0 次赞
帮助过0人
我想使用编码器控制数码管值的加减,一直没有反应,望高手指教,非常感谢!#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(); //数码管显示函数 } }