久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6307|回復(fù): 7
收起左側(cè)

單片機(jī)16*64LED電子顯示屏設(shè)計(jì)論文加仿真工程與源碼

  [復(fù)制鏈接]
ID:217741 發(fā)表于 2018-7-13 10:08 | 顯示全部樓層 |閱讀模式
單片機(jī)與接口技術(shù)
課程設(shè)計(jì)(論文)
點(diǎn)陣LED顯示屏設(shè)計(jì)

院(系)名稱
電子與信息工程學(xué)院

摘要

隨著單片機(jī)技術(shù)的快速發(fā)展,現(xiàn)如今LED點(diǎn)陣廣告牌隨處可見,它的應(yīng)用領(lǐng)域極其廣泛。像證券交易實(shí)時(shí)信息的顯示,LED顯示屏需求量都是非常大的,而這些LED的基本單元都是8x8的點(diǎn)陣,它是組成漢字及其它圖形的基礎(chǔ),可通過單片機(jī)的控制實(shí)現(xiàn)顯示功能,因此具有廣泛應(yīng)用的意義。
設(shè)計(jì)的點(diǎn)陣LED顯示屏包括兩個(gè)部分電路。一是單片機(jī)控制部分電路,包括AT89C51單片機(jī)、時(shí)鐘電路、復(fù)位電路和按鍵控制電路等,通過Keil軟件編程實(shí)現(xiàn)控制LED顯示的功能;二是點(diǎn)陣LED顯示電路,由LED點(diǎn)陣、74HC595移位寄存器芯片和74159編碼器芯片構(gòu)成。以74HC595移位寄存器芯片為主要器件,設(shè)計(jì)的點(diǎn)陣LED顯示屏要求分辨率為64x16點(diǎn),可顯示4個(gè)漢字或8個(gè)字母,具有靜止顯示、滾動(dòng)顯示等顯示方式。整體電路結(jié)構(gòu)緊湊、參數(shù)設(shè)置合理,具有斷電儲(chǔ)存,控制靈敏度高,電路穩(wěn)定性好,抗干擾能力強(qiáng)等優(yōu)點(diǎn)。
整體電路設(shè)計(jì)采用Proteus仿真軟件進(jìn)行繪圖和測試。經(jīng)過仿真測試,LED顯示屏能夠靜止或滾動(dòng)顯示4個(gè)漢字,分辨率達(dá)到64x16點(diǎn),滿足可顯示4個(gè)漢字或8個(gè)字母,具有靜止顯示、滾動(dòng)顯示等顯示方式的設(shè)計(jì)要求。

目 錄

第1章 緒論
1.1 點(diǎn)陣LED顯示屏的應(yīng)用意義
1.2 本文研究內(nèi)容
第2章 方案設(shè)計(jì)與論證
2.1 核心控制電路設(shè)計(jì)與論證
2.2 點(diǎn)陣LED顯示模塊論證
2.3 系統(tǒng)設(shè)計(jì)要求
2.4 總體設(shè)計(jì)
第3章 單元電路設(shè)計(jì)
3.1 單片機(jī)最小系統(tǒng)
3.1.1 最小系統(tǒng)
3.1.2 時(shí)鐘電路
3.1.3 復(fù)位電路
3.2 按鍵控制模塊
3.3 斷電儲(chǔ)存模塊
3.4 驅(qū)動(dòng)模塊
3.4.1 行驅(qū)動(dòng)
3.4.2 列驅(qū)動(dòng)
3.5 點(diǎn)陣LED模塊
第4章 系統(tǒng)軟件設(shè)計(jì)
4.1 主程序的設(shè)計(jì)
4.2 按鍵程序設(shè)計(jì)
4.3 編程C語言代碼
第5章 系統(tǒng)仿真與調(diào)試
第6章 總結(jié)
參考文獻(xiàn)
附錄I
附錄II

