片單機原理及應(yīng)用課程設(shè)計led點陣顯示屏-大學(xué)畢設(shè)論文_第1頁
片單機原理及應(yīng)用課程設(shè)計led點陣顯示屏-大學(xué)畢設(shè)論文_第2頁
片單機原理及應(yīng)用課程設(shè)計led點陣顯示屏-大學(xué)畢設(shè)論文_第3頁
片單機原理及應(yīng)用課程設(shè)計led點陣顯示屏-大學(xué)畢設(shè)論文_第4頁
片單機原理及應(yīng)用課程設(shè)計led點陣顯示屏-大學(xué)畢設(shè)論文_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

單片機原理及應(yīng)用課程設(shè)計指導(dǎo)書使用班級:電子專業(yè)指導(dǎo)教師:編制教師:長春工程學(xué)院電氣與信息學(xué)院電子信息教研室2014年2月一、課程設(shè)計目的單片機原理及應(yīng)用課程設(shè)計是配合“單片機原理及應(yīng)用”課程和實驗教學(xué)的一個重要環(huán)節(jié),它能起到鞏固所學(xué)知識、加強綜合能力、提高軟、硬件設(shè)計調(diào)試方面的能力、啟發(fā)創(chuàng)新思想的效果。同時,幫助學(xué)生將相關(guān)專業(yè)課程綜合起來,融會貫通,形成系統(tǒng)的概念,迅速邁過從理論到實際的門檻。本課程設(shè)計的目的是培訓(xùn)學(xué)生的綜合設(shè)計能力、電子線路的組裝調(diào)試能力和創(chuàng)新能力,通過查閱資料、選定方案、設(shè)計電路、安裝調(diào)試、寫報告等過程,使學(xué)生得到一次科學(xué)研究工作的啟蒙訓(xùn)練。二、課程設(shè)計任務(wù)及內(nèi)容1、資料查閱1)查閱與本人設(shè)計相關(guān)的文章、方案,列舉3種以上設(shè)計方案;2)對以上設(shè)計方案進行分析、比較,選擇本次設(shè)計所使用的設(shè)計方案;3)把以上設(shè)計方案及分析、比較過程以文字方式體現(xiàn)在設(shè)計報告中的方案選擇中。2、設(shè)計題目(5)題目:LED點陣顯示屏★★☆☆☆要求:1)設(shè)計由(4~8)個8*8LED點陣組成的顯示屏系統(tǒng);2)能夠顯示英文、漢字以及部分特殊圖形;3)可以設(shè)置多種(不少于3種)的切換顯示方式;4)采用雙色多三色LED點陣顯示簡單彩色圖樣*;5)顯示簡單動態(tài)圖像或曲線等*。3、電路設(shè)計用Protel繪制電路原理圖,并繪制PCB板圖。要求原理圖完整,清晰,參數(shù)準確。PCB板圖布局合理、美觀,走線清晰明了,制版尺寸小。4、仿真實現(xiàn)用Proteus軟件對所設(shè)計內(nèi)容進行仿真實驗或使用硬件搭建,實現(xiàn)題目要求的內(nèi)容。5、撰寫論文按照所閱讀的標準期刊文獻文章格式撰寫一篇所設(shè)計的單片機系統(tǒng)進行綜合描述。要求有:摘要:對全篇文章進行簡單扼要的介紹;引言:對所設(shè)計的題目背景進行簡介;正文論述:各部分詳細的設(shè)計方案分析及選擇,軟硬件設(shè)計、理論計算;Protus仿真過程及結(jié)果截圖;原理圖、PCB圖等各種圖表;并以附錄的形式提供單片機程序及程序框圖。從硬件(各部分原理、整體系統(tǒng)組成原理)和軟件(編程思想、流程圖)等方面對系統(tǒng)進行全面的論述。結(jié)論:總結(jié)所設(shè)計的題目的實現(xiàn)情況及展望。三、課程設(shè)計成果要求1、開題報告主要內(nèi)容:進行題目可行性論證,對設(shè)計方案進行選擇,給出選擇依據(jù);2、電路圖繪制主要內(nèi)容:針對所設(shè)計題目繪制原理圖、PCB圖。原理圖要求器件擺放合理、軸線清晰明了;PCB圖要求布線合理、美觀,制版盡可能小。3、軟件系統(tǒng)仿真主要內(nèi)容:使用Protus軟件對所設(shè)計題目進行軟件仿真或使用硬件搭建,驗證系統(tǒng)的可行性并保留結(jié)果(答辯時需演示)。4、課程設(shè)計論文主要內(nèi)容:撰寫課程設(shè)計論文(論文詳細要求參見附件)。一組一份設(shè)計論文。分組建議:3人。四、課程設(shè)計具體時間安排及成績考核1、時間安排:單元內(nèi)容時間1公布題目,布置任務(wù),學(xué)生獨立選題。1天2進行題目分析和系統(tǒng)分解,確定設(shè)計方案。1天3繪制Protel原理圖和PCB圖2天3繪制Proteus原理圖或搭建硬件電路2天4編制程序,進行程序調(diào)試和系統(tǒng)功能測試3天5組織進行課程設(shè)計答辯,了解學(xué)生設(shè)計水平,是否獨立完成及全面表現(xiàn)并由教師給出評語和成績1天合計10天2、成績考核:按平時表現(xiàn)、出勤情況、設(shè)計完成情況、報告的完整性和規(guī)范性以及答辯情況給出實習(xí)的綜合成績(五級分制)。給分比例如下:(1)平時表現(xiàn)、出勤情況(20%)(2)Protel電路原理圖及PCB板圖(15%);(3)Proteus設(shè)計演示(15%);(4)設(shè)計論文(25%);(5)答辯(25%)。五、參考書1.谷樹忠等編著:《AltiumDesigner教程—原理圖、PCB設(shè)計與仿真》電子工業(yè)出版社,2011.11;2.李曉林等編著:《單片機原理與接口技術(shù)(第2版)》電子工業(yè)出版社,2011.2;3.胡啟明等編著:《Proteus從入門到精通100例》電子工業(yè)出版社,2012.9;4.劉波主編:《51單片機應(yīng)用開發(fā)典型范例——基于Proteus仿真》電子工業(yè)出版社,2014.1CHANGCHUNINSTITUTEOFTECHNOLOGY單片機原理及應(yīng)用課程設(shè)計(英文標題:TimesNewRoman英文字體,3號,居中)設(shè)計題目:LED點陣顯示屏學(xué)生姓名:L學(xué)院名稱:電氣與信息工程學(xué)院專業(yè)名稱:電子信息工程班級名稱:電子1241學(xué)號:L完成時間:L2015年月日

