關於led顯示的一點經驗

admin @ 2014-03-26 , reply:0

概述
這段時間有不少朋友在作led顯示,問了我不少問題,一一回答總是找不到要點在此我把我幾年來作led的一點經驗總結以下,作為對大家回答,希望對大家有點啟發,也作為拋磚引玉吧,大蝦們多談談自己的寶貴經驗!一……

這段時間有不少朋友在作led顯示,問了我不少問題,一一回答總是找不到要點
在此我把我幾年來作led的一點經驗總結以下,作為對大家回答,希望對大家有點啟發,也作為拋磚引玉吧,大蝦們多談談自己的寶貴經驗!

一: LED顯示器件的基礎
  LED發光器件一般常用的有2類,數碼管和點陣,
   1:數碼管
      a,數碼管常用的一般8字型,分為A B C D E F G P段,其中P位小數點
      b,數碼管常用的有10根管腳(單位),每段一根管腳,另外兩根管腳為公共端,2根是通的
      c,從尺寸上分的話種類很多,常用的有0.3 0.5 0.8 1.0 1.2 1.5 1.8 2.3 3.0 4.0 5.0 等等
      d,一般小於1.0的為單管芯,(1.0有單有雙),1.2~~1.5為雙管芯,1.8以上為3個以上的管芯,因而他們的供電電壓要求不同,一般每個關芯的壓降為2.1v左右
         我的經驗是0.8以下5v供電,1.0~2.3為12v,3.0以上更高
      e,數碼管分共陰和共陽兩種

    2:點陣
      a,點陣常用的為8*8,以前還有5*8(現在不大用了)
      b,點陣都是單管芯,分(行)共陰和(行)共陽,一般都用5v供電
      c,8*8點陣為16根管腳(單色,也有24根的,可能是作廢的雙色點陣或者為了能在同一種線路板上實現單色雙色都可用而設計的,也比較常見)
        8根行8根綠
        雙色為24根管腳,8根行,8根列紅,8根列綠,
     
二: 顯示基本原理
    分為靜態(只有數碼管能實現)和動態
   1:靜態的比較好實現,在此不多講了
  
   2:數碼管動態

    a,硬體連接
      數碼管一般為1/13能掃描,再高的話亮度損失比較大,
      在此假設為列為13列,行為16行,共陽管,每行數碼管的各段連在一起,每列數碼管的公共段連在一起
      列開關用tip127,他可以直接用154驅動,達林頓管5安培,注意127輸出不要加電阻
      行用595(164不建議)+2803或者2003+一個9013,在2003的輸出要加上限流電阻,一般為56~330歐姆(如果是<1.0的數碼管,可以直接用595加電阻驅動)

    b,軟體      
      採用89c51為cpu,存儲器可採用24c系列,或者28c系列,注意他們的寫入速度都不是很快,不過一般數碼管的輸入設備為鍵盤或遙控器,速度足夠了,還有24c系列的讀出速度也比較慢,我發現每次讀出的數據大概只有20以內才不會影響更新顯示
    顯示採用時鐘中斷1,中斷時間不能超過1.5ms,最好為1.2ms左右,可以在中斷服務程序中讀24c02,也可以在中斷的間隙中讀取,但必須保證能夠讀出所有的一列數據!讀出的數據放到一塊顯示區中,(在內存中定義一個數組buf[16]),在中斷子程序中把數據發送的595中即可,最好採用串口發送,編程最簡單.
   發送完畢后,關掉控制行的154,給595的RCLK(12腳)一個脈衝,把數據從移位寄存器傳輸到鎖存器,而後打開154並輸入列信號即可

    3: 點陣
       a,點陣一般採用1/16掃描,控制原理和數碼管差不多
       b,硬體: 行用154+tip127,列用595加電阻(0~56歐姆)直接驅動
       c,軟體
         方案比較多,見下面

