日常連載6
LED點陣原理:
通常會由兩部分的控制端進行控制點陣點亮特定的區(qū)域,比如右圖中的每一行的LED陰極都連接在一起,引出8個端口,接在74HC595控制,用十六進制的0xXX進行控制每一行陰極的電平狀態(tài)。然后每一列的陽極也都引出一個端口,用P0口控制每一個端口的狀態(tài),然后來控制列的電平高低,兩者進行控制組合以控制整個區(qū)域的亮滅狀態(tài)。 通常都是以逐行或列掃描的方式進行控制,一個控制部分進行逐行或列掃描的次序,一個控制部分進行對應(yīng)的每一列中每一行的相應(yīng)點的亮滅狀態(tài)。 在進行掃描使用取模軟件獲取代碼時一定注意取模的方向和參數(shù)等的設(shè)置。
箭頭朝上滾動代碼示例: - /*————備注:———————*
- 74HC595控制行(二極管的陽極)
- P0控制列(二極管的陰極)
- *—————————————————*/
-
-
- //====頭文件定義===*
- #include<reg52.h>
- #include<intrins.h>
- //=================*
-
-
- //====宏定義=======*
- #define uchar unsigned char
- #define uint unsigned int
- //=================*
-
-
- //====引腳說明=====*
- sbit SRCLK=P3^6;//移位時鐘寄存器
- sbit LOAD=P3^5;//鎖存器
- sbit SER=P3^4;//數(shù)據(jù)端
- //=================*
-
-
- //====編碼=========*
- uchar code jiantou[14][8]={
- {0x00,0x10,0x30,0x7E,0x7E,0x30,0x10,0x00},//動畫幀1
- {0x00,0x20,0x60,0xFC,0xFC,0x60,0x20,0x00},//動畫幀2
- {0x00,0x40,0xC0,0xF8,0xF8,0xC0,0x40,0x00},//動畫幀3
- {0x00,0x80,0x80,0xF0,0xF0,0x80,0x80,0x00},//動畫幀4
- {0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00},//動畫幀5
- {0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00},//動畫幀6
- {0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00},//動畫幀7
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//動畫幀8
- {0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00},//動畫幀9
- {0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00},//動畫幀10
- {0x00,0x01,0x03,0x07,0x07,0x03,0x01,0x00},//動畫幀11
- {0x00,0x02,0x06,0x0F,0x0F,0x06,0x02,0x00},//動畫幀12
- {0x00,0x04,0x0C,0x1F,0x1F,0x0C,0x04,0x00},//動畫幀13
- {0x00,0x08,0x18,0x3F,0x3F,0x18,0x08,0x00},//動畫幀14
- };
-
- uchar code ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- //=================*
-
-
- //====全局變量=====*
- uchar count=0,index=0;
- //=================*
-
-
- //====定時器0設(shè)定==*
- void SetT0()
- {
- TMOD=0x01;
- TH0=(65536-5000)/256;//定時5毫秒
- TL0=(65536-5000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- //=================*
-
-
- //====HC595控制行==*
- void Hc595SendByte(uchar dat)
- {
- uchar a;
- SRCLK=0;
- LOAD=0;
- for(a=0;a<8;a++)
- {
- SER=dat>>7;
- dat<<=1;
- SRCLK=1;
- _nop_();
- SRCLK=0;
- }
- LOAD=1;
- _nop_();
- LOAD=0;
- }
- //=================*
-
-
- //====延時函數(shù)=====*
- void delay(uint i)
- {
- while(i--);
- }
- //=================*
-
-
- //====LED點陣顯示==*
- void LED16(uchar index)
- {
- uchar i;
- P0=0x7f;
- for(i=0;i<8;i++)
- {
- P0=ledwei[i]; //位選
- Hc595SendByte(jiantou[index][i]);//發(fā)送段選數(shù)據(jù)
- delay(100); //延時一段時間使LED更亮一些
- Hc595SendByte(0x00); //消隱
- }
- }
- //=================*
-
- //====主函數(shù)=======*
- void main()
- {
- SetT0();
- while(1)
- {
- while(!(count==20))
- {
- LED16(index);
- }
- }
- }
- //=================*
-
-
- //====定時器0中斷==*
- void Timer0()interrupt 1
- {
- TH0=(65536-5000)/256;
- TL0=(65536-5000)%256;
- count++;
- if(count==20)
- {
- count=0;
- index++;
- if(index==14) index=0;
- }
- }
- //=================*
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
06-LED點陣.docx
(323.31 KB, 下載次數(shù): 11)
2018-10-3 21:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|