任務(wù)分配表班級學(xué)號姓名完成主要任務(wù)電子124110趙玉瑩Protel原理圖及pcb板繪制整理實驗報告電子124113崔賀Proteus圖繪制電子124136王文立編程

LED點陣顯示屏趙玉瑩1,崔賀1,王文立1(電子124110號,13號,36號)摘要:本設(shè)計基于單片機技術(shù)原理,以芯片AT89C51作為核心控制器,通過硬件電路的制作及軟件程序的編制,設(shè)計制作了一種4個8*8LED點陣組成的顯示屏系統(tǒng)。實現(xiàn)LED的動態(tài)顯,所謂動態(tài)顯示就是一位一位的輪流點亮LED,在每一時刻只有一位顯示器在工作(點亮),但由于人眼的視覺暫留效應(yīng)和發(fā)光二極管熄滅時的余輝,將出現(xiàn)多個字符“同時”顯示的現(xiàn)象。即在每一瞬間,所有LED會顯示相同的字,并實現(xiàn)文字、英文、圖形的顯示,以及圖形的上移、左移、右移的移動效果并顯示簡單動態(tài)圖像或曲線。關(guān)鍵詞:AT89C51單片機,LED,顯示0引言(簡介所設(shè)計的題目內(nèi)容及設(shè)計的意義)LED電子顯示屏是集微電子技術(shù)、計算機技術(shù)、信息處理技術(shù)于一體的大型顯示屏系統(tǒng),本設(shè)計實現(xiàn)了LED的動態(tài)、靜態(tài)顯,所謂動態(tài)顯示就是一位一位的輪流點亮LED,在每一時刻只有一位顯示器在工作(點亮),但由于人眼的視覺暫留效應(yīng)和發(fā)光二極管熄滅時的余輝,將出現(xiàn)多個字符“同時”顯示的現(xiàn)象。即在每一瞬間,所有LED會顯示相同的字,并實現(xiàn)文字、英文、圖形的顯示,以及圖形的上移、左移、右移的移動效果?;贚ED的字符動態(tài)顯示系統(tǒng)具有設(shè)計簡單、顯示方式和顯示信息可控、擴容靈活和成本低等特點,非常適合一些漢字信息動態(tài)顯示場合。1系統(tǒng)方案(包括方案論證,選擇的過程和依據(jù),用系統(tǒng)框圖論述)……建立以AT89C51單片機為核心的控制器,采用串行傳輸、動態(tài)掃描技術(shù),設(shè)計出擁有多功能的模塊化16*16LED點陣動態(tài)顯示系統(tǒng)。通過仿真驗證,該方法正確可行,能有效縮短系統(tǒng)的開發(fā)周期、提高效率、節(jié)約成本1LED點陣動態(tài)顯示系統(tǒng)原理2系統(tǒng)硬件電路(包括硬件系統(tǒng)原理框圖、各部分電路圖及其工作原理簡介)簡介:用到的器件有:AT89C51,74LS164,74LS595,MATRIX-8*8-GREEN.從理論上說,不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個點所在位置相對應(yīng)的LED器件發(fā)光,就可以得到我們想要的顯示結(jié)果,這種同時控制各個發(fā)光點亮滅的方法稱為靜態(tài)驅(qū)動顯示方式。16×16的點陣共有256個發(fā)光二極管,顯然單片機沒有這么多端口,如果我們采用鎖存器來擴展端口,按8位的鎖存器來計算,16×16的點陣需要256/8=32個鎖存器。這個數(shù)字很龐大,因為我們僅僅是16×16的點陣,在實際應(yīng)用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個很龐大的數(shù)字。因此在實際應(yīng)用中的顯示屏都不采用這種設(shè)計,而采用另一種稱為動態(tài)掃描的顯示方法。動態(tài)掃描的意思簡單地說就是逐行輪流點亮,這樣掃描驅(qū)動電路就可以實現(xiàn)多行(比如16行)的同名列共用一套列驅(qū)動器。具體就16×16的點陣來說,把所有同l行的發(fā)光管的陽極連在一起,把所有同一列的發(fā)光管的陰極連在一起(共陽的接法),先送出對應(yīng)第1行發(fā)光管亮滅的數(shù)據(jù)并鎖存,然后選通第l行使其燃亮一定的時間,然后熄滅;再送出第2行的數(shù)據(jù)并鎮(zhèn)存,然后選通第2行使其燃亮相同的時間,然后熄滅;-…·第16行之后,又重新燃亮第1行,腹輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現(xiàn)象,就能看到顯示屏上穩(wěn)定的圖形了。采用掃描方式進行顯示時,每行有一個行驅(qū)動器,各行的同名列共用一個列驅(qū)動器。顯示數(shù)據(jù)通常存儲在單片機的存儲器中,按8位一個字節(jié)的形式順序排放。顯示時要把一行中各列的數(shù)據(jù)都傳送到相應(yīng)的列驅(qū)動器上去,這就存在一個顯示數(shù)據(jù)傳輸?shù)膯栴}。從控制電路到列驅(qū)動器的數(shù)據(jù)傳輸可以采用并行方式或串行方式。顯然,采用并行方式時,從控制電路到列驅(qū)動器的線路數(shù)量大,相應(yīng)的硬件數(shù)目多。當列數(shù)很多時,并行傳輸?shù)姆桨甘遣豢扇〉?。采用串行傳輸?shù)姆椒?,控制電路可以只用一根信號線,將列數(shù)據(jù)一位一位傳往列驅(qū)動器,在硬件方面無疑是十分經(jīng)濟的。但是,串行傳輸過程較長,數(shù)據(jù)按順序一位一位地輸出給列驅(qū)動器,只有當一行的各列數(shù)據(jù)都已傳輸?shù)轿恢?,這一行的各列才能并行地進行顯示。這樣,對于一行的顯示過程就可以分解成列數(shù)據(jù)準備(傳輸)和列數(shù)據(jù)顯示兩個部分。對于串行傳輸方式來說,列數(shù)據(jù)準備時間可能相當長.在行掃描周期確定的情況下,留給行顯示的時間就太少了,以致影響到LED的亮度。解決串行傳輸中列數(shù)據(jù)準備和列數(shù)據(jù)顯示的時間矛盾問題,可以采用重疊處理的方法。即在顯示本行各列數(shù)據(jù)的同時,傳送下一行的列數(shù)據(jù)。為了達到重疊處理的目的,列數(shù)據(jù)的顯示就需要具有鎖存功能。經(jīng)過上述分析,可以歸納出列驅(qū)動器電路應(yīng)具備的主要功能。對于列數(shù)據(jù)準備來說,它應(yīng)能實現(xiàn)串人并出的移位功能;對于列數(shù)據(jù)顯示來說,應(yīng)具有并行鎖存的功能。這樣,本行已準備好的數(shù)據(jù)打入并行鎖存器進行顯示時,串并移位寄存器就可以準備下一行的列數(shù)據(jù),而不會影響本行的顯示。圖1為顯示屏電路實現(xiàn)的結(jié)構(gòu)框圖。圖1顯示屏電路框圖硬件電路大致上可以分成單片機系統(tǒng)及外圍電路、列驅(qū)動電路和行驅(qū)動電路三部分1.單片機系統(tǒng)及外圍電路單片機采用89C51或其兼容系列的芯片,采用24MHz或更高頻率的晶振,以獲得較高的刷新頻率,使顯示更穩(wěn)定。單片機的串口與列驅(qū)動器相連,用來送顯示數(shù)據(jù)。P1口低4位與行驅(qū)動器相連,送出行選信號;P1.5~P1.7口則用來發(fā)送控制信號。PO和P2口空著,在有必要時可以擴展系統(tǒng)的ROM和RAM。16×16點陣顯示屏的硬件原理圖如圖2所示。圖216×16點陣顯示屏的硬件原理圖2.列驅(qū)動電路列驅(qū)動電路由集成電路74LS595構(gòu)成。它具有一個8位串人并出的移位寄存器和一個8位輸出鎖存器的結(jié)構(gòu),而且移位寄存器和輸出鎖存器的控制是各自獨立的,可以實現(xiàn)在顯示本行各列數(shù)據(jù)的同時,傳送下一行的列數(shù)據(jù),即達到重疊處理的目的。74LS595的外形及內(nèi)部結(jié)構(gòu)如圖3所示。它的輸入側(cè)有8個串行移位寄存器,每個移位寄存器的輸出都連接一個輸出鎖存器。引腳SI是串行數(shù)據(jù)的輸入端。引腳SCK是移位寄存器的移位時鐘脈沖,在其上升沿發(fā)生移位,并將SI的下一個數(shù)據(jù)打人最低位。移位后的各位信號出現(xiàn)在各移位寄存器的輸出端,也就是輸出鎖存器的輸入端。RCK是輸出鎖存器的打人信號,其上升沿將移位寄存器的輸出打人到輸出鎖存器。引腳G是輸出三態(tài)門的開放信號,只有當其為低時鎖存器的輸出才開放,否則為高阻態(tài)。SCLR信號是移位寄存器的靖0輸入端,當其為低時移位寄存器的輸出全部為o。由于SCK和RCK兩個信號是互相獨立的,所以能夠做到輸人串行移位與輸出鎖存互不干擾。芯片的輸出端為QA~QH.最高位QH可作為多片74LS595級聯(lián)應(yīng)用時,向上一級的級聯(lián)輸出。但因QH受輸出鎖存器打人控制,所以還從輸出鎖存器前引出了QH’,作為與移位寄存器完全同步的級聯(lián)輸出。圖374LS595的外形3.行驅(qū)動電路單片機P1口低4位輸出的行號經(jīng)4/16線譯碼器74LSl64譯碼后生成16條行選通信號線,再經(jīng)過驅(qū)動器驅(qū)動對應(yīng)的行線。一條行線上要帶動16列的LED進行顯示,按每一LED器件20mA電流計算,16個LED同時發(fā)光時,需要320mA電流,選用三極管8550作為驅(qū)動管可滿足要求。4.系統(tǒng)程序的設(shè)計顯示屏軟件的主要功能是向屏體提供顯示數(shù)據(jù),并產(chǎn)生各種控制信號,使屏幕按設(shè)計的要求顯示。根據(jù)軟件分層次設(shè)計的原理,可把顯示屏的軟件系統(tǒng)分成兩大層:第一層是底層的顯示驅(qū)動程序,第二層是上層的系統(tǒng)應(yīng)用程序。顯示驅(qū)動程序負責向屏體送顯示數(shù)據(jù),并負責產(chǎn)生行掃描信號和其它控制信號,配合完成LED顯示屏的掃描顯示工作。顯示驅(qū)動程序由定時器T0中斷程序?qū)崿F(xiàn)。系統(tǒng)應(yīng)用程序完成系統(tǒng)環(huán)境設(shè)置(初始化)、顯示效果處理等工作,由主程序來實現(xiàn)。從有利于實現(xiàn)較復(fù)雜的算法(顯示效果處理)和有利于程序結(jié)構(gòu)化考慮,顯示屏程序適宜采用c語言編寫。5.顯示驅(qū)動程序顯示驅(qū)動程序查詢當前燃亮的行號,從顯示緩存區(qū)內(nèi)讀取下一行的顯示數(shù)據(jù),并通過串口發(fā)送給移位寄存器。為消除在切換行顯示數(shù)據(jù)的時候產(chǎn)生拖尾現(xiàn)象,驅(qū)動程序先要關(guān)閉顯示屏,即消隱,等顯示數(shù)據(jù)打人輸出鎖存器并鎖存,然后再輸出新的行號,重新打開顯示。圖4為顯示驅(qū)動程序(顯示屏掃描函數(shù))流程圖。圖4顯示驅(qū)動程序流程圖3系統(tǒng)軟件設(shè)計(包括主流程圖及各部分功能模塊流程圖,部分需要講解的模塊源碼)主程序流程圖顯示完成Ib=ib+1顯示完成Ib=ib+1下一屏上下跑馬顯示開始定義端口和移動效果顯示系統(tǒng)數(shù)據(jù)初始化讀取第一個數(shù)據(jù)的地址顯示數(shù)據(jù)左跑馬右跑馬顯示等待單片機讀取數(shù)據(jù)開始定義端口和移動效果顯示右跑馬顯示顯示數(shù)據(jù)左跑馬讀取第一個數(shù)據(jù)的地址等待單片機讀取數(shù)據(jù)系統(tǒng)數(shù)據(jù)初始化右跑馬顯示顯示數(shù)據(jù)左跑馬讀取第一個數(shù)據(jù)的地址等待單片機讀取數(shù)據(jù)系統(tǒng)數(shù)據(jù)初始化跑馬顯示子程序流程圖子程序結(jié)束延時顯示單字移動顯示完成子程序結(jié)束延時顯示單字移動顯示完成開始讀取字形的地址判斷是左右半字對屏幕進行掃描顯示當tmp為0指向下一個漢字將漢字進行8行或者8列移動繼續(xù)移動剩下的半個字節(jié)更新點陣開始讀取字形的地址判斷是左右半字對屏幕進行掃描顯示當tmp為0指向下一個漢字將漢字進行8行或者8列移動繼續(xù)移動剩下的半個字節(jié)更新點陣單字移動顯示完成單字移動顯示完成//**********16x16點陣***************//#include<reg51.h> //預(yù)處理命令reg51.h是一個庫文件#include<intrins.h> //移位庫函數(shù)包含于此頭文件中#defineDATAOUTP2//P2作為數(shù)據(jù)輸出端口#defineSPEED13voidymove(chardir,unsignedchar*ptr,charspeed); //定義縱向移動方向,指定*ptr指針為無符號字符型,定義速度(為字符)voidxmove(chardir,unsignedchar*ptr,charn,charspeed);voiddelay(unsignedinta); //定義延時子程序指定a為無符號整數(shù)型voiddisplay(); //定義顯示停頓延時voiddisplaytime(chartime);//定義顯示延時時間time為字符型voidinit164(); // 代表:74ls164?sbitADATA=DATAOUT^0; //定義輸出端口p2端口名稱sbitASCK=DATAOUT^1;sbitLATCH=DATAOUT^2;sbitBDATA=DATAOUT^3;sbitBCLK=DATAOUT^4;//上面的程序?qū)崿F(xiàn)的是對所輸入字形的橫向和縱向的移動,加入的是xmove和ymove。同時也定義出了輸出端口。 //定義字形codeunsignedcharxin[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,//心0x1F,0x7C,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,0x1F,0xFC,0x0F,0xF8,0x07,0xF0,0x03,0xE0,0x01,0xC0,0x00,0x80,0x00,0x00,0x00,0x00};codeunsignedcharD[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0, //D0x38,0x38,0x38,0x1C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x38,0x78,0x7F,0xE0,0x00,0x00,0x00,0x00};codeunsignedcharZ[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x38,0x18,0x20,0x30,0x00,0x60,0x01,0xC0,//Z0x03,0x80,0x03,0x00,0x0E,0x00,0x1C,0x06,0x38,0x0C,0x7F,0xFC,0x00,0x00,0x00,0x00};codeunsignedcharzhao[32]={0x08,0x00,0x08,0x08,0x08,0x88,0x7E,0x88,0x08,0x50,0x0A,0x50,0xFF,0x20,0x08,0x20,//趙0x28,0x50,0x2E,0x48,0x28,0x8C,0x39,0x04,0x48,0x00,0x44,0x06,0x83,0xFC,0x00,0x00}; codeunsignedcharyu[32]={0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00, //玉0x01,0x00,0x01,0x00,0x01,0x10,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x40,0x01,0x30,0x01,0x10,0x01,0x04,0xFF,0xFE,0x00,0x00};codeunsignedcharying[32]={0x04,0x40,0x04,0x48,0x7F,0xFC,0x04,0x40,0x04,0x40,0x7F,0xFE,0x40,0x02,0xBF,0xF4,//瑩0x01,0x00,0x01,0x10,0x3F,0xF8,0x01,0x00,0x01,0x40,0x01,0x24,0xFF,0xFE,0x00,0x00};codeunsignedcharcui[32]={ 0x01,0x00,0x21,0x08,0x21,0x08,0x3F,0xF8,//崔0x28,0x08,0x11,0x00,0x10,0x88,0x3F,0xFC,0x50,0x80,0x9F,0xF8,0x10,0x80,0x1F,0xF8,0x10,0x80,0x10,0x84,0x1F,0xFE,0x10,0x00};codeunsignedcharhe[32]={ 0x10,0x00,0x10,0x04,0x7F,0x7E,0x11,0x44,//賀0x11,0x44,0x25,0x7C,0x42,0x10,0x9F,0xF8,0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x02,0xC0,0x0C,0x30,0x30,0x08};codeunsignedcharwang[32]={ 0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00, //王0x01,0x00,0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00};codeunsignedcharwen[32]={ 0x02,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE, //文0x10,0x10,0x08,0x10,0x08,0x20,0x04,0x20,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x60,0x08,0x10,0x30,0x0E,0xC0,0x04};codeunsignedcharli[32]={ 0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x08, //立0x7F,0xFC,0x00,0x00,0x00,0x10,0x10,0x10,0x08,0x20,0x08,0x20,0x04,0x40,0x04,0x40,0x04,0x80,0x00,0x04,0xFF,0xFE,0x00,0x00};codeunsignedcharzhen[32]={ 0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x10,0x1F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10, //真0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x14,0xFF,0xFE,0x08,0x20,0x10,0x18,0x20,0x08};codeunsignedcharniu[32]={0x01,0x00,0x11,0x00,0x11,0x10,0x1F,0xF8,0x21,0x00,0x21,0x00,0x41,0x00,0x01,0x04, //牛0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00};codeunsignedchargth[32]={0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,//! code為存儲類型標識符0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00};unsignedcharidatabuffer[32]; //無符號字符型 數(shù)據(jù)buffer緩存voidmain(void) { unsignedchari; //定義無符號字符i init164(); while(1) //循環(huán)語句對所輸入字符的循環(huán)要求 { for(i=0;i<32;i++) // 掃描心型 顯示心形 buffer[i]=xin[i]; displaytime(1); //加延時 xmove(1,D,2,SPEED); //顯示D和后面的一個字符有速度限制 且為橫向移動 displaytime(1); //實際方針中會有些許停頓 xmove(1,zhao,3,SPEED); //同上 displaytime(1); xmove(1,cui,2,SPEED); displaytime(1); xmove(1,wang,3,SPEED); displaytime(1); ymove(1,0,SPEED); //縱向移動 ymove(1,zhen,SPEED); ymove(1,niu,SPEED); ymove(1,0,SPEED); xmove(0,zhen,3,SPEED); //zhenniu!三個字符左右上下移動 ymove(0,gth,SPEED); ymove(0,0,SPEED); xmove(1,xin,1,SPEED); }}//這部分的程序是主程序,是將輸入的字形上下左右移動,同時也加入了每一段字形顯示后的延時displaytime(1),能夠讓實際效果更佳好看/*************子函數(shù)******************/voiddelay(unsignedinta) //定義子函數(shù)delay延時子程序的編寫定義a為無符號整數(shù)型{ while(a--); //循環(huán)a減}voiddisplay() //延時的定義{ unsignedcharhang,ib,k,tmp; //定義無符號字符型hangibktmpDATAOUT=0x0; //數(shù)據(jù)初始輸出值為0 BDATA=0; //位變量聲明bdata為0 for(hang=0;hang<16;hang++) //掃描16行 { ASCK=0; //p2端口定義 LATCH=0; BCLK=0; for(ib=0;ib<2;ib++) { tmp=buffer[hang*2+ib]; for(k=0;k<8;k++) { tmp<<=1; ASCK=0; ADATA=CY; ASCK=1; } } DATAOUT|=0x14; //LATCH=1; //BCLK=1; BDATA=1; } delay(64); ASCK=0; ASCK=1;}voiddisplaytime(chartime) //設(shè)置停頓時間;{ unsignedchari; //定義無符號字節(jié)型i while(time--) //用while語句實現(xiàn)延遲 { i=130; while(i--) display(); }} //這個模塊是對延時程序的編寫,其中應(yīng)用了while語句,for循環(huán)語句。具體是對16行進行掃描的時候?qū)敵龆丝诘馁x值不同來實現(xiàn)不同程度的延時。voidinit164() //子程序init164的定義{ chari; BDATA=1; for(i=0;i<16;i++) { BCLK=0; BCLK=1; }}voidxmove(chardir,unsignedchar*ptr,charn,charspeed)//*方向n是要移動的漢字個數(shù)移動速度*// { unsignedchari=0,ib=0; //對i和ib的定義 unsignedinttmp=0,speedm=0; unsignedcharbuffer2[16];//半個漢字的緩存 n*=2;//左半字和右半字,所以要x2 for(i=0;i<16;i++)//清零 buffer2[i]=0; if(dir==1)//當dir為1的時候進行走有移動 {/****向左移動****/ for(n;n>0;n--) { if(ptr!=0) { tmp=n%2; //判斷是左半字還是右半字 for(i=0;i<16;i++) buffer2[i]=ptr[i*2+tmp]; if(tmp) //tmp為1時,將地址指向下一個漢字 ptr+=32; } for(tmp=8;tmp>0;tmp--)//要移動8列 { ib=0; for(i=0;i<16;i++) {//要移16行,共16個字節(jié) buffer[ib]<<=1;//移第一個半字 if(buffer[ib+1]&0x80) buffer[ib]++; ib++; buffer[ib]<<=1; //移后半字 if(buffer2[i]&0x80) buffer[ib]++; ib++; buffer2[i]<<=1; //緩沖左半字向左移一位 } speedm=speed; //更新點陣 while(speedm--) display(); } } }//此模塊是對字形的左移,點陣是一個個字節(jié)的并行送出的。所以要實現(xiàn)點陣的左移,就要考考慮動態(tài)的發(fā)送字節(jié)的數(shù)據(jù),而漢字的每一個字節(jié)的編碼是固定的,這時候就//就需要一個數(shù)據(jù)緩存區(qū)buffer來完成點陣的左移//// else {/******向右移動******/ for(n;n>0;n--) { if(ptr!=0) { tmp=(n+1)%2; //判斷左半字還是右半字 for(i=0;i<16;i++) buffer2[i]=ptr[i*2+tmp]; if(tmp==0) //tmp為0時,將地址指向下一個漢字 ptr+=32; } for(tmp=8;tmp>0;tmp--)//要移動8列 { ib=0; for(i=0;i<16;i++) {//要移16行,共16個字節(jié) buffer[ib+1]>>=1; //移右半字 if(buffer[ib]&0x01) buffer[ib+1]|=0x80; buffer[ib]>>=1; //移左半字 if(buffer2[i]&0x01) buffer[ib]|=0x80; ib+=2; buffer2[i]>>=1; //下個漢字的右半字向右移一位 } speedm=speed; while(speedm--)//更新點陣 display(); } } }}voidymove(chardir,unsignedchar*ptr,charspeed){//dir=上移動,dir=0為下移動 chari=0,j=0,ib=0; unsignedinttmp=0,speedm=0; if(dir==0)//當dir為0的時候是實現(xiàn)的上下移動。 { /****向下移****/ ib=31; for(i=16;i>0;i--)//下移16行 { for(j=29;j>-1;j--) buffer[j+2]=buffer[j]; //將上一行的內(nèi)容復(fù)制到下一行 if(ptr==0) { //移空時,buffer的首行用0移入 buffer[0]=0; buffer[1]=0; } else { //否則,處理buffer的首行元素 buffer[1]=ptr[ib]; buffer[0]=ptr[ib-1]; ib=ib-2; } speedm=speed; while(speedm--) //更新點陣 display(); } }/******向上移*******/ else { ib=0; //數(shù)組元素序號 for(i=0;i<16;i++)//上移16行 { for(j=0;j<30;j++) //將下一行的內(nèi)容復(fù)制到上一行 buffer[j]=buffer[j+2]; if(ptr==0)//移入為空,buffer的末行用0移入 { buffer[30]=0; buffer[31]=0; } else { //否則,處理buffer的末行元素 buffer[30]=ptr[ib]; buffer[31]=ptr[ib+1]; ib=ib+2; } speedm=speed; //更新點陣 while(speedm--) display(); //每一個字移動完成后都會加一個延遲的停頓 } } }4系統(tǒng)調(diào)試與結(jié)果分析(包括調(diào)試過程中遇到的問題及解決方法,最終實現(xiàn)的結(jié)果,要有各種運行結(jié)果的仿真截圖)……5結(jié)論(對整個設(shè)計做總結(jié))……參考文獻參考文獻:小五,宋體,1.5倍行距參考文獻:[1]葉景.基于單片機的溫度控制系統(tǒng)設(shè)計[J].中國新通信,2008(7):49[2][3]……附錄一:protel原理圖附錄二:protelPCB板圖附錄三:Proteus電路圖附錄四:程序源代碼(注:左右分欄,中間加豎線)注:全文無特殊說明處,中文均采用宋體,英文和數(shù)字均采用TimeNewRoman

