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

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 6889|回復(fù): 37
打印 上一主題 下一主題
收起左側(cè)

38譯碼器兩個(gè)級(jí)聯(lián)單片機(jī)程序求分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
關(guān)于兩個(gè)譯碼器級(jí)聯(lián)   切換是沒(méi)問(wèn)題了可是切換的那個(gè)端口S4不知道在哪里控制它怎么切換有一個(gè)接線圖

單片機(jī)源程序如下:
void HC138_GPIO_InIt()S
{
    S1=0;
    S2=0;
    S3=0;

    S4=0;//片選切換端口此端口為0時(shí)是第一個(gè)譯碼器工作等于1時(shí)切換到第二個(gè)譯碼器工作
}


void HC138_Drive()
{
    static uint8 i=0;
            switch(i)
        {

            case(0):  S1=0;S2=0;S3=0;break;
            case(1):  S1=1;S2=0;S3=0;break;
            case(2):  S1=0;S2=1;S3=0;break;
            case(3):  S1=1;S2=1;S3=0;break;
            case(4):  S1=0;S2=0;S3=1;break;
            case(5):  S1=1;S2=0;S3=1;break;
            case(6):  S1=0;S2=1;S3=1;break
            case(7):  S1=1;S2=1;S3=1;break;
            default:break;
        }

        i++;
        i=i%8;
        delay(50);

}

屏幕截圖 2021-02-27 191534.png (55.52 KB, 下載次數(shù): 81)

138譯碼器的級(jí)聯(lián)

138譯碼器的級(jí)聯(lián)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

38#
ID:232366 發(fā)表于 2021-3-3 22:25 來(lái)自觸屏版 | 只看該作者
帖子沉的好快
回復(fù)

使用道具 舉報(bào)

37#
ID:232366 發(fā)表于 2021-3-3 18:48 來(lái)自觸屏版 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-2-27 21:24
你這個(gè)很簡(jiǎn)單  把 S1 S2 S3 S4 當(dāng)作一個(gè)字節(jié)的低4位 就行了
取值范圍就是
0   0   0   0  0   0   0   0 ...

我現(xiàn)在明白您這幾行數(shù)字什么意思了  再次感謝您提供思路  小弟感激不盡
回復(fù)

使用道具 舉報(bào)

36#
ID:232366 發(fā)表于 2021-3-2 12:40 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-3-1 17:28
兩個(gè)138級(jí)聯(lián) 就等于一個(gè)154 所以叫你先去研究154怎么編程

哦哦明白了感謝提出建議
回復(fù)

使用道具 舉報(bào)

35#
ID:390416 發(fā)表于 2021-3-1 17:28 | 只看該作者
SHANWAZI 發(fā)表于 2021-3-1 17:08
看過(guò)了里面有兩個(gè)138貌似也一樣可以級(jí)聯(lián) 我是重在學(xué)習(xí)硬件的的編程不是為了方便154確實(shí)是方便編程我是想 ...

兩個(gè)138級(jí)聯(lián) 就等于一個(gè)154 所以叫你先去研究154怎么編程
回復(fù)

使用道具 舉報(bào)

34#
ID:232366 發(fā)表于 2021-3-1 17:10 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-3-1 10:29
相同的功能可以用不同的代碼實(shí)現(xiàn),只要遵循簡(jiǎn)潔、高效、易讀的原則,可任意發(fā)揮。貌似你這程序是用兩個(gè)13 ...

是的  138 四個(gè)  595三個(gè)    太感謝提供思路我已經(jīng)弄明白了對(duì)IO口與和或保持不變和改變后不影響其他的IO空的編程方法了 前面是絞盡腦汁怎么想都沒(méi)想明白小弟無(wú)以回報(bào)
回復(fù)

使用道具 舉報(bào)

33#
ID:232366 發(fā)表于 2021-3-1 17:08 來(lái)自觸屏版 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-3-1 10:42
都說(shuō)了 先去研究一下 74HC154的芯片

看過(guò)了里面有兩個(gè)138貌似也一樣可以級(jí)聯(lián) 我是重在學(xué)習(xí)硬件的的編程不是為了方便154確實(shí)是方便編程我是想多了解一些和多學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

