标题: 单片机+EC11编码器+TM1637显示试验程序 [打印本页]

作者: aihofor    时间: 2024-6-28 11:02
标题: 单片机+EC11编码器+TM1637显示试验程序
// Header:  编码开关代码   
#include <STC12C2052AD.H>
#include "TM1637.h"  
#include <intrins.h>

#define uint unsigned int   
#define uchar unsigned char   
#define NULL 0   

uchar x,WheelOld;   
uchar Led=0;//LED流水灯初始化   
/*************************定义接口************************/
sbit SJ=P1^5;       //LED的使能端  YY开发板特有
sbit WEI=P1^6;      //74HC573的LE端 U4 LED的位选端 YY开发板特有,熄灭数码管
/*************************定义接口************************/     
sbit PINA=P3^2;    //定义编码器连接的IO   
sbit PINB=P3^3;    //定义编码器连接的IO   
/*************************过程返回************************/     
uchar WheelLeft()      
{        
    Led++;         
    return(NULL);      
}     
/*************************右转一步的操作************************/
uchar WheelRight()      
{         
     Led--;   
     return(NULL);      
}     
/*************************编码器过程************************/     
uchar EncoderProcess()   
{      
        uchar keytmp,keytmp1,keytmp2,WheelNow;   
      
        PINA=1;                                                                 //PINA至高电平   
        PINB=1;                                                                        //PINB至高电平   
        if(PINA==1)                                                         //如果PINA为高电平   
        {   
                keytmp1=0x01;   
        }   
                else keytmp1=0;     
        if(PINB==1)                                                         //如果PINB为高电平   
        {   
                keytmp2=0x02;   
        }   
        else keytmp2=0;   
        WheelNow=keytmp1+keytmp2; //根据两个IO组合成16进制数为0x00|0x01|0x02|0x03   
        keytmp=WheelNow;   
        keytmp^=WheelOld;  //判断新数据同旧数据   
        if(keytmp==0) return(NULL); //如果新数据和原来的数据一样 就直接退出   
        if(WheelOld==0 && WheelNow==0x01)   
        {   
                x=WheelNow;   
        }         
        if(WheelOld==0 && x==0x01 && WheelNow==0x03)   
        {   
                WheelOld=WheelNow;   
                x=0;   
                return(WheelLeft()); //左旋转00 01 03   
        }   
        if(WheelOld==0x03 && WheelNow==0x02)   
        {   
                x=WheelNow;   
        }         
        if(WheelOld==0x03 && x==0x02 && WheelNow==0x00)   
        {   
                WheelOld=WheelNow;   
                x=0;   
                return(WheelLeft()); //左旋转03 02 00   
        }   
        if(WheelOld==0 && WheelNow==0x02)   
        {   
                x=WheelNow;   
        }   
        if(WheelOld==0 && x==0x02 && WheelNow==0x03)   
        {   
                WheelOld=WheelNow;   
                x=0;           
                return(WheelRight());  //右旋转00 02 03   
        }   
        if(WheelOld==0x03 && WheelNow==0x01)   
        {   
                x=WheelNow;   
        }         
        if(WheelOld==0x03 && x==0x01 && WheelNow==0x00)   
        {   
                WheelOld=WheelNow;   
                x=0;      
                return(WheelRight());  //右旋转03 01 10   
        }   
}   
/*************************主函数************************/
void main()   
{      
        SJ=0;        //开LED总使能 YY开发板特有   
        WEI=0;
    while (1)   
    {   
            EncoderProcess();   
            Fnshu(Led);   //此句为将变量显示于TM637函数,具体看工程文件内的TM637.H文件
    }   
}

红外解码简单电路.jpg (86.41 KB, 下载次数: 20)

接线图

接线图

作者: joyb    时间: 2024-6-28 17:16
把YY开发板原理图发上来




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1