第1章 緒論1.1 點(diǎn)陣LED顯示屏的應(yīng)用意義
隨著現(xiàn)代電子技術(shù)的快速發(fā)展,各類智能電子產(chǎn)品的功能日益強(qiáng)大,與人們?nèi)粘I畹穆?lián)系也日益緊密。電子產(chǎn)品向小型化,精密化的趨勢快速發(fā)展。在任何的電子系統(tǒng)中,顯示電路都是實(shí)現(xiàn)人機(jī)交互、信息顯示的重要組成部分,所以對(duì)點(diǎn)陣LED顯示技術(shù)的研究具有廣泛的意義。
目前應(yīng)用最廣的是紅色、綠色、黃色。LED顯示屏可以顯示變化的數(shù)字、文字、圖形圖像;不僅可以用于室內(nèi)環(huán)境還可以用于室外環(huán)境,具有投影儀、電視墻等無法比擬的優(yōu)點(diǎn)。LED點(diǎn)陣顯示屏以高亮度、工作電壓低、功耗小、小型化、壽命長和性能穩(wěn)定的優(yōu)點(diǎn)迅速的發(fā)展。在信息顯示領(lǐng)域得到廣泛的應(yīng)用,例如證券交易、金融信息的顯示、機(jī)場航班動(dòng)態(tài)的顯示等服務(wù)領(lǐng)域的業(yè)務(wù)宣傳及信息顯示。未來的LED顯示屏?xí)蛑鴺?biāo)準(zhǔn)化、規(guī)范化,產(chǎn)品結(jié)構(gòu)多樣化的方向發(fā)展。
采用LED點(diǎn)陣屏與AT89C51單片機(jī)作為主要器件設(shè)計(jì)的64x16點(diǎn)陣LED顯示屏,通過不同的模塊相互聯(lián)系,其中每個(gè)模塊之間只需要極少的聯(lián)系,極大的提高了系統(tǒng)的穩(wěn)定性、可靠性。調(diào)試、維護(hù)的難度大大降低。顯示部分被分為不同的單元獨(dú)立進(jìn)行掃描,每個(gè)單元之間的信號(hào)采用信號(hào)鎖存進(jìn)行同步控制。整個(gè)點(diǎn)陣LED顯示屏具有反應(yīng)靈敏度高、抗干擾能力強(qiáng)、顯示精準(zhǔn)度高和電路穩(wěn)定性良好等優(yōu)點(diǎn),完全滿足常規(guī)室內(nèi)環(huán)境下的使用需要。
1.2 本文研究內(nèi)容
設(shè)計(jì)分辨率為64x16點(diǎn)的點(diǎn)陣LED顯示屏,能夠輸出四個(gè)漢字或8個(gè)字母,具有靜止顯示、滾動(dòng)顯示等顯示方式,同時(shí)具有斷電儲(chǔ)存的功能。采用AT89C51單片機(jī)作為控制模塊的主要器件,設(shè)置獨(dú)立按鍵,可通過控制獨(dú)立按鍵使輸出狀態(tài)在滾動(dòng)或靜止之間切換,LED顯示模塊由16塊8x8的單色點(diǎn)陣、74159芯片和8塊74HC595移位寄存器芯片組成,在默認(rèn)狀態(tài)下采用滾動(dòng)方式顯示字符,可通過按鍵進(jìn)行狀態(tài)轉(zhuǎn)換。顯示電路采用行掃描和列掃描的方法,各單元之間的信號(hào)進(jìn)行同步控制。整個(gè)系統(tǒng)達(dá)到了輸出4個(gè)漢字或字母具有滾動(dòng)、靜止顯示的設(shè)計(jì)要求且電路穩(wěn)定工作。