32#
ID:390416 發(fā)表于 2021-3-1 10:42 | 只看該作者
都說(shuō)了 先去研究一下 74HC154的芯片
回復(fù)

使用道具 舉報(bào)

31#
ID:232366 發(fā)表于 2021-3-1 10:38 | 只看該作者
我用38譯碼器進(jìn)行列掃描  595送數(shù)據(jù)的
回復(fù)

使用道具 舉報(bào)

30#
ID:232366 發(fā)表于 2021-3-1 10:37 | 只看該作者
是的  138 四個(gè)  595三個(gè)    太感謝提供思路我已經(jīng)弄明白了對(duì)IO口與和或保持不變和改變后不影響其他的IO空的編程方法了 前面是絞盡腦汁怎么想都沒(méi)想明白小弟無(wú)以回報(bào)
回復(fù)

使用道具 舉報(bào)

29#
ID:213173 發(fā)表于 2021-3-1 10:29 | 只看該作者
SHANWAZI 發(fā)表于 2021-3-1 10:13
非常感謝您耐心回復(fù)

static uint8 i=0;

相同的功能可以用不同的代碼實(shí)現(xiàn),只要遵循簡(jiǎn)潔、高效、易讀的原則,可任意發(fā)揮。貌似你這程序是用兩個(gè)138和兩個(gè)595驅(qū)動(dòng)16*16點(diǎn)陣。如果采用上述方法只需要7個(gè)I/O口就能完成。
回復(fù)

使用道具 舉報(bào)

28#
ID:232366 發(fā)表于 2021-3-1 10:13 | 只看該作者
wulin 發(fā)表于 2021-3-1 08:24
這種控制方式低4位重新賦值前必須先清0,否則要出錯(cuò)
        uint8 i;
        for(i=0;i

非常感謝您耐心回復(fù)

static uint8 i=0;
        P2&=0XF0;
        P2|=LedBuff;
        Delay100ms();
        i++;
        i=i%16;

請(qǐng)看這樣方法是不是可行  先與保持高四位  清零低四位
重新賦值按位或
回復(fù)

使用道具 舉報(bào)

27#
ID:213173 發(fā)表于 2021-3-1 08:24 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-28 22:26
那么是不是可以這樣理解呢比如p2口原本的數(shù)據(jù)

1111-0110按位與1111-0000

這種控制方式低4位重新賦值前必須先清0,否則要出錯(cuò)
        uint8 i;
        for(i=0;i<16;i++)
        {
                P2&=0x00
                P2|=ledBuff;
                delay(200);
        }
如果再使用sbit LED=P2^7;
主函數(shù)中操作LED=0;上述代碼與此互不干擾
回復(fù)

使用道具 舉報(bào)

26#
ID:232366 發(fā)表于 2021-2-28 22:27 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-2-28 17:06
當(dāng)然可以另外使用sbit定義獨(dú)立操作。高位按位與f不等于置1,而是原來(lái)是1還是1,原來(lái)是0還是0。
P2&=0xf0 ...

不好意思回復(fù)晚了
回復(fù)

使用道具 舉報(bào)

25#
ID:232366 發(fā)表于 2021-2-28 22:26 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-2-28 17:06
當(dāng)然可以另外使用sbit定義獨(dú)立操作。高位按位與f不等于置1,而是原來(lái)是1還是1,原來(lái)是0還是0。
P2&=0xf0 ...

那么是不是可以這樣理解呢比如p2口原本的數(shù)據(jù)

1111-0110按位與1111-0000
結(jié)果為1111-0000我又去查了查資料按位與是0與任何數(shù)都為0只有1與1才為1這樣的話(huà)就應(yīng)了這個(gè)把高四位保持而低四位全部清理因?yàn)楦咚奈粩?shù)都為1與數(shù)高四也為1得出1與1結(jié)果還為1而低四位全部和0相與結(jié)果全部為零從而清零目的高四位不變   
如果我的點(diǎn)陣的行掃描使用38譯碼器級(jí)聯(lián)那么上面的s1s2s3s4對(duì)應(yīng)為P2口低四位我定義一個(gè)數(shù)組uint8  ledBuff[]={0x0f,0xfd……};
利用for循環(huán)依次取出對(duì)應(yīng)數(shù)據(jù)因?yàn)橹挥玫降退奈桓甙宋粵](méi)有用  而在for循環(huán)進(jìn)行時(shí)P2的高四位就會(huì)被賦值為1111  在上述中按位與操作
當(dāng)?shù)谝淮蝔or循環(huán)獲取第一零個(gè)數(shù)組元素元素時(shí)
P2=P2&ledBuff[0];
那么是不是這樣  
1111-0000
1111-0000<按位與的值
結(jié)果為1111-0000
當(dāng)for循環(huán)獲取第一個(gè)元素時(shí)
P2=P2&ledBuff[1];
是不是這樣
1111-1101
1111-0000<按位與的值
結(jié)果為1111-0000
那么這樣的話(huà)是不是每次只是保持高四位不變
而低四位每次都清零好像不是這個(gè)效果  低四位一直清零譯碼器豈不是一直在一個(gè)狀態(tài)
或者是這樣的
每次進(jìn)入for
先對(duì)P2&=0xf0;先對(duì)低四位清零高四位不變
然后再給P2=ledBuff[1];賦一次新的值
這里發(fā)送段碼>忽略
這里延時(shí)>忽略
退出進(jìn)入下一個(gè)循環(huán)


