1. 單片機課程設計4個8*8點陣
建議自己動手 畫一個 畢竟不是太復雜
況且可以練習下 到胃應聘單位 這個就是你的敲門磚
2. 基於單片機led點陣屏的設計需要用到哪些知識
ABSTRACT II
第1章 前言 1
1.1 LED電子顯示屏概述 1
1.3 LED顯示屏的應用示例 2
第2章 顯示原理及控制方式分析 3
2.1 LED點陣模塊結構 3
2.2 LED動態顯示原理 4
2.3 LED常見的控制方式 4
第3章 方案設計與分析 7
3.1 顯示單元 7
3.2 滾屏的實現 7
3.3 關於可擴展性 7
3.4 微控制器的考慮 7
3.5 關於點陣數據的存儲方式 8
3.6 關於顯示內容的更新 9
3.7 總體電路結構及工作原理 9
3.7.1 硬體電路框圖 9
3.7.2 工作原理 11
第4章 硬體電路設計 13
4.1 顯示單元電路設計 13
4.1.1 LED點陣模塊的選擇 13
4.1.2 列驅動電路設計 13
4.1.3 行驅動電路設計 14
4.2 單片機控制系統電路設計 15
4.2.1 單片機的選型 15
4.2.2 單片機系統電路設計 16
4.3 字型檔與單片機的介面設計 17
4.3.1 字型檔晶元選型 17
4.3.2 字型檔晶元的使用方法 17
4.3.3 字型檔晶元的電氣特性 18
4.3.4 字型檔晶元與單片機的介面設計 19
4.3.5 字型檔晶元3.3V電源設計 20
4.3.6 5V-3.3V的電平轉換電路設計 20
3. 基於單片機的16×64點陣字元控制系統的設計
我做過這樣的畢業設計,16*64點陣顯示屏,可以各種顯示,時間,溫度等功能。
給你一個參考:
可以去我的博客下載: http://www.shenzhenwangzhanyouhua.com/seo/ds1302-18b20-1664-display.html
LED 點陣漢字顯示屏
概 述
這次比賽製作由於時間緊,同時為了降低製作難度, 僅作了四個字的輪流顯示,實際使用時可根據這個原理自行擴充顯示的字數。
設計製作主要運用於學校的宣傳欄,如:本科評估的各種信息,學校學院重要通知,天氣預報等各種信息。
系統設計
一 硬體電路
(1)系統組成:
主要硬體電路:LED 點陣條屏是由 16 個 8*8 的 LED 點陣塊組成,形成 16*64 矩形點陣,以AT89S51為控制核心。顯示屏的其他主要硬體有:
① 帶鎖存輸出的 8位移位寄存器74HC595,作為LED的列線驅動輸入;
② 四六解碼器 74LS154,作為 LED行線的解碼選擇(實際製作中考慮成本問題改為兩個74HC138聯合);
③ 三極體 9012,連接四六解碼器的十六個輸出端,作為開關使用,驅動LED的行線。
圖二 AT89S51單片機最小系統
AT89S51相關器件連接的接腳如下:PA0-PA3連接4-16解碼器的輸入口A,B,C,D;PB0-PB3連接74HC595的輸入口 SI,SCK,RCK;PD6-PD7作串口通信使用連接RxD,TxD 兩個三八解碼器74LS138組成的16個輸出端連接 16 個 9012的三極體的基極 B,發射極E 連接5V電源,集電極C連接到三個漢字點陣的16 個行線控制端。 點陣的 48 列數據線驅動由 6 片 74HC595 級聯組成,前一片 74HC595 的 Q』H 引腳連接下一片的SI引腳,各片的SCK、RCK、SRCLR、G引腳分別並聯。
(2)LED點陣塊
圖三 LED點陣塊
8*8的LED點陣為單色行共陰模塊,單點的工作電壓為正向(Vf)=1.8 v ,正向電流(IF)= 8-10 mA 。靜態點亮器件時(64點全亮)總電流為 640mA,總電壓為 1.8 v,總功率為 1.15 W。動態時取決於掃描頻率(1/8或1/16秒),單點瞬間電流可達 80-160 mA。 16*16點陣靜態時16*16*10mA,動態時單點電流80-160mA。
實際測試:整機電流700 mA
(2) 移位寄存器74HC595
圖四 74HC595內部邏輯圖
74HC595是帶鎖存輸出的8位移位寄存器,其管腳見下圖,其中SI是串列數據的輸入端;VCC、GND分別為電源和地;RCK是存儲寄存器的輸入時鍾,SCK是移位寄存器的輸入時鍾,SCLR是移位寄存器的輸入清除,Q』H是串入數據的輸出,G是對輸入數據的輸出使能控制,QA~QH串入數據的並行輸出。從SI口輸入的數據在移位寄存器的SCK腳上升沿的作用下輸入到74HC595中,在RCK腳的上升沿作用下將輸入的數據鎖存在74HC595中,當G為低電平時時,數據並行輸出。SCLR為移位寄存器的輸入清除端。
(3) 74HC138以及驅動電路
圖五 74HC138以及驅動電路實物圖
4-16線解碼器(用兩塊74HC138組成),其管腳如圖所示,A,B,C,D為解碼的輸入端,值的區間從0000到1111,Y1~Y15是對應A,B,C,D四個輸入引腳的輸出腳,其中選中的線用輸出低電平,沒有選中的輸出高電平,G1、G2是使能端,只有輸入相應D低電平才能使解碼器正常工作。
驅動三極體為16個9012,用萬能板焊接。
二 軟體設計
單片機方的程序設計 單片機在LED點陣漢字顯示系統中主要負責數據的接收、存儲和掃描顯示 LED點陣屏三大主要功能。串列移動的子程序設計 這是一個通用子程序,在顯示子程序中都要被調用,功能是移位寄存器 74HC595接收單片機發出的點陣行數據,逐位移動到對應位置後再進行鎖存和輸出工作,同時對四六解碼器進行開關工作,控制屏幕的顯示。
部分程序:初始化程序:
#include <AT892051.H>
#define uchar unsigned char
#define uint unsigned int
#define SPEED 3
uchar col,disrow;
uint word;
uchar code HZ[];
uchar BUFF[6];
void loadoneline(void);
void sendoneline(void);
發送部分程序:
void sendoneline(void)
{
char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=4+inc;s>=0+inc;s--)
{
SBUF=two_onebyte(BUFF[s],BUFF[s+1]);
while(!TI);TI=0;
}
}
三 調試
調試主要分為硬體調試和軟體調試:
硬體調試:在焊接電路板的時候,應該從最基本的最小系統開始,分模塊,逐個進行焊接測試。在對各個硬體模塊進行測試時,要保證軟體正確的情況下去測試硬體,要不然發生錯誤時,不知道到底是哪一方出錯了。當然,在設計的過程中也存在著失誤和不足。
軟體調試:軟體部分是先參考書上的例子,然後自己根據硬體電路寫程序,由於以前所學是C語言,所以這個系統在編寫程序過程中都採用C語言編寫。剛剛開始,編寫不會一次性通過,經過仔細分析修改最後編譯成功。但是,在實際寫如S51中,LED顯示屏出現各種各樣的亂碼,通過再次認真仔細分析多次修改程序後,程序能夠正常運行。
四 總結
在 LED點陣漢字顯示屏的設計過程中,學到了很多東西,基本了解了整個嵌入式開發的流程。例如,在進行整個設計之前,應該先根據需求分析,對單片機進行選型,然後對各個硬體模塊進行搭試。在畫PCB電路板的時候,要注意基本的布板原則。例如,在進行PCB布板的時候,濾波電容不夠靠近晶元的電源腳和地腳。在進行搭試點陣塊的時候,因為電壓過高,導致點陣塊損壞。這次第一屆電子設計製作,本人受益非淺,在以後的電子設計製作過程中一定吸取教訓。
參考文獻:
[1]何立民.單片機應用技術選編[M].北京:北京航空航天大學出版社.1998.
[2]杜春雷.如何使用Visual Basic 6.0 dP3~ [M].北京:機械工業出版社,1999.
[3]孫育才.新型AT89S51系列單片機及其應用[M].北京:清華大學出版社.2005.
經驗小結:
1,在頭文件增加「#pragma SRC(LED.ASM)」語句,可以生成匯編文件,對於理解
匯編語言程序是有很大的好處的。
2,在製作PCB板過程中,業余條件下很難做雙面板,不地不做的時候考慮如何布
線才能達到最優最好。
3,在「http://xie-gang.com/WNFZQ.htm」;Keil C51軟體的安裝,按照該軟體
的安裝,可以得到無限量的程序編譯。因為在寫程序的過程中發現,KEIL C51 只
能編譯2K的程序代碼,不夠用。用C編寫,感覺很容易理解。程序編寫過程中最好
是先參考別人的程序,再修改能不能實用自己的程序要求,之後才自己去編寫完
全屬於自己的程序。
4,單片機模擬軟體 PROTEUS 也是很不錯的。在上面可以模擬很多東西。
設想:
1,可以掛在學校的十字路口,提供日期,時間,溫度,濕度等天氣信息,服務廣大同學。
2,可以和電腦相連接,實現同步顯示。做一個完整的系統。
進一步學習下面的軟體或者語言(知識):
BV
protel 99 se
keil c51
proteus
c/c++
easy isp 51
Easy 51Pro.exe
2007-5-25
下面為靜止顯示「農林大學」四個字的程序:
#include <REG51.h>
#define uchar unsigned char
#define uint unsigned int
uchar disrow;
uchar code HZ[];
uchar BUFF[9];
void loadonelineandsend(void);
/********************************************/
/*******************************************************/
void main(void)
{
while(1)
{
for(disrow=0;disrow<16;disrow++)
{
loadonelineandsend();
P1=0x10+disrow;
P1=0x20+disrow;
}
}
}
/******************************************************/
void loadonelineandsend(void)
{
uchar s;
int q;
q=0;
for(s=0;s<4;s++)
{
BUFF[q]=HZ[32*s+disrow*2];
BUFF[q+1]=HZ[32*s+disrow*2+1];
SBUF=255-BUFF[q+1];
while(!TI);TI=0;
SBUF=255-BUFF[q];
while(!TI);TI=0;
}
}
/******************************************************/
/***********農林大學********************************************/
uchar code HZ[]=
{
0x01,0x00,0x01,0x00,0x7F,0xFE,0x41,0x02,0x81,0x04,0x02,0x00,0x02,0x08,0x05,0x18,
0x09,0x20,0x18,0xC0,0x28,0x80,0x48,0x40,0x88,0x30,0x0A,0x0E,0x0C,0x04,0x08,0x00,
0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x24,0xFE,0xFE,0x08,0x20,0x18,0x60,0x1C,0x70,
0x2A,0xA8,0x28,0xAE,0x49,0x24,0x8A,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,
0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x0E,0x60,0x04,0x00,0x00,
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
};
4. 單片機的課程設計——在8*8點陣顯示圖形
這個問題不是很難!
我的理解是樓主可能只用單片機和點陣模塊來實現,這需要單片現來做動態掃描。
首先需要你把點陣上要顯示圖形的代碼寫出來,即每種圖形每行顯示的數據,每個圖形有8行數據,即佔8個位元組的空間!
如果樓主用51單片機來實現的話,可以使用P0口輸出行數據,P1口作為點陣的行掃描控制。
其次要用按鍵控制,只需你把每種圖形以不同的表存起來,再做一個按鍵掃描程序,當檢測到有鍵按下時,把動態掃描的表頭地址更換即可!
5. 基於單片機的LED點陣顯示設計
摘 要:由於普通LED點陣顯示屏動態顯示通常採用硬體掃描驅動,這在一些需要特殊顯示的場合顯得不夠靈活。文中提出了一種利用PC機和單片機的通訊來實現顯示屏靈活的動態顯示和遠程監控的設計方法,同時該方法還可以將顯示內容在PC機上進行預覽。 關鍵詞:LED;動態顯示;遠程式控制制;顯示預覽
1引言 LED 點陣電子顯示屏是集微電子技術、計算機技術、信息處理技術於一體的大型顯示屏系統。它以其色彩鮮艷,動態范圍廣,亮度高,壽命長,工作穩定可靠等優點而成為眾多顯示媒體以及戶外作業顯示的理想選擇。同時也可廣泛應用到軍事、車站、賓館、體育、新聞、金融、證券、廣告以及交通運輸等許多行業。 目前大多數的LED點陣顯示系統自帶字型檔。其顯示和動態效果(主要是顯示內容的滾動)的實現主要依靠硬體掃描驅動,該方法雖然比較方便,但顯示只能按照預先的設計進行。而實際上經常會遇到一些特殊要求的動態顯示,比如電梯運行中指示箭頭的上下移動、某些智能儀表幅值的條形顯示、廣告中廠家的商標顯示等。這時一般的顯示系統就很難達到要求。另外,由於受到存儲器本身的局限,其特殊字元或圖案也往往難以顯示,同時顯示內容也不能隨意更改。本文提出一種利用PC機和單片機控制的LED顯示系統通訊方法。該方法可以對顯示內容(包括漢字和特殊圖符)進行實時控制,從而實現諸如閃動、滾動、打字等多種動態顯示效果。該方法同時還可以調節動態顯示的速度,同時用戶也可以在PC機上進行顯示效果的預覽,顯示內容亦可以即時修改。另外,通過標準的RS232/485 轉換模塊還可以實現對顯示系統的遠程式控制制。2系統硬體設計 本 系統主要的硬體設計是下位機單片機的顯示 控制部分。而上位機(PC機)與單片機顯示控制部分的介面為標准RS232通訊方式。若需實現遠程監控,只需增加RS232/485轉換模塊即可,該部分已有成熟的電路設計,故不再詳細敘述。 具體的LED顯示屏控制電路如圖1所示。整個電路由單片機89C52、點陣數據存儲器6264、列驅動電路ULN2803、行驅動電路TIP122、移位寄存器4094及附屬電路組成。該電路所設計的電子屏可顯示10個漢字,需要40個8×8 LED點陣模塊,可組成16×160的矩形點陣。由於AT89C52僅有8k存儲空間,而顯示的內容由PC機控制,因此不可能預先把需要顯示的內容做成點陣存在單片機中,而只能由PC機即時地把所需顯示的點陣數據傳給單片機並存入緩沖區6264。 該電路的顯示採用逐行掃描方式。工作時,由單片機從緩沖區取出第一行需要顯示的20位元組點陣數據,再由列點陣數據輸入端P1.2口按位依次串列輸入至列移位寄存器,其數據輸入的順序與顯示內容的順序相反。然後置行點陣選通端P1.3為1,即置行移位寄存器的D為高電平,STR使能(所有4094的OE 引腳接+5V電平),從而使列移位寄存器中的數據同時並行輸出以選通該行。經延時一段時間後再進行下一行點陣數據的顯示。需要注意的是,每次只能選通一行數據,即要通過不斷的逐行掃描來實現漢字或字元的顯示。3顯示與控制的設計 在筆者設計的PC機控制多單片機顯示系統中,用PC機實現的主要功能包括單片機顯示子系統的選擇,顯示方式選擇(包括靜態、閃動、滾動、打字等),滾動方向選擇(包括上下滾動和左右滾動),動態顯示速度調節(即文字閃動頻率、滾動速度、打字顯示速度等),顯示內容輸入及顯示預覽等。單片機一般通過 RS232/485串列接收PC機發出的顯示指採用定時器中斷方式進行行掃描,每次中斷顯示一行,定時中斷時間為1.25ms,這樣整屏的刷新率為 50Hz,因而無閃爍感。
實現動態顯示速度調節的方法通常是改變定時器的中斷時間,但是當顯示速度很慢的時候,該方法容易使整屏的刷新率降低,從而使顯示內容出現閃爍。因此,本設計採用一種「軟定時」方法,即在程序中命名一變數作為「軟定時器」,以用來設定兩次動態顯示的時間間隔。在對定時中斷調用計數時,如果調用次數達到設定值,則改變顯示內容。為保證能夠正常顯示,「軟定時器」的設定值必須大於整屏顯示周期。由於顯示屏每行顯示1.25ms,整屏顯示周期為20ms,考慮到餘量的情況,可將軟定時器的設定值定在大於30ms。如此循環計數,即可實現動態顯示。「軟定時器」的設定值可以通過上位機PC機來改變,這樣既可實現 LED動態顯示的速度調節,又可保持顯示內容的流暢和無閃爍感。3.1單片機動態顯示控制 以上提到的靜態、閃動、滾動和打字等4種顯示方式,實際上是單片機定時中斷程序進行行掃描處理的不同方法。下面將分別說明如何實現這4種顯示方式。 靜態顯示只需在定時中斷處理程序中從顯示緩沖區調入相應的一行顯示數據,然後選中該行即可實現該行的顯示,如此循環,便可顯示整個內容。閃動顯示與此類似,不同的是要間隔一個「軟定時器」的定時時間,在行掃描時,行移位寄存器的D端打入的全為0,可使得整屏不顯示,以確保黑屏時間與顯示時間相等,從而實現漢字或圖符的閃動顯示。 滾動顯示要求需要顯示的內容每隔一定時間向指定方向(這里以從右向左為例)移動一列,這樣顯示屏可以顯示更多的內容。為此,需要在下次移動顯示之前對顯示緩沖區的內容進行更改,從而完成相應點陣數據的移位操作。具體操作方法是: 設置一個顯示緩沖區(如圖2所示),該區應包括兩部分:一部分用來保存當前LED顯示屏上顯示的10個漢字點陣數據;另一部分為點陣數據預裝載區,用來保存即將進入LED顯示屏的1個漢字的點陣數據。滾動指針始終指向顯示屏的最右邊原點。當滾動指針移動到需要顯示的點陣數據存儲區的第1個漢字的首地址時,顯示緩沖區LED顯示區為空白,而預裝載區已保存了第1個待顯示漢字的點陣數據。當需要滾動顯示時,則可在接下來的掃描周期的每個行掃描中斷處理程序中,將對顯示緩沖區的相應行點陣數據左移一位,同時更改顯示緩沖區的內容。(需要注意的是,要確保該操作能在1.25ms的中斷時間內完成。這里89C52採用22MHz晶振,實驗證明可以實現該操作)。這樣,在一個掃描周期後,整個漢字將左移一列,而顯示緩沖區的內容也同時更改。由於預裝載區保存了1個漢字點陣數據,即16×16點陣,所以當前顯示緩沖區的內容只能移動16列。當下一個滾動到來時,滾動指針將移動到點陣數據存儲區的下一個漢字的首地址,並在預裝載區存入該漢字的點陣數據。然後重復執行上述操作便可實現滾動顯示。特殊字元或圖形的顯示與此類似,這里不再贅述。
打字顯示要求漢字在顯示屏上按從左到右的順序一個個的出現,如同打字的效果。設計時可採用如下方法:首先將LED顯示屏對應的顯示緩沖區全部清零,即 LED顯示空白,然後每間隔一個「軟定時器」設定的動態顯示時間,顯示緩沖區依次加入一個漢字點陣數據並進行掃描顯示,這樣就可達到打字顯示的效果。3.2 PC機控製程序 a.通訊功能的實現 在Windows環境下,實現PC與單片機的通訊可利用Windows的通訊API函數或者利用VC++(或其它語言)的標准通訊函數_inp、_outp來實現。但上述兩種方法比較繁瑣,而採用ActiveX控制項MSComm32來實現則非常方便。該控制項用事件的方式簡化了對串口操作的編程,並可設置串列通信的數據發送和接收,還可對串口狀態及串口通信的信息格式和協議進行設置。其初始化程序如下: 一般情況下,PC要與多個單片機89C51系統進行主從式通訊,為了區分各單片機系統,可以使89C51採用串口工作方式3,即11位非同步接收/發送方式,該方式的有效數據為9位,其中第9位為地址/數據信息的標志位,其作用是使從機據此判斷發送的數據是否為地址,從而實現多機操作。但現在由於採用的是MSCOMM控制項來實現PC機和單片機之間的通訊,這是一種標準的10位串口通信方式,即8位標准數據位和該數據的起始位、停止位各1位。因此二者格式不相符,故很難利用上述方案。因此可考慮將單片機串口設為工作方式1,即改為10位非同步接收/發送方式來解決,其通訊流程如下: 首先發通信開始標志,接著發送需要操作的單片機系統地址,然後發送顯示工作命令字,該命令包括2個位元組,前一位元組用於設定顯示方式和滾動方向,後一位元組則用於設定顯示速度。再往下是傳送顯示內容的點陣數據,最後對數據進行校驗。該通訊規約非常簡便,能夠較好的解決上述問題,從而實現PC機與多單片機之間的主從式通訊及對顯示的控制。 需要注意的是,當顯示內容需要改變時,為了避免在單片機串列中斷接收數據時,顯示屏出現亂碼,應使顯示屏暫不顯示(處於「黑屏」狀態),直到數據接收完全,串列中斷處理結束時再顯示。 漢字字模的提取非常關鍵,本文的字模數據取自UCDOS下的字型檔文件HZK16。關於這方面的介紹較多,文獻〔2〕給出了較為具體的在VC下提取漢字字模的方案,這里不再贅述。對於特殊字元或圖形點陣數據的提取,簡便的方法可以先做一個BMP文件,然後用一些取模軟體(如字模提取v2.1)來獲得。為了顯示方便,點陣數據的格式應為n×(16×8),不足要求的則應以0數據補充。 b.動態效果模擬顯示 為了方便調節LED的顯示效果,筆者在PC機的控制界面上設計了LED顯示屏的模擬顯示,它同實際的顯示效果完全一樣。用戶可以設定顯示的模式,並調節顯示速度,然後在界面上對顯示效果進行預覽,同時還可以隨時修改和設定參數,因而十分方便簡捷。 為此,可先在界面上描繪出虛擬的LED顯示屏,由於實際的顯示屏為160×16點陣,故須在界面 上設定相同的區域。 實現動態顯示效果的方法和以上幾種基本類似,這里以滾動顯示為例作一說明。對於需要滾動的文字,可以將其設置為點陣圖格式,暫存於內存中,然後利用VC 提供的點陣圖拷貝函數BitBlt將點陣圖復制到顯示位置。對於特殊字元或圖形,則可以直接利用BitBlt函數調用到顯示位置。然後在類CLEDDlg的 OnTimer函數中調用該函數,以實現文字的滾動顯示。另外,也可以通過設定不同的響應時間間隔來改變文字的滾動速度。
漢字顯示屏廣泛應用與汽車報站器,廣告屏等。本文介紹一種實用的漢字顯示屏的製作,考慮到電路元件的易購性,沒有使用8*8的點陣發光管模塊, 而是直接使用了256個高量度發光管,組成了16行16列的發光點陣。同時為了降低製作難度, 僅作了一個字的輪流顯示,實際使用時可根據這個原理自行擴充顯示的字數。
1漢字顯示的原理:
我們以UCDOS中文宋體字型檔為例,每一個字由16行16列的點陣組成顯示。即國標漢字型檔中的每一個字均由256點陣來表示。我們可以把每一個點理解為一個像素,而把每一個字的字形理解為一幅圖像。事實上這個漢字屏不僅可以顯示漢字, 也可以顯示在256像素 范圍內的任何圖形。
用8位的AT89C51單片機控制, 由於單片機的匯流排為8位,一個字需要拆分為2個部分。
軟體打開後輸入漢字,點「檢取」,十六進制數據的漢字代碼即可自動生成,把我們所需要的豎排數據復制到我們的程序中即可。
我們把行列匯流排接在單片機的i0口,然後把上面分析到的掃描代碼送入匯流排, 就可以得到顯示的漢字了。 在這個例子里,由於一共用到16行,16列, 如果將其全部接入89c51
單片機, 一共使用32條io口,這樣造成了io資源的耗盡,系統也再無擴充的餘地。 實際應用中我們使用4-16線解碼器74ls154來完成列方向的顯示。 而行方向16條線則接在
p0口和p2口。
程序清單:
ORG 00H
LOOP: MOV A,#0FFH ;開機初始化,清除畫面
MOV P0,A ;清除P0口
ANL P2,#00 ;清除P2口
MOV R2,#200
D100MS: MOV R3,#250 ;延時100毫秒
DJNZ R3,$
DJNZ R2,D100MS
MOV 20H,#00H ;取碼指針的初值
l100: MOV R1,#100 ;每個字的停留時間
L16: MOV R6,#16 ;每個字16個碼
MOV R4,#00H ;掃描指針清零
MOV R0,20H ;取碼指針存入R0
L3: MOV A,R4 ;掃描指針存入A
MOV P1,A ;掃描輸出
INC R4 ;掃描指針加1,掃描下一個
MOV A,R0 ; 取碼指針存入A
MOV DPTR,#TABLE ;取數據表的上半部分的代碼
MOVC A,@A+DPTR
MOV P0,A ; 輸出到P0
INC R0 ;取碼指針加1,取下一個碼。
MOV A,R0
MOV DPTR,#TABLE ;取數據表下半部份的代碼
MOVC A,@A+DPTR
MOV P2,A ;輸出到P2口
INC R0
MOV R3,#02 ;掃描1毫秒
DELAY2: MOV R5,#248 ;
DJNZ R5,$
DJNZ R3,DELAY2
MOV A,#00H ;清除屏幕
MOV P0,A
ANL P2,#00H
DJNZ R6,L3 ;一個字16個碼是否完成?
DJNZ R1,L16 ;每個字的停留時間是否到了?
MOV 20H,R0 ;取碼指針存入20H
CJNE R0,#0FFH,L100 ;8個字256個碼是否完成?
JMP LOOP ;反復循環
TABLE :
;漢字「倚」的代碼
db 01H,00H,02H,00H,04H,00H,1FH,0FFH
db 0E2H,00H,22H,00H,22H,0FCH,26H,88H
db 2AH,88H,0F2H,88H,2AH,0FAH,26H,01H
db 63H,0FEH,26H,00H,02H,00H,00H,00H
;以下分別輸入天,一,出, 寶,刀,屠,龍,的代碼,略。
end
電路中行方向由p0口和p2口完成掃描,由於p0口沒有上拉電阻,因此接一個4.7k*8的排阻上拉。 如沒有排阻,也可用8個普通的4.7k 1/8w電阻。為提供負載能力,接16個2n5551的NPN三極體驅動。
列方向則由4—16解碼器74LS154完成掃描,它由89C51的P1.0---P1.3控制。同樣,驅動部分則是16個2N5401的三極體完成的。
電路的供電為一片LM7805三端穩壓器,耗電電流為100Ma左右。
採用一塊12*20cm的萬能電路板,應當選用質量好些的發光管,(否則有壞點現象, 更換起來較麻煩)首先將256個發光管插入電路板,注意插入方向,同時使高度一致,行方向直接焊接起來, 列方向則搭橋架空焊接,完成後用萬用表測試一下如有不亮的更換掉。
然後找一個電腦硬碟的數據線, 截取所需的長度,分別將行,列線引出至電路的相關管腳即可。原理圖為了簡潔,故只畫出了示意圖,行列方向只畫出了2個三極體,屏幕只畫出4個發光管, 實際上發光管為256隻,三極體行列方向各16隻,一共32隻。焊接過程認真仔細一天時間即可完成全部製作。將程序編譯後燒寫入89c51, 插入40pin Ic座,即可看到屏幕輪流顯示:「倚天一出寶刀屠龍」。
當然,你可將程序的漢字代碼部分更換為您所需要的代碼即可顯示你所需要的漢字
元件清單:
名稱 數量 規格
4.7k 1/8w 32 電阻
4.7k*8排阻 1
2n5551 16 小功率NPN三極體
2n5401 16 小功率PNP三極體
led 256 3mm白發紅高亮度
22P 2 瓷片電容
10uf/50v 1 電解電容
100uf/25v 2 電解電容
AT89C51 1 或AT89S51
40pin Ic座 1 插89c51用
12M 1 晶體
74LS154 1 或74HC154
LM7805 1 穩壓IC
電源插座 1
穩壓電源 1
6. 課程設計:單片機的8乘8LED點陣顯示屏的設計
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]=
{
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0
0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3
0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //9
0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff
};
uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar i=0,j=0,t=0,Num_Index,key,xi,yi;
//主程序
void main()
{
P1=0x80;
Num_Index=0; //從0 開始顯示
TMOD=0x01; //T0 方式0
TH0=(65536-2000)/256; //2ms 定時
TL0=(65536-2000)%256;
IE=0x82;
key=0;
xi=0;
yi=0;
EX0=1;
IT0=1;
TR0=1; //啟動T0
while(1);
}
//T0 中斷函數
void ext_int0() interrupt 0
{
key++;
key&=0x03;
}
void LED_Screen_Display() interrupt 1
{
TH0=(65536-2000)/256; //2ms 定時
TL0=(65536-2000)%256;
switch(key)
{
case 0:
P0=0xff; //輸出位碼和段碼
P0=~Table_of_Digits[Num_Index*8+i];
P1=_crol_(P1,1);
if(++i==8) i=0; //每屏一個數字由8 個位元組構成
if(++t==250) //每個數字刷新顯示一段時間
{
t=0;
if(++Num_Index==10) Num_Index=0; //顯示下一個數字
}
break;
case 1:
P0=~xdat[xi];
P1=0xff;
P1=ydat[yi];
if(++t==250) //每個數字刷新顯示一段時間
{
t=0;
yi++;
if(yi>7){yi=0;xi++;}
if(xi>7)xi=0;
}
break;
case 2:
P0=0xff; //輸出位碼和段碼
P0=~Table_of_Digits[80+j];
if(j==0)P1=0x80;
P1=_crol_(P1,1);
if(++j==8) j=0; //每屏一個數字由8 個位元組構成
break;
default:
key=0;
i=0;
j=0;
t=0;
xi=0;
yi=0;
Num_Index=0;
P0=0xff;
P1=0x80;
break;
}
}
7. 單片機 8*8點陣C51程序
一.基於51的點陣屏顯示:(1)點亮第一個8*8點陣:
1.首先在Proteus下選擇我們需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在這里使用綠色的點陣)。在Proteus
6.9中8*8的點陣總共有四種顏色,分別為MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE
,MATRIX-8*8-RED。
在這里請牢記:紅色的為上列選下行選;其它顏色的為上行選下列選!而所有的點陣都是高電平選中列,低電平選中行!也就是說如果某一個點所處的行信號為低,列信號為高,則該點被點亮!此結論是我們編程的基礎。
2.在選擇完以上三個元件後,我們開始布線,具體如下圖:
這里P2是列選,P3連接38解碼器後作為行選。
選擇38解碼器的原因:38解碼器每次可輸出相應一個I/O口的低電平,正好與點陣屏的低電平選中行相對,並且節省了I/O口,大大方便了我們的編程和以後的擴展。
3.下面讓我們把它點亮,先看一個簡單的程序:
(將奇數行偶數列的點點亮,效果如下圖)
下面是源代碼:
/************8*8LED點陣屏顯示*****************/
#include<reg51.h>
void
delay(int
z)
//延時函數
{
int
x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void
main()
{
while(1)
{
P3=0;
//行選,選擇第一行
P2=0x55;
//列選,即該行顯示的數據
delay(5);
//延時
/*****下同*****/
P3=2;
//第三行
P2=0x55;
delay(5);
P3=4;
//第五行
P2=0x55;
delay(5);
P3=6;
//第七行
P2=0x55;
delay(5);
}
}
上面的程序實現了將此8*8點陣的奇數行偶數列的點點亮的功能。重點讓我們看while循環內,首先是行選P3=0,此時38解碼器的輸入端為000,則輸出端為01111111,即B0端為低電平,此時選中了點陣屏的第一行,接著列選我們給P2口賦0x55,即01010101,此時又選中了偶數列,緊接著延時。然後分別對第三、五、七行進行相同的列選。這樣就點亮了此點陣屏奇數行偶數列交叉的點。
完成這個程序,我們會發現其實點陣屏的原理是如此簡單,和數碼管的動態顯示非常相似,只不過換了一種方式而已。
對不起啦,我傳了三次圖片都沒傳上,郁悶哪!希望你能理解哈!
不過我有傳一份WORD文檔在我的空間裡面