找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 573|回复: 1
打印 上一主题 下一主题
收起左侧

单片机+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, 下载次数: 15)

接线图

接线图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1064915 发表于 2024-6-28 17:16 | 只看该作者
把YY开发板原理图发上来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表