如果再使用sbit  LED=P2^7;
主函數(shù)中LED=0;會(huì)受控嗎?



不知道我這樣理解的思路對(duì)不對(duì)有問(wèn)題還請(qǐng)指正初學(xué)者嘛 得多舉一反三(抱拳)







回復(fù)

使用道具 舉報(bào)

24#
ID:213173 發(fā)表于 2021-2-28 17:06 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-28 15:48
高位按位與置1了  高四位的還能使用sbit就行定義操作嗎?

當(dāng)然可以另外使用sbit定義獨(dú)立操作。高位按位與f不等于置1,而是原來(lái)是1還是1,原來(lái)是0還是0。
P2&=0xf0;
1010 1010 原來(lái)狀態(tài)
1111 0000 按位與
-------------
1010 0000 結(jié)果高4位不變,低4位清0
回復(fù)

使用道具 舉報(bào)

23#
ID:232366 發(fā)表于 2021-2-28 15:48 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-2-28 14:13
給你的示例已經(jīng)非常清楚的說(shuō)明字節(jié)高低位分開(kāi)控制互不干擾,你還理解不了,無(wú)語(yǔ)了。

高位按位與置1了  高四位的還能使用sbit就行定義操作嗎?   
回復(fù)

使用道具 舉報(bào)

22#
ID:232366 發(fā)表于 2021-2-28 15:08 來(lái)自觸屏版 | 只看該作者
zmc5354 發(fā)表于 2021-2-28 13:13
P2=Hc138改p2=i;就可以

上面我是用了數(shù)組賦值改P2for循環(huán)依次取出數(shù)組給P2低四位或者是高四位一一對(duì)應(yīng)38譯碼器的輸入和級(jí)聯(lián)使能
回復(fù)

使用道具 舉報(bào)

21#
ID:232366 發(fā)表于 2021-2-28 14:21 | 只看該作者
wulin 發(fā)表于 2021-2-28 14:13
給你的示例已經(jīng)非常清楚的說(shuō)明字節(jié)高低位分開(kāi)控制互不干擾,你還理解不了,無(wú)語(yǔ)了。

有點(diǎn)卡殼沒(méi)理解透徹    尷尬
回復(fù)

使用道具 舉報(bào)

20#
ID:213173 發(fā)表于 2021-2-28 14:13 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-28 11:12
會(huì)影響高四位的工作這樣一來(lái)用一個(gè)字節(jié)高八位也會(huì)受影響尷尬

給你的示例已經(jīng)非常清楚的說(shuō)明字節(jié)高低位分開(kāi)控制互不干擾,你還理解不了,無(wú)語(yǔ)了。
回復(fù)

使用道具 舉報(bào)

19#
ID:232366 發(fā)表于 2021-2-28 13:56 | 只看該作者
各位論壇師傅麻煩幫我看看這樣編程是否也可以用swithc語(yǔ)句來(lái)切換達(dá)到效果這樣的話(huà)不知道有什么缺點(diǎn)

