久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4236|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

在使用單片機(jī)+EC11編碼器中遇到的問題,請(qǐng)大家?guī)兔?/span>

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:388477 發(fā)表于 2020-7-9 14:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我想使用編碼器控制數(shù)碼管值的加減,一直沒有反應(yīng),望高手指教,非常感謝!
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器


typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
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]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u8 d=125;
/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}


/*******************************************************************************
* 函 數(shù) 名         : DigDisplay
* 函數(shù)功能                   : 數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描8個(gè)數(shù)碼管顯示
*******************************************************************************/
void DigDisplay()
{
        u8 i;
        for(i=0;i<3;i++)
        {
                switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
                {
                        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=0,left_flag=0,right_flag=0;
        if((EC11_A)&&(EC11_B))
                {
                                flag=1;
                }
                if(EC11_A!=EC11_B)
                {
                                left_flag = EC11_A; //記錄AB的信號(hào)狀態(tài)
                                right_flag = EC11_B;
                }
                if(flag==1)
                {
                                if((EC11_A==0)&&(EC11_B==0))
                                {
                                                flag=0;
                                                if(left_flag==0)  //左轉(zhuǎn)
                                                {
                                                                d--;
                                                }
                                                if(right_flag==0)
                                                {
                                                                d++;
                                                }
                                }        
                }
}




/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        while(1)
        {
                xuanzhun();
                DigDisplay();  //數(shù)碼管顯示函數(shù)        
        }        
}

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

使用道具 舉報(bào)

沙發(fā)
ID:401564 發(fā)表于 2020-7-9 15:12 | 只看該作者
馬云家的EC11有好幾種的:有20位和30位的
這其中又分為好幾種開關(guān)狀態(tài)的:1是轉(zhuǎn)動(dòng)之后固定在短路狀態(tài)的,一種是固定在開路狀態(tài)的,還有一個(gè)是每次轉(zhuǎn)動(dòng)停止之后不固定的
所以,你得看你手頭上這個(gè)開關(guān)的規(guī)格書還寫代碼,完全復(fù)制別人的代碼不一定行的
回復(fù)

使用道具 舉報(bào)

板凳
ID:282850 發(fā)表于 2020-7-9 16:26 | 只看該作者
是否對(duì)你有用,IO口中斷判定輸入

//旋轉(zhuǎn)編碼開頭,測試與網(wǎng)上介紹相符:
//按下時(shí)4、5導(dǎo)通,4、5不與其它腳內(nèi)部相關(guān)
//                 ______
//P25    A     1--|   /|--4 (Press)
//P24    com   2--|__/ |
//P26    B     3--|____|--5 (Press)      P27
//順時(shí)針轉(zhuǎn):Aon--ABon--Aoff--Boff
//逆時(shí)針轉(zhuǎn):Bon--ABon--Boff--Aoff
//時(shí)序圖如下(設(shè)com接Vcc):
//順時(shí)針A-->B轉(zhuǎn)
//A      ____     ____
//      |  |___|  |_
//B        ____     ____
//        |  |___|  |_


//
//逆時(shí)針B-->A轉(zhuǎn)
//B      ____     ____
//      |  |___|  |_
//A        ____     ____
//        |  |___|  |_
//程序思路:
//為與C51兼容,少點(diǎn)用中斷口線,僅使用A線的中斷進(jìn)行判斷,B線不考慮
//Aon中斷---if(Boff)----是A2B--- 計(jì)數(shù)+
//          if(Bon)-----是B2A--- 計(jì)數(shù)-
//Aon中斷,反轉(zhuǎn)Aoff---if(Boff)----是A2B--- 計(jì)數(shù)+
//                    if(Bon)-----是B2A--- 計(jì)數(shù)-
//有旋轉(zhuǎn),注先轉(zhuǎn)到B但A沒on時(shí)(半格不到),丟棄

#pragma vector=PORT2_VECTOR
__interrupt void Port2_IR2(void)
{
      //    PressTime=0;
      if(P2IFG & Aon)  //有右旋轉(zhuǎn)
      {
            P2IFG=0;   
            if(P2IN & Bon) keyOld=keyN, keyN++;  //
      }
      
      if(P2IFG & Bon)  //有左旋轉(zhuǎn)
      {
            P2IFG=0;   
            if(P2IN & Aon)  keyOld=keyN, keyN--; //
      }
      if(P2IFG & downKey)  //有按下
      {
            P2IFG=0;
            keyPress();
      }
      P2IFG=0;
      
      HT16_DisplayDecimal(keyN,0);
      HT16_1NumDOT(3,Menu_sel,0);
      //__low_power_mode_off_on_exit();     //退出中斷時(shí)喚醒CPU。▲▲▲▲在此退LPM,比在BT中斷中退更省電 ▲▲▲▲可運(yùn)行60+20秒。
}
回復(fù)

使用道具 舉報(bào)

地板
ID:388477 發(fā)表于 2020-7-9 16:53 | 只看該作者
Y_G_G 發(fā)表于 2020-7-9 15:12
馬云家的EC11有好幾種的:有20位和30位的
這其中又分為好幾種開關(guān)狀態(tài)的:1是轉(zhuǎn)動(dòng)之后固定在短路狀態(tài)的,一種 ...

嗯嗯,我剛接觸這個(gè)是照一個(gè)視頻寫的,我覺得挺好理解,我現(xiàn)在這個(gè)是24位的,整了好長時(shí)間,希望給點(diǎn)思路或者參考,謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:799404 發(fā)表于 2020-7-9 17:02 | 只看該作者
顯示部分正常嗎,先排查下改變d的值以后顯示會(huì)變化嗎
回復(fù)

使用道具 舉報(bào)

6#
ID:799404 發(fā)表于 2020-7-9 17:10 | 只看該作者
LSA/LSB/LSC是位碼吧,數(shù)碼管case0的時(shí)候沒有點(diǎn)位碼呢
回復(fù)

使用道具 舉報(bào)

7#
ID:388477 發(fā)表于 2020-7-9 19:06 | 只看該作者
wjianing 發(fā)表于 2020-7-9 17:02
顯示部分正常嗎,先排查下改變d的值以后顯示會(huì)變化嗎

改變d的之后,會(huì)改變,謝謝!
回復(fù)

使用道具 舉報(bào)

8#
ID:388477 發(fā)表于 2020-7-9 19:09 | 只看該作者
wjianing 發(fā)表于 2020-7-9 17:10
LSA/LSB/LSC是位碼吧,數(shù)碼管case0的時(shí)候沒有點(diǎn)位碼呢

是位碼,可以顯示
回復(fù)

使用道具 舉報(bào)

9#
ID:401564 發(fā)表于 2020-7-9 20:14 | 只看該作者
C不會(huì),我用匯編的
但原理是一樣的:就是每次轉(zhuǎn)動(dòng)就把兩個(gè)端口的電平記錄,讀取到某個(gè)數(shù)據(jù)的時(shí)候就判定為左轉(zhuǎn)還是右轉(zhuǎn)
你把數(shù)據(jù)手冊(cè)上的時(shí)序好好的看一下就知道,它順時(shí)針和逆時(shí)針的區(qū)別在于哪個(gè)先出現(xiàn)電平的變化
最好是用定時(shí)器,一般2mS掃描一次就可以了
回復(fù)

使用道具 舉報(bào)

10#
ID:388477 發(fā)表于 2020-7-10 11:09 | 只看該作者
f556 發(fā)表于 2020-7-9 16:26
是否對(duì)你有用,IO口中斷判定輸入

//旋轉(zhuǎn)編碼開頭,測試與網(wǎng)上介紹相符:

沒有看懂,謝謝你
回復(fù)

使用道具 舉報(bào)

11#
ID:388477 發(fā)表于 2020-7-11 14:45 | 只看該作者
終于搞定了,又換了一個(gè)ec11的編碼器,20節(jié)點(diǎn)的,程序經(jīng)測試,普中v2.0的板子,一個(gè)節(jié)點(diǎn)加一或者減一,謝謝大家的幫忙!

#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit BMA=P1^0;
sbit BMB=P1^1;
sbit button=P1^2;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u16 d=235;
u8 flag;
u8 b,Last_BMB_status,Current_BMB_status;
///*******************************************************************************
//* 函 數(shù) 名         : delay
//* 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
//*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}
/*******************************************************************************
* 函 數(shù) 名         : DigDisplay
* 函數(shù)功能                   : 數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描8個(gè)數(shù)碼管顯示
*******************************************************************************/
void DigDisplay()
{
        u8 i;
        for(i=0;i<3;i++)
        {
                switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
                {
                        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 DirScan(void)
{
                Last_BMB_status = BMB;
    if(BMA == 0)    //BMA為低電平時(shí)
    {
                                while(!BMA);
        Current_BMB_status = BMB;
        flag = 1;    //標(biāo)志位置為1說明編碼開關(guān)被旋轉(zhuǎn)了
                                if(flag == 1)
                                {  
                                                flag = 0;    //時(shí)刻要注意這一點(diǎn)!給標(biāo)志位清零
                                                if(Current_BMB_status == 1) //BMB上升沿表示正轉(zhuǎn)
                                                {
                                                                d++;
                                                                if(d>=999)  d=999;       
                                                }
                                                else if((Last_BMB_status == 1)&&(Current_BMB_status == 0)) //BMB下降沿表示反轉(zhuǎn)
                                                {
                                                                d--;
                                                                if(d==65535) d=0;
                                                }
                                }
    }
                if(button==0)
                {
                                delay(10);
                                if(button==0)
                                        d=0;
                }
}

void main()
{
        while(1)
        {
                        DirScan();
                        DigDisplay();  //數(shù)碼管顯示函數(shù)               
        }       
}

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:611626 發(fā)表于 2021-9-1 10:08 | 只看該作者
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位
                }
你用的共陰數(shù)碼管,這樣能顯示正常嗎
回復(fù)

使用道具 舉報(bào)

13#
ID:161164 發(fā)表于 2021-9-1 10:51 | 只看該作者
宏達(dá)工控 發(fā)表于 2021-9-1 10:08
case(0):
                                LSA=0;LSB=0;LSC=0; P0=smgduan[d%10];delay(100); P0=0x00;   ...

可能共陰段接了一個(gè)NPN反相壙流
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费淫片aa视频免费 | 日韩av在线中文字幕 | 国产精品毛片在线 | av大全在线观看 | 国产精品国产三级国产aⅴ原创 | 久草电影网 | 久久久xxx | 狠狠色综合久久丁香婷婷 | 亚洲欧美激情国产综合久久久 | 亚洲在线一区二区 | 亚洲va国产日韩欧美精品色婷婷 | 91在线视频免费观看 | 国产精品99久久久久久动医院 | 成人a网 | 欧美精品二区 | 欧美精品片| 中文字幕91av | 99精品久久 | 成人毛片视频免费 | 一区二区在线不卡 | 久久久久久久久蜜桃 | 老司机免费视频 | av毛片| 在线视频 亚洲 | 国产日韩精品视频 | 91视视频在线观看入口直接观看 | 美女黄网| 国产精品视频一区二区三区不卡 | 欧美日韩中文字幕在线 | 国产精品视频久久久久 | 日日夜夜天天 | 亚洲一区二区三区免费在线观看 | 99精品国产一区二区三区 | 人人干人人干人人 | 日韩av在线一区二区 | 亚洲情综合五月天 | 国产一区不卡 | 亚洲国产成人一区二区 | 激情综合五月 | 精品网 | 久久精品一二三影院 |