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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7127|回復: 37
收起左側

38譯碼器兩個級聯單片機程序求分析

[復制鏈接]
ID:232366 發表于 2021-2-27 19:18 | 顯示全部樓層 |閱讀模式
關于兩個譯碼器級聯   切換是沒問題了可是切換的那個端口S4不知道在哪里控制它怎么切換有一個接線圖

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

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


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);

}

138譯碼器的級聯

138譯碼器的級聯
回復

使用道具 舉報

ID:390416 發表于 2021-2-27 21:24 | 顯示全部樓層
你這個很簡單  把 S1 S2 S3 S4 當作一個字節的低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行了  
回復

使用道具 舉報

ID:232366 發表于 2021-2-27 21:31 | 顯示全部樓層
人人學會單片機 發表于 2021-2-27 21:24
你這個很簡單  把 S1 S2 S3 S4 當作一個字節的低4位 就行了
取值范圍就是
0   0   0   0  0   0   0   0 ...

沒明白啥您意思
回復

使用道具 舉報

ID:390416 發表于 2021-2-27 21:36 | 顯示全部樓層

把四個IO口當作一起的就行了  程序里面只控制了8行 所以只有S1S2S3
   
回復

使用道具 舉報

ID:390416 發表于 2021-2-27 21:40 | 顯示全部樓層
兩個138譯碼器 組合起來 就可以當作一個 74HC154譯碼器了  祁緒電子
回復

使用道具 舉報

ID:232366 發表于 2021-2-27 21:55 | 顯示全部樓層
人人學會單片機 發表于 2021-2-27 21:40
兩個138譯碼器 組合起來 就可以當作一個 74HC154譯碼器了  祁緒電子

我始終沒弄明白應該在哪里來切換它  當第一次第一個138循環完到Q7之后  切換到第二個138來S循環
前面敲很多次代碼就是沒實現
回復

使用道具 舉報

ID:605142 發表于 2021-2-27 22:36 | 顯示全部樓層
GGG.gif 把s4也當作數據
回復

使用道具 舉報

ID:605142 發表于 2021-2-27 22:38 | 顯示全部樓層
GGG.gif
前面加一片,可以級聯更多,理論上可以無限級聯
回復

使用道具 舉報

ID:232366 發表于 2021-2-27 23:33 來自觸屏版 | 顯示全部樓層
hefq 發表于 2021-2-27 22:38
前面加一片,可以級聯更多,理論上可以無限級聯

兩個都沒弄明白重新的控制無限級聯更加是一片空白只是對我個人說尷尬
回復

使用道具 舉報

ID:232366 發表于 2021-2-27 23:34 來自觸屏版 | 顯示全部樓層
hefq 發表于 2021-2-27 22:36
把s4也當作數據

我先去看看資料去先
回復

使用道具 舉報

ID:213173 發表于 2021-2-28 06:30 | 顯示全部樓層

給你一個簡單的示例程序就很容易理解了
無標題.jpg

  1. //P0控制數碼管筆段,P2低4位通過級聯138控制數碼管位
  2. #include <reg52.h>

  3. unsigned char code table[]={//共陰數碼管段碼"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;        //計數變量

  9. void delay(unsigned int k)//ms延時
  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;                //數碼管消隱
  20.                 P2&=0xf0;        //數碼管位碼清0,不影響P2高4位狀態
  21.                 P2|=i;                //賦值位碼,不影響P2高4位狀態
  22.                 P0=table[i];//賦值段碼,i=0~15
  23.                 i=++i%16;        //0~15循環計數
  24.                 delay(1);        //延時1ms,控制數碼管動態顯示速度
  25.         }
  26. }
復制代碼



回復

使用道具 舉報

ID:97554 發表于 2021-2-28 08:45 | 顯示全部樓層
SHANWAZI 發表于 2021-2-27 23:34
我先去看看資料去先

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

使用道具 舉報

ID:232366 發表于 2021-2-28 11:11 | 顯示全部樓層
wulin 發表于 2021-2-28 06:30
給你一個簡單的示例程序就很容易理解了

無奈用了個笨辦法
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);
    }
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 11:12 | 顯示全部樓層
wulin 發表于 2021-2-28 06:30
給你一個簡單的示例程序就很容易理解了

會影響高四位的工作這樣一來用一個字節高八位也會受影響尷尬
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 11:14 | 顯示全部樓層
楊雪飛 發表于 2021-2-28 08:45
用4個IO口控制S1 S2 S3 S4,三個口的時候控制一片138,可以表示八種狀態,也就是2的3次方,四位就可以表 ...

原理我也認證分析過  就是在編程思路上卡殼無從下手最后用數組這種本辦法但是這樣的話就高八位和第八位都用到低四位工作時高八位也受影響
回復

使用道具 舉報