三: 先說說信息的存儲       
      分為2種,
     1:一種為固化的漢字,漢字點陣信息存於27c256中,最多存1024個16*16點陣漢字,要修改只能重新寫27c256,優點是不丟失,一般我們為銀行做的都是這種,他很少修改顯示能容,而且以後每次修改可以收費<哈哈~~~),缺點是不靈活
     
     2: 另一種是可以用戶自己修改的,修改方式又分為2中,
         早期一般用鍵盤或者遙控器修改,那樣必須在主辦上固化有漢字字型檔,可用27c040固化ucdos的hzk16全形字型檔和asc16半形字型檔,用戶輸入區位嗎進行修改,用戶需要顯示的漢字以區位嗎的方式存到一片E2POM中,顯示的時候程序根據區位嗎讀取點陣信息送到屏上顯示,
          還有一種近年來常用的方式就是利用微機串口進行修改,這裡面還分為兩種
      A,控制板上沒有字型檔,微機發送的是顯示的點陣信息,控制板接受后把信息存到帶電池的RAM中(也可用E2PROM,但速度很慢),這種的缺點是掉電池的RAM不太可靠,常常丟失信息
      B,控制板上帶字型檔,微機發送漢字的機器嗎(內嗎)即可,其他同上

四: 顯示的控制   
    信息的發送可以有好多方式,根據採用器件的不同而不同,有的廠家採用374控制而不採用595,那樣的話直接寫一個外部埠即可,374級連方式,(如果用1排374的話在傳輸中必須關掉顯示,顯示字較多的話影響亮度,用2排374不必關掉顯示但增加硬體成本),目前用的較少了。595的很長見,發送可以用傳口,很簡單,也可以用別的口模擬傳口發送(因為傳口還有可能隨時接受微機的信號),也可以採用傳口復用(不過我不會,:)~~)
     我採用的是用374+165向595發送數據,硬體比較複雜,但是在以後的顯示花樣中很好用!特別是左右移位,爽極了!
    提示一下:最近用雙龍的90S8515發現很好,因為他還有一個SPI口,用來送595信號更爽!速度可到3M,(12M晶體),強烈建議大家有這種晶元(靠,也不到雙龍看到了會不會給點獎勵....)

五: 一些注意事項:
    1: 顯示時間,每行<1.5MS
    2: 根據經驗,89C51 12M晶體最大控制48個16*16點陣,再大的話可以提高晶體頻率和優化程序,(就是發送程序的時間最短)
    3: 在顯示的字比較多時,一定要注意發送子程序的代碼效率,因為發送是一個循環,所以循環體內的處理越快越好,大家現在大都用C51,更的注意,我可是吃過虧的!

大家看下面的例子:
if(hangno==0x10)hangno=0; //hangno為顯示的行序號
 for(i=0;i<32;i++)
    {
     PORT1=*(addr+hangno*0x600+i);//我的漢字信息是0~600為第一行信息
                                  //600~0c00為第二行信息...
     PORT2=0x0ff;
    }

每次發送32個位元組(16個字),程序編譯通過,沒有問題,可是當顯示64個漢字時(假設)顯示就不行了,後來改為 
     
if(hangno==0x10)hangno=0; //hangno為顯示的行序號
  w=hangno*0x600;
 for(i=0;i<128;i++)
    {
     PORT1=*(addr+w+i);//我的漢字信息是0~600為第一行信息
                                  //600~0c00為第二行信息...
     PORT2=0x0ff;
    }

就沒有問題了,大家自己看看,就知道原因了,對把?
寫了這麼多,想到那些到那,很不系統,不過好累呀,我下兩盤軍旗放鬆放鬆,大家多提提意見,這只是講的小屏的控制方法(<2m2),大屏的完全不同,有人感興趣的話以後再談.




[admin via 研發互助社區 ] 關於led顯示的一點經驗已經有3690次圍觀

http://cocdig.com/docs/show-post-44095.html