欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機驅動8*16點陣遇到的問題 [打印本頁]

作者: javastory    時間: 2021-5-2 16:19
標題: 單片機驅動8*16點陣遇到的問題
我是初學者,現在遇到一個問題請教。
點陣是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);
                }


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


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



謝謝!

作者: xianfajushi    時間: 2021-5-2 17:10
可參https://blog.csdn.net/xianfajushi/article/details/106965367
作者: gongnn    時間: 2021-5-2 18:54
8421BCD編碼
作者: 花心的劉備    時間: 2021-5-2 19:43
你的i的值應該是左移吧
作者: javastory    時間: 2021-5-2 22:50
xianfajushi 發表于 2021-5-2 17:10
可參https://blog.csdn.net/xianfajushi/article/details/106965367

謝謝回復,不過你發的文章是VIP的,我看不到,能否幫忙把內容貼一下?謝謝!
作者: javastory    時間: 2021-5-2 23:04
花心的劉備 發表于 2021-5-2 19:43
你的i的值應該是左移吧

是的,應該是左移,從程序上我知道有問題,但是在proteus里視覺上能實現我的效果,所以沒有深究。改成左移后所有點會全部亮,而不是逐行亮。
作者: javastory    時間: 2021-5-3 09:29
另外我要說一點的是,P3^4--P3^7接的是74ls164的Data和CLK,用P3=0XFF整體賦值會有問題,所以才問如何給P3的幾個端口用字模的數據賦值。
作者: xianfajushi    時間: 2021-5-6 08:25
其實就是回復本論壇問題的,不過貼主認為就那么點代碼就可以?http://m.raoushi.com/bbs/dpj-191849-1.html
作者: javastory    時間: 2021-5-7 10:30
本帖最后由 javastory 于 2021-5-7 10:39 編輯
xianfajushi 發表于 2021-5-6 08:25
其實就是回復本論壇問題的,不過貼主認為就那么點代碼就可以?http://m.raoushi.com/bbs/dpj-191849-1.html

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

數組部分我不寫了,主程序部分如下:

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

第一次循環:

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的數碼已經復制完,zt=1;
    if(zt>22){zt=0;++wei;} //如果zt>22,則wei=1;
    if(wei>17) wei=0;      //如果wei>17,則整個數組取值完,wei歸零;
    Ys=474;
    }
}


第二次循環:

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的數碼已經復制完,zt=2;
    if(zt>22){zt=0;++wei;} //如果zt>22,則wei=2;
    if(wei>17) wei=0;      //如果wei>17,則整個數組取值完,wei歸零;
    Ys=474;
    }
}

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

地址:http://m.raoushi.com/bbs/dpj-206464-1.html

作者: xianfajushi    時間: 2021-5-7 10:41
^_^代數應該學過,把每循環時的值代進去讀,試看,不可能是始終為0.
作者: javastory    時間: 2021-5-7 10:49
xianfajushi 發表于 2021-5-7 10:41
^_^代數應該學過,把每循環時的值代進去讀,試看,不可能是始終為0.

Xd看漏了,那么zt值的意義是什么?
作者: xianfajushi    時間: 2021-5-7 11:07
舉一反三,還是代數問題,把所有值都代進去讀
作者: glinfei    時間: 2021-5-7 11:42
你看看154的手冊,它一次只能操作一個腳,所以取的字模直接給它沒用的,你這么弄組不了字。
作者: javastory    時間: 2021-5-7 11:46
xianfajushi 發表于 2021-5-7 11:07
舉一反三,還是代數問題,把所有值都代進去讀

能解釋一下嗎,還是沒有想明白。
作者: javastory    時間: 2021-5-7 11:48
glinfei 發表于 2021-5-7 11:42
你看看154的手冊,它一次只能操作一個腳,所以取的字模直接給它沒用的,你這么弄組不了字。

是的,這是原來的思路,是錯的,現在的思路重新發了個貼:http://m.raoushi.com/bbs/dpj-206464-1.html

我在這貼里貼了代碼和圖,麻煩幫著看看,程序哪里錯了,謝謝!
作者: xianfajushi    時間: 2021-5-7 11:57
138同154就差引腳多一個,道理是一樣的,驅動也一樣,有點小差異而已.


作者: glinfei    時間: 2021-5-7 15:00
javastory 發表于 2021-5-7 10:49
Xd看漏了,那么zt值的意義是什么?

你把zt的判斷改成50也能用啊,不過相當于延時而已。
作者: glinfei    時間: 2021-5-7 15:11
javastory 發表于 2021-5-7 11:48
是的,這是原來的思路,是錯的,現在的思路重新發了個貼:http://m.raoushi.com/bbs/dpj-206464-1.html
...

你是不是師傅要求,行用74ls164,列用74hc154,否則沒誰這么折騰啊,你的帖子我看不到,提醒你自模的數據,你需要按位來用,而且為了關燈每列要搞兩次,中間要延時。如果不是師傅要求,就用max7219啊,兩根線搞掂。
作者: xianfajushi    時間: 2021-5-7 16:29
glinfei 發表于 2021-5-7 15:00
你把zt的判斷改成50也能用啊,不過相當于延時而已。

^_^從代碼也能猜到,切換嘛.Xd為內循環zt為外循環,修改外循環值修改切換時間。
作者: xianfajushi    時間: 2021-5-7 16:40
這是驅動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. }
復制代碼

作者: xianfajushi    時間: 2021-5-7 16:44
138的例子也是本論壇的http://m.raoushi.com/bbs/dpj-194791-1.html
作者: xianfajushi    時間: 2021-5-7 16:48
假如說把154一腳不用就同138一樣了,154的4腳都用就能驅動多一塊點陣,8與16的區別。
作者: xianfajushi    時間: 2021-5-7 16:52
當然138和154只能用于選行或列,不能作為數據傳輸。
作者: javastory    時間: 2021-5-9 20:12
glinfei 發表于 2021-5-7 15:11
你是不是師傅要求,行用74ls164,列用74hc154,否則沒誰這么折騰啊,你的帖子我看不到,提醒你自模的數據 ...

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

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

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




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1