找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 335|回復: 0
打印 上一主題 下一主題
收起左側(cè)

單片機EC11編碼器TM1637數(shù)碼管顯示程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1044703 發(fā)表于 2025-6-9 09:52 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用TM1637數(shù)碼管顯示EC11編碼器調(diào)整數(shù)字
/*========================================  
引腳分別為a,b,c  b接地;a,c分別接到P3.3和P3.2口并分別接兩個10K上拉  
電阻,并且a,c需要分別對地接一個104的電容,否則  
因為編碼開關的觸點抖動會引起輕微誤動作。本程序不  
使用定時器,不占用中斷,不使用延時代碼,并對每個  
細分步數(shù)進行判斷,避免一切誤動作,性能超級穩(wěn)定。  
我使用的編碼器是APLS的EC11可以參照附件的時序圖  編碼器控制流水燈最能說明問  
電路原理圖如下:

(單片機為STC89C52)=================*/   
#include <STC89c52.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 PINA=P3^2;    //定義編碼器連接的IO   
sbit PINB=P3^3;    //定義編碼器連接的IO   
/*************************過程返回************************/     
uchar WheelLeft()      
{        
    Led++;         
    return(NULL);      
}     
/*************************右轉(zhuǎn)一步的操作************************/
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; //根據(jù)兩個IO組合成16進制數(shù)為0x00|0x01|0x02|0x03   
        keytmp=WheelNow;   
        keytmp^=WheelOld;  //判斷新數(shù)據(jù)同舊數(shù)據(jù)   
        if(keytmp==0) return(NULL); //如果新數(shù)據(jù)和原來的數(shù)據(jù)一樣 就直接退出   
        if(WheelOld==0 && WheelNow==0x01)   
        {   
                x=WheelNow;   
        }           
        if(WheelOld==0 && x==0x01 && WheelNow==0x03)   
        {   
                WheelOld=WheelNow;   
                x=0;   
                return(WheelLeft()); //左旋轉(zhuǎn)00 01 03   
        }   
        if(WheelOld==0x03 && WheelNow==0x02)   
        {   
                x=WheelNow;   
        }           
        if(WheelOld==0x03 && x==0x02 && WheelNow==0x00)   
        {   
                WheelOld=WheelNow;   
                x=0;   
                return(WheelLeft()); //左旋轉(zhuǎn)03 02 00   
        }   
        if(WheelOld==0 && WheelNow==0x02)   
        {   
                x=WheelNow;   
        }   
        if(WheelOld==0 && x==0x02 && WheelNow==0x03)   
        {   
                WheelOld=WheelNow;   
                x=0;           
                return(WheelRight());  //右旋轉(zhuǎn)00 02 03   
        }   
        if(WheelOld==0x03 && WheelNow==0x01)   
        {   
                x=WheelNow;   
        }           
        if(WheelOld==0x03 && x==0x01 && WheelNow==0x00)   
        {   
                WheelOld=WheelNow;   
                x=0;      
                return(WheelRight());  //右旋轉(zhuǎn)03 01 10   
        }   
}   
/*************************主函數(shù)************************/
void main()   
{      

    while (1)   
    {   
            EncoderProcess();   
            Fnshu(Led);   
    }   
}

完整程序: EC11.7z (26.47 KB, 下載次數(shù): 0)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表