附件2:論文書寫范例:注:全文無特殊說明處,中文均采用宋體,英文和數(shù)字均采用TimeNewRoman基于單片機的數(shù)字電子時鐘設(shè)計劉碧瑩1,張麗麗1,張玲鳳2,陳勁宇2(1.電子0842班2號、7號)(2.電子0841班8號、10號)摘要:本設(shè)計基于單片機技術(shù)原理,以芯片AT89C52作為核心控制器,通過硬件電路的制作及軟件程序的編制,設(shè)計制作了一種多功能數(shù)字時鐘系統(tǒng)。利用1602液晶同時顯示日期、星期和時間,并且可以對其進行設(shè)置。同事利用數(shù)模轉(zhuǎn)換芯片DAC0832在示波器上可以實現(xiàn)同步顯示時鐘;12h/24h顯示模式間進行切換;整點鬧鈴、整點報時功能;多組鬧鐘秒表設(shè)計等功能關(guān)鍵詞:單片機數(shù)字電子鐘0引言目前的數(shù)字電子鐘體積大,誤差大,攜帶、使用不方便,無多組時間同時記錄功能,不具備整點同時鬧鈴和報時功能。在現(xiàn)有數(shù)字電子鐘技術(shù)的基

溫馨提示

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

評論

0/150

提交評論