第2章 方案設(shè)計(jì)與論證2.1 核心控制電路設(shè)計(jì)與論證
方案一:采用由51單片機(jī)實(shí)現(xiàn)控制功能,由74138譯碼器和74LS273地址鎖存器進(jìn)行16塊8x8單色LED點(diǎn)陣的行掃描和列掃描。但是多片鎖存器的控制極為困難,而且51單片機(jī)的I/O資源有限。這種方法的單片機(jī)編程控制較為困難,在調(diào)試過程中有可能出現(xiàn)信號(hào)不同步、掃描出現(xiàn)延時(shí)錯(cuò)誤等情況,電路結(jié)構(gòu)復(fù)雜,可靠性不高。
方案二:采用AT89C51單片機(jī)和獨(dú)立按鍵構(gòu)成控制電路,采用74159芯片對(duì)LED顯示屏進(jìn)行行掃描,同時(shí)使用74HC595移位寄存器芯片進(jìn)行顯示屏的列掃描。因?yàn)?4HC595采用串行控制,大大節(jié)約了單片機(jī)的I/O口資源,同時(shí)降低了編程和調(diào)試的難度。這種方法控制較為方便,輸出穩(wěn)定性好,可靠性高。
與方案一相比,本系統(tǒng)選用方案二作為設(shè)計(jì)方案。獨(dú)立按鍵能有效控制輸出狀態(tài),使輸出能在靜止和滾動(dòng)之間切換,單片機(jī)的I/O口資源能夠大大的節(jié)約,工作穩(wěn)定可靠,抗干擾能力高,實(shí)用性強(qiáng)。
2.2 點(diǎn)陣LED顯示模塊論證
方案一:采用74LS273地址鎖存器與8x8點(diǎn)陣構(gòu)成列掃描,采用兩級(jí)74138譯碼器級(jí)聯(lián)構(gòu)成顯示屏的行掃描。為實(shí)現(xiàn)動(dòng)態(tài)掃描單片機(jī)的控制較為復(fù)雜,編程難度較高。
方案二:選用74HC595移位寄存器構(gòu)成顯示屏的列掃描。I/O口資源得到大大節(jié)約,同時(shí)各級(jí)之間的信號(hào)能夠?qū)崿F(xiàn)同步控制。采用74159 4-16線譯碼-多路分配器作為行掃描。單片機(jī)的控制編程難度大大降低,可靠性大大提高,實(shí)用性更強(qiáng)。
綜上所述,選擇方案二做點(diǎn)陣LED顯示。
2.3 系統(tǒng)設(shè)計(jì)要求
設(shè)計(jì)一個(gè)點(diǎn)陣LED顯示屏,其分辨率為64x16點(diǎn),基于單片機(jī)控制能夠?qū)崿F(xiàn)顯示屏的輸出狀態(tài)的控制。整體電路包括單片機(jī)最小系統(tǒng),按鍵控制電路,點(diǎn)陣LED顯示電路,斷電儲(chǔ)存電路。其中單片機(jī)編程要求程序結(jié)構(gòu)簡單調(diào)試方便,可移植性強(qiáng),可靠性高。按鍵控制電路要求控制靈敏度高、控制精準(zhǔn)度高。顯示電路要求達(dá)到分辨率為64x16點(diǎn)的輸出穩(wěn)定的要求。整體系統(tǒng)能夠滿足在一般室內(nèi)環(huán)境下的使用要求。
任務(wù)要求:
    1、設(shè)計(jì)一個(gè)單片機(jī)控制的室內(nèi)用點(diǎn)陣LED顯示屏。
  2、點(diǎn)陣LED顯示屏分辨率為64x16點(diǎn),可顯示4個(gè)漢字或8個(gè)字母。
  3、具有靜止顯示、滾動(dòng)顯示等顯示方式。