屏幕截圖 2021-02-28 135210.png (136.03 KB, 下載次數(shù): 69)

138譯碼器級(jí)聯(lián)

138譯碼器級(jí)聯(lián)
回復(fù)

使用道具 舉報(bào)

18#
ID:66757 發(fā)表于 2021-2-28 13:13 來(lái)自觸屏版 | 只看該作者
P2=Hc138改p2=i;就可以
回復(fù)

使用道具 舉報(bào)

17#
ID:232366 發(fā)表于 2021-2-28 12:22 | 只看該作者
KongQuan 發(fā)表于 2021-2-28 11:37
第一片138設(shè)計(jì)為低使能,第二片設(shè)計(jì)為高使能,這樣就可以一要IO控制兩個(gè)138了,另外三個(gè)IO做譯碼控制。看電 ...

分步使能其實(shí)可以達(dá)到效果但是實(shí)際編程的時(shí)候就實(shí)現(xiàn)不了
回復(fù)

使用道具 舉報(bào)

16#
ID:822755 發(fā)表于 2021-2-28 11:37 | 只看該作者
第一片138設(shè)計(jì)為低使能,第二片設(shè)計(jì)為高使能,這樣就可以一要IO控制兩個(gè)138了,另外三個(gè)IO做譯碼控制�?措娐�,先看看芯片手冊(cè)。
回復(fù)

使用道具 舉報(bào)

15#
ID:232366 發(fā)表于 2021-2-28 11:14 | 只看該作者
楊雪飛 發(fā)表于 2021-2-28 08:45
用4個(gè)IO口控制S1 S2 S3 S4,三個(gè)口的時(shí)候控制一片138,可以表示八種狀態(tài),也就是2的3次方,四位就可以表 ...

原理我也認(rèn)證分析過(guò)  就是在編程思路上卡殼無(wú)從下手最后用數(shù)組這種本辦法但是這樣的話(huà)就高八位和第八位都用到低四位工作時(shí)高八位也受影響
回復(fù)

使用道具 舉報(bào)

14#
ID:232366 發(fā)表于 2021-2-28 11:12 | 只看該作者
wulin 發(fā)表于 2021-2-28 06:30
給你一個(gè)簡(jiǎn)單的示例程序就很容易理解了

會(huì)影響高四位的工作這樣一來(lái)用一個(gè)字節(jié)高八位也會(huì)受影響尷尬
回復(fù)

使用道具 舉報(bào)

13#
ID:232366 發(fā)表于 2021-2-28 11:11 | 只看該作者
wulin 發(fā)表于 2021-2-28 06:30
給你一個(gè)簡(jiǎn)單的示例程序就很容易理解了

無(wú)奈用了個(gè)笨辦法
uint8 code HC138[16]=
{
    0x00,0x08,0x04,0x0c,0x02,0x0a,0x06,0x0e,
    0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f,

};