ID:822755 發表于 2021-2-28 11:37 | 顯示全部樓層
第一片138設計為低使能,第二片設計為高使能,這樣就可以一要IO控制兩個138了,另外三個IO做譯碼控制。看電路,先看看芯片手冊。
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 12:22 | 顯示全部樓層
KongQuan 發表于 2021-2-28 11:37
第一片138設計為低使能,第二片設計為高使能,這樣就可以一要IO控制兩個138了,另外三個IO做譯碼控制。看電 ...

分步使能其實可以達到效果但是實際編程的時候就實現不了
回復

使用道具 舉報

ID:66757 發表于 2021-2-28 13:13 來自觸屏版 | 顯示全部樓層
P2=Hc138改p2=i;就可以
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 13:56 | 顯示全部樓層
各位論壇師傅麻煩幫我看看這樣編程是否也可以用swithc語句來切換達到效果這樣的話不知道有什么缺點

138譯碼器級聯

138譯碼器級聯
回復

使用道具 舉報

ID:213173 發表于 2021-2-28 14:13 | 顯示全部樓層
SHANWAZI 發表于 2021-2-28 11:12
會影響高四位的工作這樣一來用一個字節高八位也會受影響尷尬

給你的示例已經非常清楚的說明字節高低位分開控制互不干擾,你還理解不了,無語了。
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 14:21 | 顯示全部樓層
wulin 發表于 2021-2-28 14:13
給你的示例已經非常清楚的說明字節高低位分開控制互不干擾,你還理解不了,無語了。

有點卡殼沒理解透徹    尷尬
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 15:08 來自觸屏版 | 顯示全部樓層
zmc5354 發表于 2021-2-28 13:13
P2=Hc138改p2=i;就可以

上面我是用了數組賦值改P2for循環依次取出數組給P2低四位或者是高四位一一對應38譯碼器的輸入和級聯使能
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 15:48 來自觸屏版 | 顯示全部樓層
wulin 發表于 2021-2-28 14:13
給你的示例已經非常清楚的說明字節高低位分開控制互不干擾,你還理解不了,無語了。

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

使用道具 舉報

ID:213173 發表于 2021-2-28 17:06 | 顯示全部樓層
SHANWAZI 發表于 2021-2-28 15:48
高位按位與置1了  高四位的還能使用sbit就行定義操作嗎?

當然可以另外使用sbit定義獨立操作。高位按位與f不等于置1,而是原來是1還是1,原來是0還是0。
P2&=0xf0;
1010 1010 原來狀態
1111 0000 按位與
-------------
1010 0000 結果高4位不變,低4位清0
回復

使用道具 舉報

ID:232366 發表于 2021-2-28 22:26 來自觸屏版 | 顯示全部樓層
wulin 發表于 2021-2-28 17:06
當然可以另外使用sbit定義獨立操作。高位按位與f不等于置1,而是原來是1還是1,原來是0還是0。
P2&=0xf0 ...

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

1111-0110按位與1111-0000
結果為1111-0000我又去查了查資料按位與是0與任何數都為0只有1與1才為1這樣的話就應了這個把高四位保持而低四位全部清理因為高四位數都為1與數高四也為1得出1與1結果還為1而低四位全部和0相與結果全部為零從而清零目的高四位不變   
如果我的點陣的行掃描使用38譯碼器級聯那么上面的s1s2s3s4對應為P2口低四位我定義一個數組uint8  ledBuff[]={0x0f,0xfd……};
利用for循環依次取出對應數據因為只用到低四位高八位沒有用  而在for循環進行時P2的高四位就會被賦值為1111  在上述中按位與操作
當第一次for循環獲取第一零個數組元素元素時
P2=P2&ledBuff[0];
那么是不是這樣  
1111-0000
1111-0000<按位與的值
結果為1111-0000
當for循環獲取第一個元素時
P2=P2&ledBuff[1];
是不是這樣
1111-1101
1111-0000<按位與的值
結果為1111-0000
那么這樣的話是不是每次只是保持高四位不變
而低四位每次都清零好像不是這個效果  低四位一直清零譯碼器豈不是一直在一個狀態
或者是這樣的
每次進入for
先對P2&=0xf0;先對低四位清零高四位不變
然后再給P2=ledBuff[1];賦一次新的值
這里發送段碼>忽略
這里延時>忽略
退出進入下一個循環


如果再使用sbit  LED=P2^7;
主函數中LED=0;會受控嗎?



不知道我這樣理解的思路對不對有問題還請指正初學者嘛 得多舉一反三(抱拳)







回復

使用道具 舉報

ID:232366 發表于 2021-2-28 22:27 來自觸屏版 | 顯示全部樓層
wulin 發表于 2021-2-28 17:06
當然可以另外使用sbit定義獨立操作。高位按位與f不等于置1,而是原來是1還是1,原來是0還是0。
P2&=0xf0 ...

不好意思回復晚了
回復

使用道具 舉報

ID:213173 發表于 2021-3-1 08:24 | 顯示全部樓層
SHANWAZI 發表于 2021-2-28 22:26
那么是不是可以這樣理解呢比如p2口原本的數據