2.4 總體設(shè)計(jì)
本設(shè)計(jì)采用以AT89C51單片機(jī)控制方案。 利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的I/O口資源,可通過按鍵復(fù)位單片機(jī)。通過獨(dú)立按鍵控制使輸出的狀態(tài)在滾動(dòng)和靜止顯示之間切換,通過分辨率為64x16點(diǎn)的點(diǎn)陣LED顯示屏不僅能實(shí)現(xiàn)基本的輸出顯示4個(gè)漢字的控制功能,整體電路具有斷電儲(chǔ)存的功能,還能根據(jù)實(shí)際需要添加控制按鍵實(shí)現(xiàn)更多的功能。系統(tǒng)結(jié)構(gòu)框圖如圖2.1所示。
圖2.1 系統(tǒng)結(jié)構(gòu)框圖
第3章 單元電路設(shè)計(jì)3.1 單片機(jī)最小系統(tǒng)3.1.1 最小系統(tǒng)
采用的AT89C51單片機(jī)利用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。它作為一種高性能的微處理器帶有4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器。AT89C51由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,因此AT89C51是一種高效微控制器得到廣泛的應(yīng)用。由AT89C51單片機(jī),時(shí)鐘電路和復(fù)位電路共同組成了單片機(jī)最小系統(tǒng),可以上電手動(dòng)復(fù)位,同時(shí)集成4個(gè)I/O端口,資源豐富滿足一般控制系統(tǒng)設(shè)計(jì)的需求。單片機(jī)最小系統(tǒng)如圖3.1所示。
圖3.1 單片機(jī)最小系統(tǒng)
3.1.2 時(shí)鐘電路
為了保證各部件的同步工作,單片機(jī)內(nèi)部電路應(yīng)在唯一的時(shí)鐘信號(hào)下嚴(yán)格地按照時(shí)序進(jìn)行工作。MCS-51系列單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器,但要形成時(shí)鐘脈沖,外部還需要附加電路。這里采用內(nèi)部時(shí)鐘方式,單片機(jī)的兩個(gè)引腳XTAL1和XTAL2兩端跨接晶體振蕩器。外接晶振選擇12MHz,電容C1和C2選擇30pF獨(dú)石電容,同時(shí)為了減小寄生電容,更好的保證振蕩器穩(wěn)定、可靠的工作,振蕩器和電容應(yīng)盡量安裝的靠近單片機(jī)的XTAL1和XTAL2引腳。時(shí)鐘電路圖如圖3.2所示。
圖3.2 時(shí)鐘電路圖
3.1.3 復(fù)位電路
復(fù)位是單片機(jī)的初始化操作,單片機(jī)系統(tǒng)在上電啟動(dòng)運(yùn)行時(shí),都需要先復(fù)位。其作用是使CPU和系統(tǒng)中其它部件都處于一個(gè)確定的初始狀態(tài),但是單片機(jī)本身是不能自動(dòng)進(jìn)行復(fù)位的,必須配合相應(yīng)的外部復(fù)位電路才能實(shí)現(xiàn)。
利用電容器的充電實(shí)現(xiàn),在單片機(jī)的RST端連續(xù)給出兩個(gè)機(jī)器周期的高電平就可以完成復(fù)位操作。選擇22μF的電解電容與電源Vcc和復(fù)位端相連,10K的電阻與復(fù)位端和地相連構(gòu)成復(fù)位電路,也可通過按鍵復(fù)位。復(fù)位電路圖如圖3.3所示。
圖3.3 復(fù)位電路圖
3.2 按鍵控制模塊
獨(dú)立按鍵具有結(jié)構(gòu)簡單控制方便,但是在實(shí)際使用中必須去抖。按鍵在按下和松開的時(shí)候都存在抖動(dòng)問題,不能將抖動(dòng)誤認(rèn)為多次按鍵,通常可以采用軟件去抖的方法,也可以采用硬件去抖的方法。這里選擇軟件去抖的方法。按鍵控制電路要求控制靈敏度高、控制精準(zhǔn)度高。選擇單片機(jī)P3.2端口和按鍵相連,在編程中可采用外部中斷0進(jìn)行判斷控制,使輸出在滾動(dòng)和靜止的狀態(tài)之間切換。按鍵電路圖如圖3.4所示。
圖3.4 按鍵電路圖
3.3 斷電儲(chǔ)存模塊
采用AT24C512作為主要的斷電儲(chǔ)存模塊,它是ATMEL公司生產(chǎn)的64KB串行電可擦的可編程存儲(chǔ)器,內(nèi)部有512頁,每一頁為128字節(jié),任一單元的地址為16位,地址范圍為0000-0FFFH。采用8引腳封裝,具有結(jié)構(gòu)緊湊,存儲(chǔ)容量大等特點(diǎn),可以在2線總線上并接4片芯片,特別適用于具有大容量數(shù)據(jù)存儲(chǔ)要求的數(shù)據(jù)采集系統(tǒng),因此完全滿足輸出數(shù)據(jù)的存儲(chǔ)且其存儲(chǔ)容量完全滿足要求。斷電存儲(chǔ)電路圖如圖3.5所示。
圖3.5 存儲(chǔ)電路圖
3.4 驅(qū)動(dòng)模塊
3.4.1 行驅(qū)動(dòng)
采用74159 4-16線譯碼-多路分配器芯片進(jìn)行行掃描。它抗噪聲能力強(qiáng),功耗低且與低電壓TTL電路兼容。只要掃描頻率設(shè)置合適,點(diǎn)陣屏就可以看成是穩(wěn)定平滑過渡,
沒有閃爍的感覺,給人以正常的視覺效果。將芯片的使能端均接地讓其正常工作,通過單片機(jī)的P1口的低四位輸出0000B-1111B即十進(jìn)制的0-15的數(shù)值,通過一次譯碼后74159的輸出端有唯一引腳輸出為低電平信號(hào),其它引腳的輸出均為高電平信號(hào)。通過
軟件編程循環(huán)就可實(shí)現(xiàn)對(duì)LED顯示屏的行掃描。行驅(qū)動(dòng)電路圖如圖3.6所示。
圖3.6 行驅(qū)動(dòng)電路圖
3.4.2 列驅(qū)動(dòng)
采用74HC595移位寄存器作為列驅(qū)動(dòng)的主要器件。74HC595是一款漏極開路輸出的CMOS移位寄存器,輸出端口為可控的三態(tài)輸出端,也能串行輸出控制下一級(jí)的級(jí)聯(lián)芯片,而且功耗低、高速移位時(shí)鐘頻率Fmax>25MHz,滿足設(shè)計(jì)的需要。
74HC595芯片的SDI為串行數(shù)據(jù)輸入端接單片機(jī)的P2.0端口;SH_CP為移位寄存器的時(shí)鐘輸入端,上升沿時(shí)移位寄存器的數(shù)據(jù)依次移動(dòng)一位,下降沿保持寄存器的數(shù)據(jù)不變,接單片機(jī)的P2.1端口;ST_CP為存儲(chǔ)寄存器的時(shí)鐘輸入端,上升沿時(shí)移位寄存器中的數(shù)據(jù)進(jìn)入存儲(chǔ)寄存器,下降沿保持存儲(chǔ)寄存器中數(shù)據(jù)不變。
應(yīng)用時(shí)通常ST_CP置為低電平,移位結(jié)束后再在ST_CP端產(chǎn)生一個(gè)正脈沖更新顯示數(shù)據(jù),接單片機(jī)的P2.2端口。用AT89C51的三個(gè)I/O分別控制SDI、SH_CP和ST_CP,將RST和OE分別接Vcc和地。各級(jí)之間通過上一級(jí)芯片的第9腳即SQH串行數(shù)據(jù)輸出管腳和下一級(jí)的SDI串行數(shù)據(jù)輸入引腳相連。可通過編程實(shí)現(xiàn)對(duì)字符數(shù)據(jù)表的移位輸出,同時(shí)各單元之間的信號(hào)能夠同步進(jìn)行控制。列驅(qū)動(dòng)電路圖如圖3.7所示。