void HC138_Drive()
{
   
    uint8 i;
    for(i=0;i<16;i++)
    {
        P2=HC138;
        delay(200);
    }
回復(fù)

使用道具 舉報(bào)

12#
ID:97554 發(fā)表于 2021-2-28 08:45 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-27 23:34
我先去看看資料去先

用4個(gè)IO口控制S1 S2 S3 S4,三個(gè)口的時(shí)候控制一片138,可以表示八種狀態(tài),也就是2的3次方,四位就可以表示2的4次方數(shù),也就是16個(gè)狀態(tài)。就是7樓的電路。你的程序里S4直接給了0,需要把S4接入IO口,那么4個(gè)IO口給高低電平就可以表示16種狀態(tài)了
回復(fù)

使用道具 舉報(bào)

11#
ID:213173 發(fā)表于 2021-2-28 06:30 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-27 21:31
沒(méi)明白啥您意思

給你一個(gè)簡(jiǎn)單的示例程序就很容易理解了


  1. //P0控制數(shù)碼管筆段,P2低4位通過(guò)級(jí)聯(lián)138控制數(shù)碼管位
  2. #include <reg52.h>

  3. unsigned char code table[]={//共陰數(shù)碼管段碼"0~f"
  4.                 0x3f,0x06,0x5b,0x4f,
  5.                 0x66,0x6d,0x7d,0x07,
  6.                 0x7f,0x6f,0x77,0x7c,
  7.                 0x39,0x5e,0x79,0x71};

  8. unsigned char i;        //計(jì)數(shù)變量

  9. void delay(unsigned int k)//ms延時(shí)
  10. {
  11.         unsigned int i,j;
  12.         for(i=k;i>0;i--)
  13.                 for(j=110;j>0;j--);
  14. }

  15. void main()
  16. {       
  17.         while(1)
  18.         {
  19.                 P0=0x00;                //數(shù)碼管消隱
  20.                 P2&=0xf0;        //數(shù)碼管位碼清0,不影響P2高4位狀態(tài)
  21.                 P2|=i;                //賦值位碼,不影響P2高4位狀態(tài)
  22.                 P0=table[i];//賦值段碼,i=0~15
  23.                 i=++i%16;        //0~15循環(huán)計(jì)數(shù)
  24.                 delay(1);        //延時(shí)1ms,控制數(shù)碼管動(dòng)態(tài)顯示速度
  25.         }
  26. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

10#
ID:232366 發(fā)表于 2021-2-27 23:34 來(lái)自觸屏版 | 只看該作者
hefq 發(fā)表于 2021-2-27 22:36
把s4也當(dāng)作數(shù)據(jù)

我先去看看資料去先
回復(fù)

使用道具 舉報(bào)

9#
ID:232366 發(fā)表于 2021-2-27 23:33 來(lái)自觸屏版 | 只看該作者
hefq 發(fā)表于 2021-2-27 22:38
前面加一片,可以級(jí)聯(lián)更多,理論上可以無(wú)限級(jí)聯(lián)

兩個(gè)都沒(méi)弄明白重新的控制無(wú)限級(jí)聯(lián)更加是一片空白只是對(duì)我個(gè)人說(shuō)尷尬
回復(fù)

使用道具 舉報(bào)

8#
ID:605142 發(fā)表于 2021-2-27 22:38 | 只看該作者

前面加一片,可以級(jí)聯(lián)更多,理論上可以無(wú)限級(jí)聯(lián)
回復(fù)

使用道具 舉報(bào)

7#
ID:605142 發(fā)表于 2021-2-27 22:36 | 只看該作者
把s4也當(dāng)作數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

6#
ID:232366 發(fā)表于 2021-2-27 21:55 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-2-27 21:40
兩個(gè)138譯碼器 組合起來(lái) 就可以當(dāng)作一個(gè) 74HC154譯碼器了  祁緒電子

我始終沒(méi)弄明白應(yīng)該在哪里來(lái)切換它  當(dāng)?shù)谝淮蔚谝粋€(gè)138循環(huán)完到Q7之后  切換到第二個(gè)138來(lái)S循環(huán)
前面敲很多次代碼就是沒(méi)實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

5#
ID:390416 發(fā)表于 2021-2-27 21:40 | 只看該作者
兩個(gè)138譯碼器 組合起來(lái) 就可以當(dāng)作一個(gè) 74HC154譯碼器了  祁緒電子
回復(fù)

使用道具 舉報(bào)

地板
ID:390416 發(fā)表于 2021-2-27 21:36 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-27 21:31
沒(méi)明白啥您意思

把四個(gè)IO口當(dāng)作一起的就行了  程序里面只控制了8行 所以只有S1S2S3
   
回復(fù)

使用道具 舉報(bào)

板凳
ID:232366 發(fā)表于 2021-2-27 21:31 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-2-27 21:24
你這個(gè)很簡(jiǎn)單  把 S1 S2 S3 S4 當(dāng)作一個(gè)字節(jié)的低4位 就行了
取值范圍就是
0   0   0   0  0   0   0   0 ...

沒(méi)明白啥您意思
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-2-27 21:24 | 只看該作者
你這個(gè)很簡(jiǎn)單  把 S1 S2 S3 S4 當(dāng)作一個(gè)字節(jié)的低4位 就行了
取值范圍就是
0   0   0   0  0   0   0   0=0
0   0   0   0  S4 S3 S2 S1=X
0   0   0   0  1   1   1   1=15
這樣就可以控制16行了  
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表