找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2746|回復: 24
收起左側(cè)

單片機驅(qū)動8*16點陣遇到的問題

[復制鏈接]
ID:908996 發(fā)表于 2021-5-2 16:19 | 顯示全部樓層 |閱讀模式
我是初學者,現(xiàn)在遇到一個問題請教。
點陣是2塊8*8共陽,行用74ls164,列用74hc154
每次給一行通電,列選是否亮。
行的代碼如下:
                i =0x01;           //二進制是00000001
                for(row=0;row<8;row++){
                       
                        COW_1641 = i;
                        COW_1642 = i;
                        CLK_1641 = 0;
                        CLK_1642 = 0;
                       
                        CLK_1641 = 1;
                        CLK_1642 = 1;
                        i>>=1;
                        delay(500);
                }


這是軟件提取的字模數(shù)組:
unsigned char code image[][16] = {
                {0xFF,0xFF,0xF7,0xFF,0xF3,0xFF,0x01,0xFF,0x01,0xFF,0xF3,0xFF,0xF7,0xFF,0xFF,0xFF}}


現(xiàn)在遇到的問題是74hc154的輸入端ABCD分別接到單片機P3^0--P3^3上,如何用這個數(shù)組給這四個端口賦值,使點陣上的各列能根據(jù)需要亮起來?或者說如何給這四個端口賦值能讓點陣各列根據(jù)需要亮起來?



謝謝!
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-2 17:10 | 顯示全部樓層
回復

使用道具 舉報

ID:220661 發(fā)表于 2021-5-2 18:54 | 顯示全部樓層
8421BCD編碼
回復

使用道具 舉報

ID:684049 發(fā)表于 2021-5-2 19:43 | 顯示全部樓層
你的i的值應該是左移吧

評分

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

查看全部評分

回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-2 22:50 | 顯示全部樓層
xianfajushi 發(fā)表于 2021-5-2 17:10
可參https://blog.csdn.net/xianfajushi/article/details/106965367

謝謝回復,不過你發(fā)的文章是VIP的,我看不到,能否幫忙把內(nèi)容貼一下?謝謝!
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-2 23:04 | 顯示全部樓層
花心的劉備 發(fā)表于 2021-5-2 19:43
你的i的值應該是左移吧

是的,應該是左移,從程序上我知道有問題,但是在proteus里視覺上能實現(xiàn)我的效果,所以沒有深究。改成左移后所有點會全部亮,而不是逐行亮。
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-3 09:29 | 顯示全部樓層
另外我要說一點的是,P3^4--P3^7接的是74ls164的Data和CLK,用P3=0XFF整體賦值會有問題,所以才問如何給P3的幾個端口用字模的數(shù)據(jù)賦值。
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-6 08:25 | 顯示全部樓層
其實就是回復本論壇問題的,不過貼主認為就那么點代碼就可以?http://www.torrancerestoration.com/bbs/dpj-191849-1.html
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-7 10:30 | 顯示全部樓層
本帖最后由 javastory 于 2021-5-7 10:39 編輯
xianfajushi 發(fā)表于 2021-5-6 08:25
其實就是回復本論壇問題的,不過貼主認為就那么點代碼就可以?http://www.torrancerestoration.com/bbs/dpj-191849-1.html

我仔細看了一下代碼,做了兩個循環(huán),有個地方不明白,麻煩給解釋一下:

數(shù)組部分我不寫了,主程序部分如下:

unsigned char wei=0,Xd=0,Ws=0,zt=0;
unsigned int Ys=47474;

第一次循環(huán):