圖3.7 列驅(qū)動(dòng)電路
3.5 點(diǎn)陣LED模塊
為了到達(dá)分辨率64x16點(diǎn)的設(shè)計(jì)要求,采用16塊8x8的LED單色點(diǎn)陣組成LED顯示屏。將顯示屏的列控制引腳分別對(duì)應(yīng)并聯(lián)至74HC595移位寄存器的輸出端。將上半屏和下半屏的行控制引腳對(duì)應(yīng)連接至74159 4-16線譯碼-多路分配器的輸出端。通過單片機(jī)控制行掃描和列掃描實(shí)現(xiàn)輸出4個(gè)漢字的功能。點(diǎn)陣LED電路如圖3.8所示。
圖3.8 點(diǎn)陣LED電路
第4章 系統(tǒng)軟件設(shè)計(jì)4.1 主程序的設(shè)計(jì)
單片機(jī)上電后自動(dòng)復(fù)位,開始執(zhí)行程序初始化程序,進(jìn)行行掃描和列掃描,默認(rèn)狀態(tài)是循環(huán)向左滾動(dòng)顯示“愛我中華”4個(gè)漢字。若獨(dú)立按鍵則執(zhí)行狀態(tài)切換,此時(shí)LED屏靜止顯示“愛我中華”4個(gè)漢字。當(dāng)按鍵再次按下則再次切換為循環(huán)向左滾動(dòng)的狀態(tài),否則一直保持顯示狀態(tài)。主程序流程如圖4.1所示。
圖4.1 主程序流程圖
4.2 按鍵程序設(shè)計(jì)
單片機(jī)通過檢測獨(dú)立按鍵的狀態(tài),若獨(dú)立按鍵被按下開始執(zhí)行去抖程序,如果按鍵有效則在向左滾動(dòng)或者靜止顯示狀態(tài)之間切換,控制LED顯示屏輸出的狀態(tài),否則不會(huì)執(zhí)行切換程序保持原來的狀態(tài),一直維持在行掃描和列掃描的狀態(tài)。同時(shí)繼續(xù)檢測是否有按鍵按下,實(shí)時(shí)根據(jù)按鍵控制顯示屏的顯示模式。按鍵程序流程圖如圖4.2所示。
圖4.2 按鍵程序設(shè)計(jì)流程圖



