武漢理工大學16點陣課程設計任務書_第1頁
武漢理工大學16點陣課程設計任務書_第2頁
武漢理工大學16點陣課程設計任務書_第3頁
武漢理工大學16點陣課程設計任務書_第4頁
武漢理工大學16點陣課程設計任務書_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

武漢理工大學《單片機應用實踐》課程設計摘要本設計是一16*16點陣LED電子顯示屏的設計,整機以美國ATMEL公司生產的40腳單片機AT89C51為核心,介紹了以它為控制系統的LED點陣電子顯示屏的動態設計和開發過程。通過該芯片控制兩個行驅動器74HC595和兩個列驅動器74HC595米驅動顯示。該電子顯示屏可以顯示各種文字或單色圖像,全屏能顯示1個漢字,采用4塊8*8點陣LED顯示模塊組成16*16點陣顯示模式。顯示采用動態顯示,圖形或文字能夠實現靜止、移入移出等多種顯示方式。文中詳細介紹了LED點陣顯示的硬件設計思路、硬件電路個個部分的功能原理、相應軟件的程序設計,以及使用說明等。單片機控制系統程序采用單片機匯編語言進行編輯,通過編程控制各顯示點對應LED陽極和陰極端的電平,就可以有效的控制各顯示點的亮滅。所顯示字符的點陣數據可以自行編寫,也可以標準字庫中提取。LED顯示以其組構方式靈活、顯示穩定、功耗低、壽命長、技術成熟、成本低廉等特點在車站、證券所、運動場館、公交干道及各種室內外顯示場合的信息發布,公益宣傳,重大活動倒計時等等得到廣泛的應用。關鍵詞:LED點陣;單片機;仿真目錄摘要 .芯片概述1.151單片機簡介單片機(Microcontroller,又稱微處理器)是在一塊硅片上集成了各種部件的微型機,這些部件包括中央處理器CPU、數據存儲器RAM、程序存儲器ROM、定時器/計數器和多種I/O接口電路。51單片機的基本結構見圖1。圖151單片機基本結構1.2AT89C51芯片AT89C51是一種帶4KB閃爍可編程可擦除只讀存儲器的低電壓、高性能CMOS型8位微處理器,俗單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,能夠進行1000次寫/擦循環,數據保留時間為10年。他是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。因此,在智能化電子設計與制作過程中經常用到AT89C51芯片。AT89C51管腳圖如下;圖2AT98C51管腳圖1.316*16LED點陣8×8單色點陣共需要64個發光二極管組成,且每個二極管是放置在行線與列線的叉點上。對于點陣型LED顯示可以采用共陰極或共陽極,本系統采用共陽極,其硬件電路如圖3所示。當行上有一正選通信號時,列選端八位數據為0的發光二極管便導通點亮。這樣只需要將圖形或文字的顯示編碼作為列信號跟對應的行信號進行逐次掃描,就可以逐行點亮點陣。只要掃描速度大于24Hz,由于掃描時間很快,人眼的視覺有暫留效應,就可以看到顯示的是完整的圖形或文字。8*8點陣內部結構如下圖:圖38*8點陣內部結構圖1.474HC595芯片74HC595芯片是一種串入并出的芯片,在電子顯示屏制作當中有廣泛的應用。74HC595是8位串行輸入/輸出或者并行輸出移位寄存器,具有高阻、關、斷三態。移位寄存器和存儲器是分別的時鐘。數據在SRCK的上升沿輸入,在RCK的上升沿進入存儲寄存器。如果兩個時鐘連在一起,則移位寄存器總是比存儲寄存器早一個脈沖,電路中,將兩個時鐘分開控制,目的是先移好位,再存儲數據,這樣在移位的過程中,可保持輸出的數據。移位寄存器有一個串行移位輸入(Ds),和一個串行輸出(QH‘),電路將其接入下一個IC的輸入(Ds)組成16位移位存儲。一個異步的低電平復位/MR,電路中不使用復位信號,將此腳直接接入電源VCC)。存儲寄存器有一個并行8位的,具備三態的總線輸出,當使能OE時(為低電平),存儲寄存器的數據輸出到總線,電路中直接將此腳接GND,做直接輸出。74HC595管腳如下:圖474HC595管腳圖74HC595的數據端