1111-0110按位與1111-0000

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

使用道具 舉報

ID:232366 發表于 2021-3-1 10:13 | 顯示全部樓層
wulin 發表于 2021-3-1 08:24
這種控制方式低4位重新賦值前必須先清0,否則要出錯
        uint8 i;
        for(i=0;i

非常感謝您耐心回復

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

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

使用道具 舉報

ID:213173 發表于 2021-3-1 10:29 | 顯示全部樓層
SHANWAZI 發表于 2021-3-1 10:13
非常感謝您耐心回復

static uint8 i=0;

相同的功能可以用不同的代碼實現,只要遵循簡潔、高效、易讀的原則,可任意發揮。貌似你這程序是用兩個138和兩個595驅動16*16點陣。如果采用上述方法只需要7個I/O口就能完成。
回復

使用道具 舉報

ID:232366 發表于 2021-3-1 10:37 | 顯示全部樓層
是的  138 四個  595三個    太感謝提供思路我已經弄明白了對IO口與和或保持不變和改變后不影響其他的IO空的編程方法了 前面是絞盡腦汁怎么想都沒想明白小弟無以回報
回復

使用道具 舉報

ID:232366 發表于 2021-3-1 10:38 | 顯示全部樓層
我用38譯碼器進行列掃描  595送數據的
回復

使用道具 舉報

ID:390416 發表于 2021-3-1 10:42 | 顯示全部樓層
都說了 先去研究一下 74HC154的芯片
回復

使用道具 舉報

ID:232366 發表于 2021-3-1 17:08 來自觸屏版 | 顯示全部樓層
人人學會單片機 發表于 2021-3-1 10:42
都說了 先去研究一下 74HC154的芯片

看過了里面有兩個138貌似也一樣可以級聯 我是重在學習硬件的的編程不是為了方便154確實是方便編程我是想多了解一些和多學習一下
回復

使用道具 舉報

ID:232366 發表于 2021-3-1 17:10 來自觸屏版 | 顯示全部樓層
wulin 發表于 2021-3-1 10:29
相同的功能可以用不同的代碼實現,只要遵循簡潔、高效、易讀的原則,可任意發揮。貌似你這程序是用兩個13 ...

是的  138 四個  595三個    太感謝提供思路我已經弄明白了對IO口與和或保持不變和改變后不影響其他的IO空的編程方法了 前面是絞盡腦汁怎么想都沒想明白小弟無以回報
回復

使用道具 舉報

ID:390416 發表于 2021-3-1 17:28 | 顯示全部樓層
SHANWAZI 發表于 2021-3-1 17:08
看過了里面有兩個138貌似也一樣可以級聯 我是重在學習硬件的的編程不是為了方便154確實是方便編程我是想 ...

兩個138級聯 就等于一個154 所以叫你先去研究154怎么編程
回復

使用道具 舉報

ID:232366 發表于 2021-3-2 12:40 | 顯示全部樓層
人人學會單片機 發表于 2021-3-1 17:28
兩個138級聯 就等于一個154 所以叫你先去研究154怎么編程

哦哦明白了感謝提出建議
回復

使用道具 舉報

ID:232366 發表于 2021-3-3 18:48 來自觸屏版 | 顯示全部樓層
人人學會單片機 發表于 2021-2-27 21:24
你這個很簡單  把 S1 S2 S3 S4 當作一個字節的低4位 就行了
取值范圍就是
0   0   0   0  0   0   0   0 ...

我現在明白您這幾行數字什么意思了  再次感謝您提供思路  小弟感激不盡
回復

使用道具 舉報

ID:232366 發表于 2021-3-3 22:25 來自觸屏版 | 顯示全部樓層
帖子沉的好快
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人一区二区三区在线观看 | 精品福利在线 | 国产精品www | 青青草视频网站 | 久久久久久一区 | 中文字幕久久久 | 日韩精品在线看 | 国产日韩精品在线 | 99精品网| 久久久一 | 四虎影院在线观看av | 欧美不卡一区二区 | 国产精品成人国产乱 | 久久中文视频 | 国产一区二区不卡 | 国产一区免费视频 | 在线观看视频91 | 国产精品资源在线 | 欧美黑人狂野猛交老妇 | 欧美在线观看黄色 | 中文字幕在线观看日韩 | 99精品欧美一区二区三区综合在线 | 狠狠干狠狠插 | 男女爱爱福利视频 | 精品亚洲一区二区三区 | 国产精品一区网站 | а天堂中文最新一区二区三区 | 成年人网站国产 | 欧美一级视频免费看 | 91电影在线 | 精品国产免费一区二区三区演员表 | 久久精品| 亚洲在线一区二区 | 久久伊人青青草 | 91色在线 | 日韩欧美国产一区二区三区 | 一级片av| 在线观看免费高清av | 国产精品99久久久久久久vr | 久草色播| 亚洲v日韩v综合v精品v |