第5章 系統(tǒng)仿真與調(diào)試
使用Proteus軟件繪制原理圖,然后將編程軟件Keil生成的hex程序文件載入到AT89C51單片機(jī)中,點(diǎn)擊仿真運(yùn)行:
1、默認(rèn)LED顯示屏顯示4個(gè)漢字“愛我中華”,循環(huán)向左滾動(dòng)顯示。左滾動(dòng)顯示仿真結(jié)果如圖5.1所示。
圖5.1 左滾動(dòng)顯示
2、當(dāng)獨(dú)立按鍵按下,若經(jīng)過去抖程序,判斷為有效則在向左滾動(dòng)或靜止顯示兩種狀態(tài)之間進(jìn)行轉(zhuǎn)換,控制LED顯示屏輸出顯示的模式。在默認(rèn)左滾動(dòng)狀態(tài)下,按下按鍵,LED輸出靜止?fàn)顟B(tài)下的“愛我中華”4個(gè)漢字。靜止顯示仿真結(jié)果如圖5.2所示。
圖5.2 靜止顯示
綜合以上仿真結(jié)果分析:設(shè)計(jì)的點(diǎn)陣LED顯示滿足輸出4個(gè)漢字的功能,且可以進(jìn)行靜止?fàn)顟B(tài)和滾動(dòng)狀態(tài)之間的切換,滿足設(shè)計(jì)的要求。

第6章 總結(jié)
本次課程設(shè)計(jì)的題目是點(diǎn)陣LED顯示屏設(shè)計(jì)。設(shè)計(jì)過程包括理解設(shè)計(jì)要求,查閱相關(guān)資料,到Proteus軟件設(shè)計(jì)和仿真。要求達(dá)到輸出4個(gè)漢字或8個(gè)字母,且具有靜止或滾動(dòng)顯示等顯示模式的設(shè)計(jì)要求。
設(shè)計(jì)的點(diǎn)陣LED顯示屏包括單片機(jī)控制部分電路和LED顯示電路。其中單片機(jī)控制部分電路,包括AT89C51單片機(jī)、時(shí)鐘電路、復(fù)位電路和按鍵控制電路,可以通過軟件編程實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的控制功能。由多塊LED 8x8點(diǎn)陣構(gòu)成LED顯示屏,通過行列控制引腳分別與74159 4-16線譯碼-多路分配器芯片和74HC595移位寄存器芯片進(jìn)行相應(yīng)的連接。其中以74HC595芯片為主要器件,設(shè)計(jì)的點(diǎn)陣LED顯示屏要求分辨率為64x16點(diǎn),可顯示4個(gè)漢字或8個(gè)字母,具有靜止顯示、滾動(dòng)顯示等顯示方式,且滿足一般室內(nèi)環(huán)境下的使用需求。整個(gè)系統(tǒng)結(jié)構(gòu)緊湊、參數(shù)設(shè)置合理,具有控制靈敏度高,電路穩(wěn)定性好,抗干擾能力強(qiáng)等優(yōu)點(diǎn)。
但是設(shè)計(jì)點(diǎn)陣LED顯示屏需要結(jié)合實(shí)際綜合考慮很多因素,因此該點(diǎn)陣LED顯示屏設(shè)計(jì)需要在實(shí)際應(yīng)用中進(jìn)一步改進(jìn)和完善。另外,在單片機(jī)控制程序方面,該設(shè)計(jì)只實(shí)現(xiàn)了顯示4個(gè)漢字,具有靜止顯示或滾動(dòng)顯示兩種顯示方式的控制。要想在現(xiàn)實(shí)生活中推廣,還必須針對(duì)實(shí)際應(yīng)用場合的需要,進(jìn)一步完善LED顯示屏的其它功能。

整體電路原理圖

