跳到主要內容

學生專題展示 / 8x8點矩陣

描述: 9abz85.png8x8單色LED點矩陣

專題目標:

    本專題的目標是要設計製作一個有趣的LED點矩陣,基本上,這就是廣告看板,LED點矩陣變化很多,可由自己設計圖案和閃亮形式,其設計重點包括三個部分:第一部分「零件設計」:本電路採用89S51晶片和8X8單色LED點矩陣。第二部分「電路板設計與製作」:採用麵包板和洞洞板單面設計。第三部分「程式設計」:LED點矩陣採掃描方式驅動。為了達到這個目標,將分為硬體、軟體與整合三部,如下說明:

 

一、 硬體部分:本電路零件多佑採用洞洞板、裸銅線單面設計,因此電路板佈線設計難度不低。

 

二、 軟體部分:在此將利用Keil C設計控制程式,因而控制程式主要為掃描功能,將陣列中的資料依序輸出。LED點矩陣的變化,全視陣列內的資料而定,只要改變陣列裡的資料,級可改變LED點矩陣的圖案便話;所以,顯示資料的設計與編碼,也是在此的重點工作,另外,輸出裝置必須備和硬體設計。

 

三、 整合部分:利用89S51線上燒錄實驗板及其驅動程式,將我們所設計的程式燒錄到89S51晶片上。當然,也可以使用其他89S51燒錄設備來燒錄程式,在依零件表準備零件,然後將零件裝置到電路板上,並銲接妥當。最後將完成燒錄的晶片,置入我們所設計製作的電路板,即可將電源接上該電路板,再觀察電路中的LED點矩陣變化,是否符合我們的規劃。

電路圖:

方塊圖

電路圖

程式:

程式內容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

/* mydisp.h – 8x8 單色LED矩陣燈函數 輸出埠 */

#define OUTP     P2

#define SCANP    P0

#define COUNT   11

Unsigned char code disp[8*COUNT]=

{ 0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00,

 0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00,

 0x00, 0x42, 0x86, 0x8A, 0x92, 0x62, 0x00, 0x00,

 0x00, 0x84, 0x82, 0xA2, 0xD2, 0x8C, 0x00, 0x00,

 0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00,

 0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00,

 0x00, 0x3C, 0x52, 0x92, 0x92, 0x0C, 0x00, 0x00,

 0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00,

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

0x00, 0x60, 0x92, 0x92, 0x94, 0x78, 0x00, 0x00,

 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };

void delay1ms(int t)

{   int  i,j;

    for (i=0;i

       for (j=0;j<120;j++);

}

void display(int base,int t,int repeat,int func,int row)

{  int i,col;       

   unsigned char sean;

   for (i=0;i

   {  scan=0x01;

      For (col=0;col<8;col++)

    {  OUTP=0x00;

          SCANP=~scan;

          switch(func)

          {   case0: OUTP = 0x00; break;

              case1: OUTP = disp[8*base+col]; break;

              case2: OUTP = ~disp[8*base+col]; break;

              case3: OUTP = disp[base+col]; break;

              case4: OUTP = disp[8*base+col] << row ; break;

              case5: OUTP = disp[8*base+col] >> row ; break;

              case6: OUTP = disp[8*base+col] << row

| disp[8*base+col] >> (8-row); break;

              case7: OUTP = disp[8*base+col] >> row

| disp[8*base+col] << (8-row); break;

              case8: OUTP = ((disp[8*base+col] & 0xF0) << row)

                         |((disp[8*base+col] & 0xF0) >> row);

                               break;

          }

         delay1ms(t);

         scan<<=1;

      }

   }

}

 

 

時間類別單位標題發佈點閱
跳至網頁頂部