《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 其他 > 教程:基于51單片機(jī)的LED點(diǎn)陣屏顯示

教程:基于51單片機(jī)的LED點(diǎn)陣屏顯示

2023-01-31
來源:滑小稽筆記

  11.1 項(xiàng)目分析

  11.1.1 點(diǎn)陣簡(jiǎn)介

  LED點(diǎn)陣屏通過LED發(fā)光二極管組成,,以燈珠亮滅來顯示文字,、圖片、動(dòng)畫,、視頻等,,是各部分組件都模塊化的顯示器件,,通常由顯示模塊,、控制系統(tǒng)和電源系統(tǒng)組成,。 LED點(diǎn)陣屏制作簡(jiǎn)單,安裝方便,,被廣泛應(yīng)用于各種公共場(chǎng)合,,如汽車報(bào)站器、廣告屏以及公告牌等,。

  LED點(diǎn)陣的顯示原理很簡(jiǎn)單,,以8×8點(diǎn)陣為例,8×8點(diǎn)陣具有64個(gè)像素點(diǎn),,可以顯示數(shù)字和一些比較簡(jiǎn)單的漢字,,但是顯示漢字最好是用16×16以上的點(diǎn)陣,點(diǎn)陣的連接關(guān)系與矩陣鍵盤相似,,將每一行的LED正極接在一起并引出接線端子,,將每一列的LED負(fù)極接在一起并引出,這樣8×8的點(diǎn)陣就會(huì)有16個(gè)端口被引出,, 將行端口和列端口分別接在單片機(jī)的兩個(gè)端口上,,就可以控制點(diǎn)陣了。 點(diǎn)陣的顯示主要是利用掃描實(shí)現(xiàn)的,,可以掃描行也可以掃描列,,以行掃描為例,假設(shè)單片機(jī)在八行中任選一“行”產(chǎn)生高電平,,其余的“行”設(shè)為低電平,,那么此時(shí)對(duì)于“列”只需要在任意一列產(chǎn)生低電平就可以點(diǎn)亮這一行的任意一個(gè)或多個(gè)發(fā)光二極管,然后當(dāng)“行”不停地掃描,,超過人眼的反應(yīng)范圍時(shí),,就會(huì)顯示出對(duì)應(yīng)的畫面。 當(dāng)一個(gè)點(diǎn)陣以三個(gè)發(fā)光二極管(R,,G,,B)組成一個(gè)像素,且發(fā)光二極管的體積足夠小那就形成了彩色點(diǎn)陣,,這種點(diǎn)陣可以利用像素點(diǎn)的R,,G,,B三種顏色混合成任意的顏色,只要像素點(diǎn)足夠多,,那么就可以顯示彩色圖像,。

  11.1.2 8×8單色點(diǎn)陣結(jié)構(gòu)圖

273.JPG

  **11.2 **項(xiàng)目過程

  11.2.1 項(xiàng)目需求

  利用51單片機(jī)控制8*8點(diǎn)陣實(shí)現(xiàn)0~9的顯示。

  11.2.2 原理圖

272.JPG

  11.2.3 源代碼

  /*********************************************************************************************************

  頭    文    件    引    用

  *********************************************************************************************************/

  #include <reg51.h>                                            //導(dǎo)入51單片機(jī)頭文件

  #include <intrins.h>

  /*********************************************************************************************************

  數(shù)    據(jù)    類    型    定    義

  *********************************************************************************************************/

  #define u8 unsigned char                                        //定義無符號(hào)字符型數(shù)據(jù)(0~255)

  #define u16 unsigned int                                        //定義無符號(hào)整型數(shù)據(jù)(0~65535)

  u8 code TAB_L[] = { 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F } ;                  //掃描碼

  u8 code TAB_H[] = {

  0x00, 0x00, 0x3C, 0x42, 0x42, 0x3C, 0x00, 0x00,

  0x00, 0x00, 0x00, 0x44, 0x7E, 0x40, 0x00, 0x00,

  0x00, 0x00, 0x64, 0x52, 0x52, 0x4A, 0x44, 0x00,

  0x00, 0x00, 0x44, 0x92, 0x92, 0x6C, 0x00, 0x00,

  0x00, 0x18, 0x14, 0x12, 0x7E, 0x10, 0x00, 0x00,

  0x00, 0x00, 0x86, 0x8A, 0x8A, 0x72, 0x00, 0x00,

  0x00, 0x00, 0x00, 0x78, 0x94, 0x92, 0x62, 0x00,

  0x00, 0x00, 0x02, 0x02, 0xF2, 0x0A, 0x06, 0x00,

  0x00, 0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00,

  0x00, 0x00, 0x4C, 0x92, 0x92, 0x7C, 0x00, 0x00,

  } ;                                                    //數(shù)字碼

  u8 Picture_Num ;

  u8 TIM0_Count ;

  /********************************************************

  Name    :delay_ms

  Function  :毫秒級(jí)別延時(shí)函數(shù)

  Paramater  :

  ms:延時(shí)的ms數(shù)

  Return    :None

  ********************************************************/

  void delay_ms( u16 ms )

  {

  u8 i ;

  while( ms-- )

  for( i=0; i<110; i++ ) ;

  }

  /********************************************************

  Name    :Picture

  Function  :點(diǎn)陣掃描算法

  Paramater  :None

  Return    :None

  ********************************************************/

  void Picture( u8 num )

  {

  u8 i ;

  for( i=0 ; i<8 ; i++ )

  {

  P3 = TAB_L[ i ] ;                                        //每一次掃描都會(huì)加入圖片的 1/8

  P2 = TAB_H[ num*8+i ];                                      //取數(shù)字碼

  delay_ms( 1 ) ;

  }

  }

  /********************************************************

  Name    :TIM0_IRQHandler

  Function  :定時(shí)器中斷

  Paramater  :None

  Return    :None

  ********************************************************/

  void TIM0_IRQHandler() interrupt 1

  {

  TH0 = ( 65535-50000 )/256 ;

  TL0 = ( 65535-50000 )%256 ;

  TIM0_Count ++ ;

  if( TIM0_Count==20 )

  {

  Picture_Num ++ ;

  if( Picture_Num==10 )

  Picture_Num = 0 ;                                      //圖像切換上限

  TIM0_Count = 0 ;

  }

  }

  /*********************************************************************************************************

  主    函    數(shù)

  *********************************************************************************************************/

  void main()

  {

  IE = 0x82 ;                                              //開啟中斷與定時(shí)器中斷

  TMOD = 0x01 ;                                            //設(shè)定為16位定時(shí)器模式

  TH0 = ( 65535-50000 )/256 ;                                      //寫入定時(shí)器初值

  TL0 = ( 65535-50000 )%256 ;

  TR0 = 1 ;                                              //開啟定時(shí)器

  TIM0_Count = 0 ;

  Picture_Num = 0 ;

  while( 1 )

  {

  Picture( Picture_Num ) ;

  }

  }

  11.2.4 仿真截圖

271.JPG




更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

mmexport1621241704608.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。