單片機(jī)源碼:
  1. #include <reg51.H>
  2. #include <intrins.h>
  3. #define I2Cdelay() {_nop_();_nop_();_nop_();_nop_();}
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar flag=1,yid,h;        //YID為移動(dòng)計(jì)數(shù)器,H為行段計(jì)數(shù)器
  7.                                //flag=1 左移顯示 flag=0靜態(tài)顯示  
  8. uint zimuo;                               //字模計(jì)數(shù)器
  9. uchar BUFF[10];                           //緩存
  10. void in_data(void);                       //調(diào)整數(shù)據(jù)
  11. void rxd_data(void);               //發(fā)送數(shù)據(jù)
  12. void Scan(void);                           //掃描
  13. void I2CStart(void);
  14. void I2CWrite(uchar dat);
  15. sbit R=P2^0;                       //數(shù)據(jù)輸入端口
  16. sbit CLK=P2^1;                       //時(shí)鐘信號(hào)
  17. sbit STB=P2^2;                       //鎖存端
  18. sbit key=P3^2;                                   //定義按鍵
  19. sbit I2C_SCL = P3^7;
  20. sbit I2C_SDA = P3^6;
  21. uchar code table[]={
  22. /*前4位無顯示*/
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  24. …………
  25. …………
  26. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………

  27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

  28. void delay(int z)                               //延時(shí)
  29. {
  30.      int x,y;
  31.      for(x=0;x<z;x++)
  32.                 for(y=0;y<50;y++);
  33. }

  34. void main(void)
  35. {
  36.      uchar i,speed=2;
  37.      yid=0;
  38.      zimuo=0;
  39.          I2CStart();
  40.      I2CWrite(0xA0);         //10100001讀10100000寫        
  41.          EA=1;EX0=1;IT0=1;                          //全局中斷開,中斷0初始化                                                           
  42.      
  43.          while(1)
  44.      {
  45.             if(flag==1)
  46.                 {
  47.                   while(zimuo<8*32)
  48.              {   if(flag==1)
  49.                      {
  50.                             while(yid<16)                                //數(shù)據(jù)移位。
  51.                            {        if(flag==1)
  52.                               {
  53.                                          for(i=0;i<speed;i++)       //移動(dòng)速度
  54.                                          {        
  55.                                             if(flag==1)
  56.                                             {Scan();}
  57.                                                 else break;
  58.                                          }
  59.                                          yid++;                                    //移動(dòng)一步
  60.                               }
  61.                                 else  break;
  62.                        }
  63.                    yid=0;
  64.                    zimuo=zimuo+32;                                //后移一個(gè)字,
  65.                     }
  66.                         else break;
  67.              }
  68.              zimuo=0;                               //到最后從頭開始,有字?jǐn)?shù)決定
  69.         }
  70.             else
  71.              {  
  72.                 zimuo=128;                                                //靜態(tài)掃描從第一個(gè)中文字開始
  73.                     Scan();
  74.              }
  75.          }
  76. }

  77. /*----------中斷0的服務(wù)子程序-----------*/
  78. void int_0s() interrupt 0 using 0
  79. {
  80.             if(key==0)
  81.           {
  82.              delay(2);                                                                //去抖
  83.                  if(key==0)
  84.                  flag=~flag;
  85.                  while(key==0);                                                    //等待按鍵釋放
  86.           }
  87.          
  88. }

  89. /*-------------掃描函數(shù)-----------------*/
  90. void Scan()
  91. {
  92.       for(h=0;h<16;h++)                                //16行掃描
  93.       {
  94.                    in_data();                                        //調(diào)整數(shù)據(jù)
  95.                    rxd_data();                                    //串口發(fā)送數(shù)據(jù)
  96.                P1=h;                                            //送行選
  97.                    STB=1;
  98.                    STB=0;
  99.                    delay(2);                        
  100.           }
  101. }

  102. void in_data(void)
  103. {
  104.           uchar s;
  105.       for(s=0;s<5;s++)                                       
  106.           {
  107.                    BUFF[2*s]=table[zimuo+32*s+2*h];     /*把第一個(gè)字模的第一個(gè)字節(jié)放入BUFF0
  108.                                                     中,第二個(gè)字模的第一個(gè)字節(jié)放入BUFF2中*/
  109.                    BUFF[2*s+1]=table[zimuo+1+32*s+2*h]; /* 把第一個(gè)字模的第二個(gè)字節(jié)放入BUFF1
  110.                                                                                                 中,第二個(gè)字模的第二個(gè)字節(jié)放入BUFF3中*/                          
  111.           }         
  112. }

  113. /**********74HC595輸出函數(shù)*************/
  114. void rxd_data(void)                                        //串行發(fā)送數(shù)據(jù)
  115. {
  116.           char s;
  117.           uchar inc,tempyid,temp;
  118.           uchar k;
  119.           R=1;
  120.           if(yid<8)
  121.             inc=0;
  122.           else
  123.             inc=1;
  124.           for(s=0+inc;s<=7+inc;s++)                                //發(fā)送2字節(jié)數(shù)據(jù)
  125.                 {
  126.                         if(yid<8)
  127.                     tempyid=yid;
  128.                     else
  129.                     tempyid=yid-8;
  130.                 //字模左邊字節(jié)右移tempyid位,右邊字節(jié)左移8-tempyid位,2者相或
  131.                     temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid));
  132.                           for(k=0;k<8;k++)
  133.                         {
  134.                               I2C_SCL =1;          //拉高SCL
  135.                                   CLK=0;
  136.                                 //R=(bit)(temp&0x80);
  137.                                    temp=temp>>1;
  138.                                   R=CY;
  139.                                   CLK=1;
  140.                                   I2C_SDA =R;
  141.                                   I2C_SCL =0;          //再拉低SCL,完成一個(gè)位周期
  142.                         }
  143.                 }
  144. }


  145. /*----------AT24C512-------------*/
  146. /* 產(chǎn)生總線起始信號(hào) */
  147. void I2CStart()
  148. {
  149.                 I2C_SDA=1; //首先確保SDA、SCL都是高電平
  150.                 I2C_SCL=1;
  151.                 I2Cdelay();
  152.                 I2C_SDA=0; //先拉低SDA
  153.                 I2Cdelay();
  154.                 I2C_SCL=0; //再拉低SCL
  155. }


  156. /* I2C總線寫操作,dat-待寫入字節(jié),返回值-從機(jī)應(yīng)答位的值 */
  157. void I2CWrite(uchar dat)
  158. {
  159.                
  160.                 uchar mask;  //用于探測字節(jié)內(nèi)某一位值的掩碼變量
  161.                 for (mask=0x80;mask!=0;mask>>=1) //從高位到低位依次進(jìn)行
  162.                 {
  163.                         if ((mask&dat)==0)  //該位的值輸出到SDA上
  164.                         I2C_SDA=0;
  165.                         else
  166.                         I2C_SDA=1;
  167.                         I2Cdelay();
  168.                         I2C_SCL=1;          //拉高SCL
  169.                         I2Cdelay();
  170.                         I2C_SCL=0;          //再拉低SCL,完成一個(gè)位周期
  171.                 }
  172.                 I2C_SDA=1;   //8位數(shù)據(jù)發(fā)送完后,主機(jī)釋放SDA
  173.                                 
  174. }
