經過學習,今天整理了8*8點陣學習的基礎,有Proteus仿真圖和單片機程序、word說明文檔、取模軟件,適合新手,應能看懂入門。后續隨時間增加移動、16*16等。我也在學習,期待高手幫助,謝謝。
在Proteus中,有4種8*8點陣模型,分別為MATRIX-8*8-BLUE(藍色,上圖第1個)、MATRIX-8*8-GREEN (綠色,上圖第2個)、 MATRIX-8*8-ORANGE (橙色,上圖第3個)、MATRIX-8*8-RED(紅色,上圖第4個)。每個8*8點陣均由64個LED小燈組成,如左邊D1、D2所示:當在D1加正向電壓時,LED小燈點亮,當在D2加反向電壓時,LED不亮,這是點陣學習的基礎。 如上圖,在Proteus中,,不進行任何旋轉操作,直接放置4種點陣,加上電源后,只有紅色點陣第1排亮2個燈,其他均不亮。由圖可知道,上排2根線,有2列有燈亮,即上排接通的列選,下排接通行選。當高電平選中列、低電平選中行時,相應LED燈亮。 如上圖,當我們把電源極性相反后,紅色點陣不亮,其他3種都為左邊第1、2排第1列亮2個LED燈。上排有2根線,而第1排、第2排有燈亮,即說明上排接通行選,因為有2根線所以有2行有燈亮,那下排就是接通列選。由圖可知,這3種也是高電平選中列、低電平選中行時,相應LED燈亮。 由此,我們得出3點結論: 1、仿真效果上看,綠色和紅色顯示較清楚,藍和橙色顯示不夠清楚,這就是我們下面選紅或綠做仿真的原因。 2、紅色的點陣是上列選下行選,其他3種是上行選下列選。如圖1,紅色上面接2根線,因為上面是列選,說明選擇了2列,下面接了1根線,說明選擇了1行,所以就是第一行左邊2個燈亮。圖2同理是點了2排的第1個。 3、以上4種點陣,無論上列選下行選還是上行選下列選,都是當高電平選中列、低電平選中行時,相應LED燈亮。此為編程的基礎。 例如我要點亮紅色點陣的第一行,因為它是上列選,下行選,高電平選中列、低電平選中行時相應LED燈亮,所以需在下面第1個端子加GND,上面8個端子加VCC,如下圖: 如果我要1、3、5、6行亮,則只需將行選信號(下端子)第1、3、5、6加GND即可,如下圖: 這樣,紅色點燈點亮方法我們就知道了。接下來我們看看其他點陣點亮的方法,以綠色為例。還是以點亮點陣的第一行為例。綠色點陣,上行選下列選,高電平選中列、低電平選中行時相應LED燈亮。所以應該為上面第1個端子為行選信號,接一個GND,下面的端子為列信號,全部給VCC即可,如下圖: 如果我要2、4、6行亮,該怎樣辦呢?很顯然,就是行信號相應位置選中(給GND)即可,如圖:  明白了這點,我們可以開始我們的編程了。上面示例為硬件測試,由讀者自行在Proteus中畫出即可。 第1節:通過編程,控制綠色點陣點亮左上角第一個LED燈。 分析:綠色點陣為上行選,下列選,高電平給列,低電平給行時即亮。因此,編程將上端子第1個端子寫0,下端子第1個端子寫1即可。原理圖如下: 程序如下: //本程序點亮綠色點陣第一個燈,P2.7接上排第1個,行選,應給低電平;P3.7接上排第1個,列選,應給高電平。 #include<reg52.h> //定義頭文件 void main() //主函數開始 { P2=0x7f;//0111 1111 第1位P2.7為0,即給行選一個低電平; P3=0x80;//1000 0000 第1位P3.7為1,即給列選一個高電平; while(1);//死循環,能讓程序停在這里 } 第2節:通過編程,控制綠色點陣點亮左上角第一排LED燈亮。 與上節相比,第1排仍需給低電平,再將列信號全部給高電平即可,仿真圖如下: 源程序如下: #include<reg52.h> //定義頭文件 void main() //主函數開始 { P2=0x7f;//0111 1111 第1位P2.7為0,即給行選一個低電平; P3=0xff;//給列選全部加一個高電平; while(1);//死循環,能讓程序停在這里 } 其他行、列等由讀者按自己想法完成,接下來,介紹如果點亮我們需要的字符。 一般我們按行掃描方式,就是列信號給高電平,算出第一行的列信號哪個亮哪個不亮,待程序掃描完第一行,再到第二行,直到掃描完8行就完成一個字符的顯示了。“同一時刻,有且只有一行在亮”,這是編程的基礎,和數碼管動態顯示一樣的。下面我們在點陣上顯示“中國”的中字。首先我們把原理圖畫出來,如下圖: 分析:綠色點陣,上行選下列選,高電平選中列、低電平選中行時相應LED燈亮,這是編程的基礎。就上圖而言,我們按行掃描方式,第1行時,即給P2.7低電平時,P3口控制第一行哪一列亮就給高電平,否則給低電平。依次掃描完8行即可。我們可以把掃描第一行時,列信號應該給第一行送什么數先算出,其他一樣,這樣,先把列信號算出,可以用取模軟件。 1、新建圖像,選擇寬度是8,高度是8,即8*8點陣。 2、在取模方法選擇橫向取模,一般行掃描方式就選這個。字節倒序是滿足一些硬件需求,比如第一位應該是接最高位,但硬件第1位接最低位,所以此處不選即可。 3、在模擬動畫中,放大格點,把“中”字點選出來。以后到16*16時,可在文件輸入區輸入即可。在8*8時,還是手工選擇即可。 4、在取模方式中,選C51格式,點陣生成區出現了8*8點陣,行掃描時的列信號,將其復制到程序中即可。 完整程序如下: #include<reg52.h> //包含頭文件 char code hang[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //行編碼,分別選中第一行至第8行 char code lie[]={0x00,0x08,0x7f,0x49,0x49,0x7f,0x08,0x08}; //行掃描時,列信號編碼 void delay(int a) //延時函數 { int x,y; for(x=0;x<a;x++) for(y=0;y<110;y++); } void main() //主函數 { int num; while(1) { for(num=0;num<8;num++)//行掃描8次,輪流選中第一行,第1個列編碼,直到第8行; { P2=hang[num]; //送行編碼,當num=0時送第一行時的編碼,依次類推送完1至8行; P3=lie[num]; //送列編碼,每一行把相應列該亮哪個燈送到端口。 delay(5); //送完行和列,適當做一下延時。 } } } 效果圖如下: 程序不變,只需改變char code lie[]里的編碼,即可改變顯示不同的字符。如字符1。在取模軟件得出列信號為:0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C,效果圖如下: 至此,點陣學習基礎就學完了。我們可以在8*8點陣上顯示固定的一些字符了。要顯示漢字,后續將8*8拼成16*16再進行。8*8點陣,如何移動等問題還沒解決,而且8*8就用去了16個IO口,后續需減少IO口的使用,增加74LS138、74LS595等。我也在學習中,本文把學到的知識自己總結好發出來,希望對初學點陣的朋友有幫助!
點陣學習基礎.jpg (103.3 KB, 下載次數: 56)
下載附件
點陣學習基礎
2020-10-8 22:30 上傳
全部資料51hei下載地址:
點陣學習基礎.rar
(689.63 KB, 下載次數: 44)
2020-10-8 22:37 上傳
點擊文件名下載附件
點陣學習基礎,有Proteus仿真圖和程序、word說明文檔、取模軟件。 下載積分: 黑幣 -5
|