:QA--QH:八位并行輸出端,可以直接控制數碼管的8個段。QH':級聯輸出端。

SI:串行數據輸入端。74HC595的控制端:

/SRCLR(10腳):低電平時將移位寄存器的數據清零。

SRCK(11腳):上升沿時數據寄存器的數據移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器數據不變。RCK(12腳):上升沿時移位寄存器的數據進入數據存儲寄存器,下降沿時存儲寄存器數據不變。當移位結束后,在RCK端產生一個正脈沖,更新顯示數據。OE(13腳):高電平時禁止輸出(高阻態)。2.總體設計思路點陣顯示電路大體上可以分成51單片機電路、驅動電路、16*16點陣顯示電路三部分。51單片機電路部分包括一個51單片機和一些外圍電路。在整個電路當中此電路部分相當于一個總機,它負責控制整個電路以及相應的程序的運行、PC機的串行通訊、給驅動電路部分發送命令。由于點陣顯示屏、以及它的行和列的驅動電路兩部分的電路在一塊開發板上,因此可以將其字庫放到單片機電路部分使用串行通訊方式來與點陣顯示電路部分進行數據和命令的傳送。因為所買的單片機上只有一個3—8線譯碼器而沒有4—16線譯碼器,而16*16點陣行和列都要使用16個控制端來控制每行每列LED的亮滅,因此不能用外接譯碼器來控制,改而用4個移位寄存器來控制。單片機通過一個P3.4口向第一個移位寄存器輸出8位的二進制數據,輸出第二個8位數據時,第一個數據由移位寄存器的級聯端輸出到第二個移位寄存器中,單片機總共要輸出4個8位二進制數據。當全部輸出完時,由軟件向4個移位寄存器的RCK管腳提供上升沿,4個移位寄存器里的數據全部輸出到點陣,則點陣上對應的一點會發光,將一個漢字對應的32個數據全部輸入,在頻率較高時就能看到一個漢字了。總體設計框圖如下:圖5設計框圖3.硬件設計3.1單片機模塊3.1.1模塊連線圖6單片機接線圖3.1.2模塊設計分析16*16點陣顯示設計中串行數據從P3.4口輸入到移位寄存器中,P3.5和P3.6作為控制信號輸出端控制數據移入和移出寄存器。單片機外圍電路一般有兩塊:時鐘電路和復位電路。時鐘電路由一個晶振和兩個小電容組成,用來產生時鐘頻率復位電路由一個電阻、按鍵和一個電容組成,用來產生復位信號,使單片機上電的時候復位。3.2行驅動電路模塊3.2.1模塊連線圖7行驅動電路圖3.2.2模塊設計分析OE管腳接低電平為允許寄存器輸出;/SRCLR(10腳):低點平時將移位寄存器的數據清零。LED點陣顯示為循環顯示,因此不用將移位寄存器里的數據清零。所以10腳接高電平,在這里接Vcc;SI為數據輸入端,第一個74HC595移位寄存器輸入端接單片機的數據輸出端P3.5口;級聯輸出端QH'接第二個移位寄存器的數據輸入端;SRCK(11腳)有上升沿時數據移位。順序為QA-->QB-->QC-->...-->QH,下降沿移位寄存器數據不變。RCK(12腳)有上升沿時移位寄存器的數據進入數據存儲寄存器,下降沿時存儲寄存器數據不變。4個移位寄存器的SRCK和RCK管腳分別接P3.6和P3.5,由軟件提供上升沿。行驅動電路里的兩個移位寄存器分別控制16*16點陣的1-8和9-16行。3.3列驅動電路模塊3.3.1模塊連線圖8列驅動電路圖3.3.2模塊設計分析列驅動電路中也包括兩個移位寄存器。其中,第一個移位寄存器的數據輸入端SI接行驅動電路中的第二個移位寄存器的級聯輸出端QH'。第二個移位寄存器的數據輸入端接第一個移位寄存器的級聯輸出端QH’,并行輸出端和SRCK和RCK管腳連接方式和行驅動電路相同。每次采用串行輸入,當74HC595有上跳時鐘信號時,串入一位。當移入16位數據時,就開通數據輸出驅動列信號。其所傳入的數據是每個字每列的列碼。3.416*16LED點陣模塊3.4.1模塊連線4個8*8點陣級聯構成16*16點陣如下圖:圖916*16點陣圖3.4.216*16點陣掃描方法LED驅動顯示采用動態掃描方法,動態掃描方式是逐行輪流點亮,這樣掃描驅動電路就可以實現多行的同名列共用一套列驅動器。以16×16點陣為例,把所有同一行的發光管的陽極連在一起,把所有同一列的發光管的陰極連在一起(共陽的接法),先送出對應第1行發光管亮滅的數據并鎖存,然后選通第1行使其燃亮一定的時間,然后熄滅;再送出第2行的數據并鎖存,然后選通第2行使其燃亮相同的時間,然后熄滅;…。第16行之后,又重新燃亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現象,就能看到顯示屏上穩定的圖形。顯示數據傳輸采用串行傳輸的方法,控制電路可以只用一根信號線,將列數據一位一位傳往列驅動器,在硬件方面無疑是十分經濟的。但串行傳輸過程較長,數據按順序一位一位地輸出給列驅動器,只有當一行的各列數據都已傳輸到位之后,這一行的各列才能并行地進行顯示。對于串行傳輸方式來說,列數據準備時間可能相當長,在行掃描周期確定的情況下,留給行顯示的時間就太少了,以致影響到LED的亮度。采用串行傳輸中列數據準備和列數據顯示的時間矛盾,可以采用重疊處理的方法。即在顯示本行各列數據的同時,傳送下一行的列數據。為了達到重疊處理的目的,列數據的顯示就需要有鎖存功能。對于列數據準備來說,它應能實現串入并出的移位功能。這樣,本行已準備好的數據打入并行鎖存器進行顯示時,串行移位寄存器就可以準備下一行的列數據,而不會影響本行的顯示。LED點陣顯示模塊進行的方法有兩種:(1)水平方向(X方向)掃描,即逐列掃描的方式(簡稱列掃描方式):此時P3.4口輸出的列碼決定哪一列能亮,P3.4口輸出的行碼,決定該行上那哪個LED亮。能亮的列從左到右掃描完16列(相當于循環移動16次)即顯示出一個完整的圖像。(2)豎直方向(Y方向)掃描,即逐行掃描方式(簡稱行掃描方式):此時P3.4口輸出的行碼決定哪一行能亮,另一個P口輸出列碼決定該行上哪些LED燈亮。能亮的行從上向下掃描完16行(相當于循環移位16次)即顯示一幀完整的圖像。本設計應用的是第二種的掃描方法,即豎直方向(Y方向)掃描。每一個字由16行16列的點陣形成顯示,即每個字均由256個點陣來表示,我們可以把每一個點理解為一個像素。一般我們使用的16×16的點陣宋體字庫,即所謂的16×16,是每一個漢字在縱橫各16點的區域內顯示的。漢字庫從該位置起的32字節信息記錄了該字的字模信息。事實上這個漢字屏不僅可以顯示漢字,也可以顯示在256像素范圍內的任何圖形。3.4.3點陣顯示設計顯示電路采用掃描方式進行顯示時,每行有兩個行驅動器,各行的同名列共用一個列驅動器。由行譯碼器給出的行選通信號,從第一行開始,按順序依次對各行進行掃描(把該行與電源的一端接通)。另一方面,根據各列鎖存的數據,確定相應的列驅動器是否將該列與電源的另一端接通。接通的列,就在該行該列點燃相應的LED;未接通的列所對應的LED熄滅。可通過掃描輸出口的控制實現顏色的轉換。4.程序設計4.1程序流程圖16*16LED點陣顯示原理為由單片機先送出對應第1行發光管亮滅的數據并鎖存,然后選通第1行使其燃亮一定的時間,然后熄滅;再送出第2行的數據并鎖存,然后選通第2行使其燃亮相同的時間,然后熄滅;…。第16行之后,又重新燃亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現象,就能看到顯示屏上穩定的圖形。因此,程序流程圖如下開始開始開始開始定義4定義4個8位變量建立字碼表i=0初始化i=0初始化i<8Ms>0i<8Ms>0NN發送第一個變量的最高位K=0 Y發送第一個變量的最高位K=0K<16K<16移位移位NYSRCK上升沿調用子程序SRCK上升沿調用子程序I=I+1K=K-1I=I+1K=K-1發送其他三個數據MS=MS-1發送其他三個數據MS=MS-1RCK上升沿RCK上升沿清屏,進入下一個循環返回返回 圖10主程序流程圖 圖11子程序流程圖4.2代碼分析4.2.1字碼表以第一個字為例://點陣顯示數組ucharcodetab0[]={0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00};//--電--//Ucharcodetab1[]={128,0,128,0,128,0,252,31,132,16,132,16,252,31,132,16,132,16,252,31,132,0,128,32,128,32,0,63,0,0,0,0};點陣顯示數組存放的是行掃描碼,每次掃描取兩個,由單片機發送到兩個行移位寄存器中,允許16行中的特定一行LED亮。在子程序中,行掃描為從第一行到第十六行一次點亮,反復循環多次。TAB1中存放的是‘電’字的字碼,單片機輸出到列移位寄存器中再去驅動LED點陣發光。4.2.2主程序voidmain(void){intk,i,ms;i=80; //顯示時間 //--顯示"電"--// for(ms=i;ms>0;ms--) {for(k=0;k<16;k++) {HC595SendData(~tab1[2*k+1],~tab1[2*k],tab0[2*k],tab0[2*k+1]); } } HC595SendData(0xff,0xff,0,0); //--清屏--}在主程序中里層循環調用了子程序,子程序運行一次,在16*16LED點陣上一行LED允許發光,循環了16次則16行LED依次發光,當掃描速度很快時便能夠顯示一個漢字。外層循環是使一個漢字顯示i次,讓人眼能夠看到漢字。4.2.3子程序voidHC595SendData(ucharBT3,ucharBT2,ucharBT1,ucharBT0){uchari; //--發送一個字節--// for(i=0;i<8;i++) {MOSIO=BT3>>7; //從高位到低位依次發送 BT3<<=1; //BT3左移1位 S_CLK=0; S_CLK=1; } //--發送一個字節--// for(i=0;i<8;i++) {MOSIO=BT2>>7; //從高位到低位 BT2<<=1; S_CLK=0; S_CLK=1; } //--發送一個字節--// for(i=0;i<8;i++) {MOSIO=BT1>>7; //從高位到低位 BT1<<=1; S_CLK=0; S_CLK=1; } //--發送一個字節--// for(i=0;i<8;i++) {MOSIO=BT0>>7; //從高位到低位 BT0<<=1; S_CLK=0; S_CLK=1; } //--輸出--// R_CLK=0;//setdatalinelow R_CLK=1;//片選 R_CLK=0;//setdatalinelow}函數功能為單片機發送四個字節的數據到移位寄存器中,控制每行中特定幾列LED發光。5.調試與仿真5.1keil調試圖11keil調試圖5.2proteus仿真圖12proteus仿真圖6.心得體會通過這次的課程設計的制作讓我對單片機的理論有了更加深入的了解,同時在具體的制作過程中我們發現現在書本上的知識與實際的應用存在著不小的差距,書本上的知識很多都是理想化后的結論,忽略了很多實際的因素,或者涉及的不全面,可在實際的應用時這些是不能被忽略的,我們不得不考慮這方的問題,這讓我們無法根據書上的理論就輕易得到預想中的結果,有時結果甚至很差別很大。通過這次實踐使我更深刻的體會到了理論聯系實際的重要性,我們在今后的學習工作中會更加的注重實際,避免稱為只會紙上談兵的趙括。通過查閱大量的相關資料,詳細了解了LED的發光原理和LED顯示屏的原理,明確了研究目標。并且通過對單片機資料的查閱和應用,更進一步增加了對單片機知識的理解和運用能力。并證實了自己的思路:“查資料→思考總結→運用→找出差錯,再查資料和向別人詢問→再次運用”的正確性。在這次設計的過程中熟悉了proteus和keil的使用,使用它們調試軟硬件就方便多了,有強大的功能。總之,通過這次課程設計,我更熟練的掌握了單片機的知識,學會了對知識的運用。在這個過程中,我曾經因為實踐經驗的缺乏失落過,也曾經仿真成功而熱情高漲。雖然這只是一次的極簡單的課程制作,可是平心而論,也耗費了我不少的心血。在課程設計過程中,收獲知識,提高能力的同時,我也學到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現這個計劃,并掌握了在執行過程中怎么樣去克服心理上的不良情緒。同時我也明白對任何事情如果付出越多,那么你收獲也就越多。因此在以后的生活和學習的過程中,我一定會把課程設計的精神帶到生活中,不畏艱難,勇往直前!7.實物圖圖13實物圖參考文獻[1]李群芳.單片微型計算機與接口技術[M].電子工業出版社.2012[2]何立民.單片機應用技術選編[M].北京航空航天大學出版社.2010[3]閻石.數字電子技術基礎[M].北京.2008.12.[4]張毅剛等.MCS-51單片機應用設計[M].哈爾濱工業電子出版社.2011[5]張凱.LED介紹完全手冊.北京航空航天大學出版社.2012附錄#include<REG51.H>#include<intrins.h>#defineNOP()_nop_()//定義空指令,這個函數在庫<intrins.h>中//--重定義函數變量--//#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong//--定義SPI要使用的IO--//sbitMOSIO=P3^4;sbitR_CLK=P3^5;sbitS_CLK=P3^6;//全局變量聲明--//ulongcolumn;//點陣列ulongrow;//點陣行ulongdt;//點陣顯示數組ucharcodetab0[]={0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00};//--電--//ucharcodetab1[]={128,0,128,0,128,0,252,31,132,16,132,16,252,31,132,16,132,16,252,31,132,0,128,32,128,32,0,63,0,0,0,0 };//--信--//ucharcodetab2[]={16,1,16,2,232,63,8,0,204,31,10,0,200,31,8,0,200,31,72,16,72,16,72,16,200,31,72,16,0,0,0,0};//--13--//ucharcodetab3[]={0,0,0,0,0,0,8,60,14,66,8,66,8,32,8,24,8,32,8,64,8,66,8,66,62,60,0,0,0,0,0,0};//-03--//ucharcodetab4[]={0,0,0,0,0,0,24,60,36,66,66,66,66,32,66,24,66,32,66,64,66,66,36,66,24,60,0,0,0,0,0,0};//--班--//ucharcodetab5[]={0,1,62,61,8,9,72,9,72,9,126,9,72,61,72,9,40,9,8,9,184,8,142,8,64,62,32,0,0,0,0,0};//函數聲明voidHC595SendData(ucharBT3,ucharBT2,ucharBT1,ucharBT0); /*************主函數*****************************/ voidmain(void){intk,i,ms;i=80; //顯示時間 //--顯示"電"--// for(ms=i;ms>0;ms--) { for(k=0;k<16;k++) { HC595SendData(~tab1[2*k+1],~tab1[2*k],tab0[2*k],tab0[2*k+1]); } } //--清屏--// HC595SendData(0xff,0xff,0,0); //--顯示“信”--// for(ms=i;ms>0;ms--) { for(k=0;k<16;k++) { HC595SendData(~tab2[2*k+1],~tab2[2*k],tab0[2*k],tab0[2*k+1]); } } //--清屏--// HC595SendData(0xff,0xff,0,0); //--顯示“13”--// for(ms=i;ms>0;ms--) { for(k=0;k<16;k++) { HC595SendData(~tab3[2*k+1],~tab3[2*k],tab0[2*k],tab0[2*k+1]); } } //--清屏--// HC595SendData(0xff,0xff,0,0); //--顯示“03”--// for(ms=i;ms>0;ms--) { for(k=0;k<16;k++) { HC595SendData(~tab4[2*k+1],~tab4[2*k],tab0[2*k],tab0[2*k+1]); } } //--清屏--// HC595SendData(0xff,0xff,0,0); //--顯示“班”--// for(ms=i;ms>0;ms--) { for(k=0;k<16;k++) { HC595SendData(~tab5[2*k+1],~tab5[2*k],tab0[2*k],tab0[2*k+1]); } } //--清屏--// HC595SendData(0xff,0xff,0,0); }voidHC595SendData(ucharBT3,ucharBT2,ucharBT1,ucharBT0){ uchari; //--發送第一個字節--// for(i=0;i<8;i++) { MOSIO=BT3>>7; //從高位到低位依次發送 BT3<<=1; //BT3左移1位 S_CLK=0; S_CLK=1; }

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論