while(1){
if (!--Ys){                //Ys=47473
    P2=CHARCODE[wei][Xd]   //這里得到的值是0x00
    if(!(ww*=2)) ++ww;     //這里ww=1;
    P3=~ww;                //這里P3=1101;
    if(++Xd>7){Xd=0;++zt; //如果Xd>7,則一個8*8的數(shù)碼已經(jīng)復制完,zt=1;
    if(zt>22){zt=0;++wei;} //如果zt>22,則wei=1;
    if(wei>17) wei=0;      //如果wei>17,則整個數(shù)組取值完,wei歸零;
    Ys=474;
    }
}


第二次循環(huán):

while(1){
if (!--Ys){                //Ys=473
    P2=CHARCODE[wei][Xd]   //這里得到的值是0x00
    if(!(ww*=2)) ++ww;     //這里ww=3;
    P3=~ww;                //這里P3=1100;
    if(++Xd>7){Xd=0;++zt; //如果Xd>7,則一個8*8的數(shù)碼已經(jīng)復制完,zt=2;
    if(zt>22){zt=0;++wei;} //如果zt>22,則wei=2;
    if(wei>17) wei=0;      //如果wei>17,則整個數(shù)組取值完,wei歸零;
    Ys=474;
    }
}

我不明白的地方如下:
1、Xd始終為0,那其他6個值如何賦值:
2、zt和Ys這兩個值作用是什么?
另外就是我發(fā)現(xiàn)原來對掃描的理解是錯誤的,重新發(fā)了一個貼,有我發(fā)的仿真的圖,現(xiàn)在的設(shè)計思路是,154管列,164管行,一次給164復制,然后讓154輪流導通,但是仍舊有問題,具體的描述和代碼在新貼里,麻煩幫著看看是什么問題,謝謝!

地址:http://www.torrancerestoration.com/bbs/dpj-206464-1.html
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 10:41 | 顯示全部樓層
^_^代數(shù)應該學過,把每循環(huán)時的值代進去讀,試看,不可能是始終為0.
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-7 10:49 | 顯示全部樓層
xianfajushi 發(fā)表于 2021-5-7 10:41
^_^代數(shù)應該學過,把每循環(huán)時的值代進去讀,試看,不可能是始終為0.

Xd看漏了,那么zt值的意義是什么?
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 11:07 | 顯示全部樓層
舉一反三,還是代數(shù)問題,把所有值都代進去讀
回復

使用道具 舉報

ID:844772 發(fā)表于 2021-5-7 11:42 | 顯示全部樓層
你看看154的手冊,它一次只能操作一個腳,所以取的字模直接給它沒用的,你這么弄組不了字。
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-7 11:46 | 顯示全部樓層
xianfajushi 發(fā)表于 2021-5-7 11:07
舉一反三,還是代數(shù)問題,把所有值都代進去讀

能解釋一下嗎,還是沒有想明白。
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-7 11:48 | 顯示全部樓層
glinfei 發(fā)表于 2021-5-7 11:42
你看看154的手冊,它一次只能操作一個腳,所以取的字模直接給它沒用的,你這么弄組不了字。

是的,這是原來的思路,是錯的,現(xiàn)在的思路重新發(fā)了個貼:http://www.torrancerestoration.com/bbs/dpj-206464-1.html

我在這貼里貼了代碼和圖,麻煩幫著看看,程序哪里錯了,謝謝!
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 11:57 | 顯示全部樓層
138同154就差引腳多一個,道理是一樣的,驅(qū)動也一樣,有點小差異而已.
1.gif
回復

使用道具 舉報

ID:844772 發(fā)表于 2021-5-7 15:00 | 顯示全部樓層
javastory 發(fā)表于 2021-5-7 10:49
Xd看漏了,那么zt值的意義是什么?

你把zt的判斷改成50也能用啊,不過相當于延時而已。
回復

使用道具 舉報

ID:844772 發(fā)表于 2021-5-7 15:11 | 顯示全部樓層
javastory 發(fā)表于 2021-5-7 11:48
是的,這是原來的思路,是錯的,現(xiàn)在的思路重新發(fā)了個貼:http://www.torrancerestoration.com/bbs/dpj-206464-1.html
...

你是不是師傅要求,行用74ls164,列用74hc154,否則沒誰這么折騰啊,你的帖子我看不到,提醒你自模的數(shù)據(jù),你需要按位來用,而且為了關(guān)燈每列要搞兩次,中間要延時。如果不是師傅要求,就用max7219啊,兩根線搞掂。
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 16:29 | 顯示全部樓層
glinfei 發(fā)表于 2021-5-7 15:00
你把zt的判斷改成50也能用啊,不過相當于延時而已。

^_^從代碼也能猜到,切換嘛.Xd為內(nèi)循環(huán)zt為外循環(huán),修改外循環(huán)值修改切換時間。
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 16:40 | 顯示全部樓層
這是驅(qū)動138的代碼,就是上圖運行的代碼,看我的代碼足以鍛煉你的邏輯分析。
  1. #include "reg52.h"
  2. unsigned char code DuLiAnJian[]={1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127};
  3. bit k = 0;
  4. unsigned char code CHARCODE[32][8]={
  5. {0xFD,0xFD,0x0D,0xED,0xED,0xED,0x0D,0xFD},{0x0D,0xED,0xED,0xED,0x0D,0xFD,0xFD,0xFF},
  6. {0xFF,0xFF,0x00,0xFE,0xB9,0x7F,0x80,0xFF},{0x00,0xFE,0xB9,0x7F,0x80,0xFF,0xFF,0xFF},
  7. {0xEF,0xEF,0x0F,0xE0,0xEF,0x0F,0xFF,0x01},{0xDD,0xDD,0xDD,0xDD,0x01,0xFF,0xFF,0xFF},
  8. {0xBF,0xDD,0xEA,0xF7,0xE9,0x9E,0xBF,0x80},{0xBD,0xBD,0xBD,0xBD,0x80,0xBF,0xBF,0xFF},
  9. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
  10. {0xFF,0xFF,0xA7,0xC7,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
  11. {0x7F,0xBF,0xCF,0xE1,0xEF,0xEF,0xEF,0x00},{0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF},
  12. {0xBF,0xBF,0xBD,0xBD,0xBD,0xBD,0xBD,0x80},{0xBD,0xBD,0xBD,0xBD,0xBD,0xBF,0xBF,0xFF},
  13. {0xFF,0xFF,0xFF,0x01,0x7D,0x7D,0x7D,0x7D},{0x7D,0x7D,0x7D,0x01,0xFF,0xFF,0xFF,0xFF},
  14. {0xFF,0xFF,0xFF,0x00,0xBF,0xBF,0xBF,0xBF},{0xBF,0xBF,0xBF,0x00,0xFF,0xFF,0xFF,0xFF},
  15. {0xFF,0x1F,0xFF,0x00,0xEF,0xDF,0xF7,0xF7},{0xF7,0x00,0xF7,0xF7,0x07,0xFF,0xFF,0xFF},
  16. {0xFE,0xFF,0xFF,0x00,0xFF,0x7E,0xBE,0xCE},{0xF2,0xFC,0xF2,0xCE,0xBE,0x7E,0x7E,0xFF},
  17. {0xFF,0xFF,0x1F,0x63,0x7B,0x7B,0x7B,0x0B},{0x7D,0x7D,0x7C,0x7D,0x7F,0x7F,0xFF,0xFF},
  18. {0xFF,0xDF,0xEF,0xF7,0xF9,0xBF,0x7F,0x80},{0xFF,0xFF,0xFD,0xFB,0xF7,0xCF,0xFF,0xFF},
  19. {0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},{0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},
  20. {0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},{0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7}
  21. };
  22. void main()
  23. {
  24.         unsigned char wei=0,Xd=0,Sw=0,By=8;
  25.         unsigned int Ys=47474,Lx=0;
  26.         P0=P1=P2=P3=0;
  27.         while(1)
  28.         {
  29.                 if(!--Ys)
  30.                 {
  31.                         P2=P3=255;
  32.                         if(k){P0=7;Sw=wei+2;P1=DuLiAnJian[Xd];}else{P1=0;Sw=wei;P0=By;if(++By>=16)By=8;}//后前DuLiAnJian[Xd]
  33.                         P3=CHARCODE[Sw+1][Xd];//下
  34.                         P2=CHARCODE[Sw][Xd];//上
  35.                         if(++Xd>=8){Xd=0;k=~k;++Lx;}
  36.                         if(Lx>74){wei+=4;Lx=0;}
  37.                         if(wei>=32)wei=0;
  38.                         Ys=247;
  39.                 }
  40.         }
  41. }
復制代碼
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 16:44 | 顯示全部樓層
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 16:48 | 顯示全部樓層
假如說把154一腳不用就同138一樣了,154的4腳都用就能驅(qū)動多一塊點陣,8與16的區(qū)別。
回復

使用道具 舉報

ID:332444 發(fā)表于 2021-5-7 16:52 | 顯示全部樓層
當然138和154只能用于選行或列,不能作為數(shù)據(jù)傳輸。
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-9 20:12 | 顯示全部樓層
glinfei 發(fā)表于 2021-5-7 15:11
你是不是師傅要求,行用74ls164,列用74hc154,否則沒誰這么折騰啊,你的帖子我看不到,提醒你自模的數(shù)據(jù) ...

首先謝謝你的回復,這個不是什么師傅要求,只是自己的愛好而已,并且是剛開始學習,所以很多錯誤。
選154和164是因為看論壇上的一個貼,(地址:http://www.torrancerestoration.com/bbs/dpj-149292-1.html,9樓的貼)因為是要8*16,所以就這樣選了。并且在發(fā)這貼的時候,從編程思路和硬件電路上有很多錯的地方,比如對行和列的掃描理解是錯誤的,看別人的程序能看懂,實際動手的時候就錯了。
在另外查了一些例子后,重新修改了電路和程序,但是仍舊有錯誤,我發(fā)了個新貼,地址:http://www.torrancerestoration.com/bbs/dpj-206586-1.html
麻煩幫著看看是哪里的問題。謝謝!
回復

使用道具 舉報

ID:908996 發(fā)表于 2021-5-9 20:22 | 顯示全部樓層
xianfajushi 發(fā)表于 2021-5-7 16:52
當然138和154只能用于選行或列,不能作為數(shù)據(jù)傳輸。

這個結(jié)論是我錯誤了很多次以后才知道的,查的資料里都是0--15互斥輸出,只輸出一個低電平。當時我的想法就是行共陽點陣,一行通電,列掃描就是154選擇輸出低電平,就可以實現(xiàn)這一行選擇的led亮。
現(xiàn)在知道錯在哪里了,另外就是我遇到新問題了,地址:http://www.torrancerestoration.com/bbs/dpj-206586-1.html

麻煩幫著看看是哪里出問題了,謝謝!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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