復(fù)制代碼


0.png 0.png

全部資料51hei下載地址:
16X64.zip (4.64 MB, 下載次數(shù): 98)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:423237 發(fā)表于 2018-11-10 22:06 | 顯示全部樓層
厲害優(yōu)秀
回復(fù)

使用道具 舉報(bào)

ID:12348 發(fā)表于 2018-12-3 01:49 | 顯示全部樓層
非常感謝,正是要找的資料
回復(fù)

使用道具 舉報(bào)

ID:437480 發(fā)表于 2018-12-3 07:53 來自觸屏版 | 顯示全部樓層
簡單有效
回復(fù)

使用道具 舉報(bào)

ID:535325 發(fā)表于 2019-5-11 14:35 | 顯示全部樓層
找了這么久終于找到啦
回復(fù)

使用道具 舉報(bào)

ID:535325 發(fā)表于 2019-5-15 15:22 | 顯示全部樓層
請(qǐng)問有沒有擴(kuò)展到16*128點(diǎn)陣顯示屏的C語言代碼
回復(fù)

使用道具 舉報(bào)

ID:538578 發(fā)表于 2019-5-15 16:02
這周剛好用到這個(gè),寫課設(shè)給了我很大啟發(fā)

ID:666160 發(fā)表于 2019-12-17 15:26 | 顯示全部樓層
你好,這個(gè)怎么在proteus里打開啊
回復(fù)

使用道具 舉報(bào)

ID:666160 發(fā)表于 2019-12-17 15:28 | 顯示全部樓層
下載好的壓縮包,怎么用proteus打開這個(gè)仿真啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品国产三级国产aⅴ无密码 | 亚州影院 | 人人爽人人爽 | 天天干夜夜操视频 | 在线一区观看 | 久久久成人网 | 黄色亚洲网站 | 日日摸天天添天天添破 | 国产精品视频一 | 国产欧美日韩精品一区 | 亚洲三区在线观看 | 久久久国产一区二区三区四区小说 | 7777精品伊人久久精品影视 | 一区二区三区av | 成人精品视频 | www.四虎.com| h在线免费观看 | 久久久天堂 | 91久久久久久久久久久久久 | 亚洲欧美网 | 国产激情91久久精品导航 | 欧美男人亚洲天堂 | 手机av在线 | 日日干夜夜干 | 性做久久久久久免费观看欧美 | 在线观看免费av网 | 蜜臀久久99精品久久久久野外 | 欧美另类视频 | 视频在线一区二区 | 性色视频在线观看 | 久久一级免费视频 | 日韩三级在线观看 | 天天色综 | 国产一区中文字幕 | 国产精品免费视频一区 | 人操人人干人 | 草久视频 | 欧洲亚洲一区二区三区 | 成人免费观看网站 | 欧美日韩一区在线播放 | 国产精品久久精品 |