單片機交通燈實驗設(shè)計報告_第1頁
單片機交通燈實驗設(shè)計報告_第2頁
單片機交通燈實驗設(shè)計報告_第3頁
單片機交通燈實驗設(shè)計報告_第4頁
單片機交通燈實驗設(shè)計報告_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

東北林業(yè)大學(xué)單片機原理實驗課程設(shè)計總結(jié)報告設(shè)計項目: 電子交通燈的設(shè)計 項目完成人: 指導(dǎo)教師: 學(xué)院: 信息與計算機工程學(xué)院 專業(yè):電子信息工程2008級3班2011年5月23日

綜合電子課程設(shè)計任務(wù)書學(xué)生姓名郜天斌學(xué)號20082978專業(yè)(班級)電信三班學(xué)生姓名劉佳濱學(xué)號20082996專業(yè)(班級)電信三班設(shè)計項目電子交通燈的設(shè)計設(shè)計內(nèi)容(1) 通過8*8點陣簡單實現(xiàn)直行、轉(zhuǎn)彎的交通指揮設(shè)計(2) 顯示年、月、日、星期、時、分、秒(3)能夠通過鍵盤輸入日期和時間的初值(4) 通過功能鍵能夠?qū)崿F(xiàn)數(shù)據(jù)儲存、查詢、上傳(串行通訊)功能(5) 通過功能鍵能夠?qū)崿F(xiàn)外中斷和定時中斷功能主要技術(shù)指標(biāo)和要求設(shè)計所用儀器設(shè)備工作計劃參考資料指導(dǎo)教師簽字系主任簽字摘要隨著目前微電子技術(shù)的發(fā)展,技術(shù)工藝的不斷提高,單片機技術(shù)也有了長足的進步。單片機即單片微型計算機,它是微型計算機的一個分支,它是在一塊芯片上集成了CPU、RAM和ROM存儲器I/O接口等而構(gòu)成的微型計算機。因為它主要應(yīng)用于工業(yè)測控領(lǐng)域故又叫做微控器或嵌入式控制器。單片機的核心是CPU用超大規(guī)模集成技術(shù)把CPU集成在一塊芯片上,稱為微處理器。單片機在最近幾年中得到了極大的發(fā)展,目前世界范圍內(nèi)單片機發(fā)展的主要領(lǐng)域有4個:一是歐美,最新開發(fā)產(chǎn)品及主要廠商有:Nationalsemicundutor的cop3系列單片機,美國的Scenix的八位單片機,荷蘭PHILIPS的51系列單片機,,美國AMD公司186系列16位嵌入式微機控制器,MOTOROLA的各個系列單片機;二是日本,TOSHIBA公司開發(fā)了從4位到64位多系列單片機,日立公司也有從4位到32位多系列單片機,NEC公司的75X、78X系列微機;三是臺灣地區(qū),主要有WINBOND的W741/W516,W78/W77等系列產(chǎn)品微控制器;四是韓國,主要有HYUNDAImicroelectrionics的GMS800、GMS30系列微控制器。另外還有LG公司也生產(chǎn)單片機,可見單片機發(fā)展到今天可以說種類繁多、性能各異。但目前我國的許多單片機應(yīng)用單位仍停留在采用片內(nèi)無ROM等低檔單片機狀態(tài)。十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現(xiàn)這井然秩序呢?靠的就是交通信號燈的自動指揮系統(tǒng)。交通信號燈控制方式很多。本系統(tǒng)采用MSC-51系列單片機ATSC51和可編程并行I/O接口芯片CH451為中心器件來設(shè)計交通燈控制器,實現(xiàn)了能根據(jù)實際車流量通過8051芯片的P1口設(shè)置紅、綠燈燃亮?xí)r間的功能;紅綠燈循環(huán)點亮,倒計時剩5秒時黃燈閃爍警示(交通燈信號通過PA口輸出,顯示時間直接通過CH451的PC口輸出至雙位數(shù)碼管);車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數(shù)碼管顯示。本系統(tǒng)實用性強、操作簡單、擴展功能強。關(guān)鍵詞:單片機、交通燈、LJD-SY-5200單片機實驗系統(tǒng)基于單片機的交通燈設(shè)計目錄TOC\o"1-5"\h\z\o"CurrentDocument"1緒論 1\o"CurrentDocument"1.1引言 1\o"CurrentDocument"系統(tǒng)方案設(shè)計 2\o"CurrentDocument"2芯片簡介 2\o"CurrentDocument"MSC-51芯片簡介 2\o"CurrentDocument"DS1302芯片簡介 5\o"CurrentDocument"74HC573簡介 7\o"CurrentDocument"CH451芯片簡介 7\o"CurrentDocument"74HC138芯片簡介 10\o"CurrentDocument"3系統(tǒng)硬件設(shè)計 11\o"CurrentDocument"3.1系統(tǒng)硬件設(shè)計 11\o"CurrentDocument"LCD液晶 11\o"CurrentDocument"8段數(shù)碼管 12\o"CurrentDocument"4系統(tǒng)的軟件設(shè)計 12\o"CurrentDocument"4.1程序設(shè)計與調(diào)試步驟 12\o"CurrentDocument"4.2計數(shù)器初值計算 12\o"CurrentDocument"4.2.11秒方法 134.3時間顯示 134.3.1寫保護寄存器操作 13\o"CurrentDocument"4.3.2時鐘停止位操作 13\o"CurrentDocument"多字節(jié)傳送方式 13\o"CurrentDocument"5結(jié)論 14附錄1、 總體電路圖 15\o"CurrentDocument"2、 流程圖 15\o"CurrentDocument"3、 程序代碼 17參考文獻1緒論1.1引言所謂單片機是指在一個集成芯片中,集成微處理器(CPU)、存儲器、基本I/O接口以及定時/計數(shù)、通信部件,即在一個芯片上實現(xiàn)一臺微型計算機的基本功能。1970年微型計算機研制成功之后,隨著就出現(xiàn)了單片機。美國Intel公司1971年生產(chǎn)的4位單片機4004和1972年生產(chǎn)的雛形8位單片機8008,特別是1976年MCS-48單片機問世以來,在短短的二十幾年間,經(jīng)歷了四次更新?lián)Q代,其發(fā)展速度大約每二、三年要更新一代、集成度增加一倍、功能翻一番。其發(fā)展速度之快、應(yīng)用范圍之廣,已達到了驚人的地步,它已滲透到生產(chǎn)和生活的各個領(lǐng)域。盡管目前單片機的品種很多,但其中最具典型性的當(dāng)數(shù)Intel公司的MCS-51系列單片機。MCS-51是在MCS-48的基礎(chǔ)上于80年代初發(fā)展起來的,雖然它仍然是8位的單片機,但其功能有很大的增強。由于PHILIPS>ATMEL、WELBORD、LG等近百家IC制造商都主產(chǎn)51系列兼容產(chǎn)品,具有品種全、兼容性強、軟硬件資料豐富等特點。因此,MCS-51應(yīng)用非常廣泛,成為繼MCS-48之后最重要的單片機品種。直到現(xiàn)在MCS-51仍不失為單片機中的主流機型。國內(nèi)尤以Intel的MCS-51系列單片機應(yīng)用最廣。由于8位單片機的高性能價格比,估計近十年內(nèi),8位單片機仍將是單片機中的主流機型。隨著計算機技術(shù)的發(fā)展和在控制系統(tǒng)中的廣泛應(yīng)用,以及設(shè)備向小型化、智能化發(fā)展,作為高新技術(shù)之一的單片機以其體積小、功能強、價格低廉、使用靈活等優(yōu)勢,顯示出很強的生命力。它和一般的集成電路相比有較好的抗干擾能力,對環(huán)境的溫度和濕度都有較好的適應(yīng)性,可以在工業(yè)條件下穩(wěn)定工作。且單片機廣泛地應(yīng)用于各種儀器儀表,使儀器儀表智能化,提高它們的測量速度和測量精度,加強控制功能。如MCS-51系列單片機控制的“船舶航行狀態(tài)自動記錄儀”、“煙葉水分測試儀”、“智能超聲波測厚儀”等。單片機也廣泛地應(yīng)用于實時控制系統(tǒng)中,例如對工業(yè)上各種窯爐的溫度、酸度、化學(xué)成分的測量和控制。將測量技術(shù)、自動控制技術(shù)和單片機技術(shù)相結(jié)合,充分發(fā)揮其數(shù)據(jù)處理功能和實時控制功能,使系統(tǒng)工作處于最佳狀態(tài),提高系統(tǒng)的生產(chǎn)效率和產(chǎn)品質(zhì)量。從航空航天、地質(zhì)石油、冶金采礦、機械電子、輕工紡織等行業(yè)的分布系統(tǒng)與智能控制以及機電一體化設(shè)備和產(chǎn)品,到郵電通信、日用設(shè)備和器械,單片機都發(fā)揮了巨大作用。其應(yīng)用大致可分為以下幾方面:①機電一體化設(shè)備的控制核心。機電一體化是機械設(shè)備發(fā)展的方向。單片機的出現(xiàn)促進了機電一體化技術(shù)的發(fā)展,它作為機電產(chǎn)品的控制器,充分發(fā)揮其自身優(yōu)點,大大強化了機器的功能,提高了機器的自動化、智能化程度。最典型的機電產(chǎn)品機器人,每個關(guān)節(jié)或動作部位都是一個單片機控制系統(tǒng)。②數(shù)據(jù)采集系統(tǒng)的現(xiàn)場采集單元。大型數(shù)據(jù)采集系統(tǒng),要求數(shù)據(jù)采集的同步性和實時性要好。使用單片機作為系統(tǒng)的前端采集單元,由主控計算機發(fā)出采集命令,再將采集到的數(shù)據(jù)逐一送到主計算機中進行處理。如有些氣象部門、油田采油部門以及電廠等均可采用這樣的系統(tǒng)。③分布控制系統(tǒng)的前端控制器。在直接控制級的計算機分布控制系統(tǒng)(DCS)中,單片機作為過程控制中每一分部操作或控制的控制器,進行數(shù)據(jù)采集、反饋計算、控制輸出,并在上位機命令的指揮下進行相應(yīng)協(xié)調(diào)工作。(④智能化儀表的機芯。自動化儀表的智能化程度越來越高。采用單片機的智能化儀表可具有自整定、自校正、自動補償和自適應(yīng)功能,還可進行數(shù)字PID調(diào)節(jié),軟件消除電流熱噪聲等等,解決傳統(tǒng)儀表所不能解決的難題。單片機的應(yīng)用使這種性能如虎添翼,如自動計費電度表、燃氣表中已有這方面的應(yīng)用。許多工業(yè)儀表中的智能流量計,氣體分析儀、成分分析儀等也采用了這項技術(shù)。甚至有的保健治療儀中也采用了單片機控制。⑤消費類電子產(chǎn)品控制。該應(yīng)用主要反映在家電領(lǐng)域,如洗衣機、空調(diào)器、保安系統(tǒng)、VCD視盤機、電子秤、IC卡、手機、BP機等。這些設(shè)備中使用了單片機機芯后,大大提高了其控制功能和性能,并實現(xiàn)了智能化、最優(yōu)化控制。⑥終端及外圍設(shè)備控制。計算機網(wǎng)絡(luò)終端設(shè)備,如銀行終端、商業(yè)POS(自動收款機)以及計算機外圍設(shè)備如打印機、通信終端和智能化UPS等。在這些設(shè)備中使用單片機,使其具有計算、存儲、顯示、輸入等功能,具有和計算機連接的接口,使計算機的能力及應(yīng)用范圍大大提高??傊S著信息時代的到來,傳統(tǒng)單片機固有的結(jié)構(gòu)缺陷,使其呈現(xiàn)出諸多弊端。其速度、規(guī)模、性能等指標(biāo)越來越難以滿足用戶需求、因此單片機芯片的開發(fā),升級面臨著新的挑戰(zhàn)。1.2系統(tǒng)方案設(shè)計利用LJD-SY-5200單片機主板和CH451、DS1302等芯片分別實現(xiàn)(1)通過8*8點陣簡單實現(xiàn)直行、轉(zhuǎn)彎的交通指揮設(shè)計(2)顯示年、月、日、星期、時、分、秒(3)能夠通過鍵盤輸入日期和時間的初值(4)通過功能鍵能夠?qū)崿F(xiàn)數(shù)據(jù)儲存、查詢、上傳(串行通訊)功能(5)通過功能鍵能夠?qū)崿F(xiàn)外中斷和定時中斷功能。在整合各部分代碼實現(xiàn)整體的功能實現(xiàn)。通過CH451實現(xiàn)鍵盤的掃描,判斷按鍵代碼觸發(fā)相應(yīng)的程序。修改8*8點陣來顯示各種交通指揮圖標(biāo)。擬用p0(0.0-0.7)口控制74hc573實現(xiàn)對于led8*8的控制,用單片機控制ch451從而控制數(shù)碼管與鍵盤(p1.2控制load,p3.4控制dclk,p3.5控制din,p3.3控制dout)詳細連接將在硬件部分敘述。該方案最終可實現(xiàn)交通燈以及簡單的表的功能。在可實現(xiàn)性方面由于所使用的cpu管腳不沖突,按鍵輸入是中斷方式,加之采用時鐘中斷為記數(shù)脈沖所以是可以實現(xiàn)的。2芯片簡介MSC-51芯片簡介MCS-51單片機內(nèi)部結(jié)構(gòu)8051是MCS-51系列單片機的典型產(chǎn)品,包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明:?中央處理器:中央處理器(CPU)是整個單片機的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進制數(shù)據(jù)或代碼,CPU負責(zé)控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。?數(shù)據(jù)存儲器(RAM)8051內(nèi)部有128個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個,可存放讀寫的數(shù)據(jù),運算的中間結(jié)果或用戶定義的字型表。并行珈口I串行通信口中斷系毓定時計數(shù)器程序存儲器11數(shù)據(jù)存儲器8051時鐘并行珈口I串行通信口中斷系毓定時計數(shù)器程序存儲器11數(shù)據(jù)存儲器8051時鐘據(jù)線址線制跋數(shù)總地總控總圖18051內(nèi)部結(jié)構(gòu)框圖?程序存儲器(ROM):8051共有4096個8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。?定時/計數(shù)器(ROM):8051有兩個16位的可編程定時/計數(shù)器,以實現(xiàn)定時或計數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。?并行輸入輸出(I/O)口:8051共有4組8位I/O口(P0、P1、P2或P3),用于對外部數(shù)據(jù)的傳輸。?全雙工串行口:8051內(nèi)置一個全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。?中斷系統(tǒng):8051具備較完善的中斷功能,有兩個外中斷、兩個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并具有2級的優(yōu)先級別選擇。?時鐘電路:8051內(nèi)置最高頻率達12MHz的時鐘電路,用于產(chǎn)生整個單片機運行的脈沖時序,但8051單片機需外置振蕩電容。單片機的結(jié)構(gòu)有兩種類型,一種是程序存儲器和數(shù)據(jù)存儲器分開的形式,即哈佛(Harvard)結(jié)構(gòu),另一種是采用通用計算機廣泛使用的程序存儲器與數(shù)據(jù)存儲器合二為一的結(jié)構(gòu),即普林斯頓(Princeton)結(jié)構(gòu)°INTEL的MCS-51系列單片機采用的是哈佛結(jié)構(gòu)的形式,而后續(xù)產(chǎn)品16位的MCS-96系列單片機則采用普林斯頓結(jié)構(gòu)。下圖是MCS-51系列單片機的內(nèi)部結(jié)構(gòu)示意圖2。PO.c—P0.7 T2.0—P2.PO.c—P0.7 T2.0—P2.7 I通道口驅(qū)動黑II通道2驅(qū)動器I堆棧指針圖2MCS-51的引腳說明:MCS-51系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復(fù)用?,F(xiàn)在我們對這些引腳的功能加以說明:MCS-51的引腳說明:MCS-51系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復(fù)用?,F(xiàn)在我們對這些引腳的功能加以說明:如圖3Pl.0EPl.1EPl.2EPl.3EPl.4EPl.5EPl.6EPl.7ERSTEEXD/P3.0ETXD/P3.1EIBT0/P3.2EI1IT1/P3.3ET0/P3.4ET1/P3.5EWP3.6EED/P3.7EKTAL2EKTAL1EtllDEPDIPVccPl.0EPl.1EPl.2EPl.3EPl.4EPl.5EPl.6EPl.7ERSTEEXD/P3.0ETXD/P3.1EIBT0/P3.2EI1IT1/P3.3ET0/P3.4ET1/P3.5EWP3.6EED/P3.7EKTAL2EKTAL1EtllDEPDIPVccP0.0/ADOPO.1/AD1PO.2/AD2PO.3/AD3PO.4/AD4PO.5/AD5PO.6/AD6PO.7/AD7EA/VPP_ALE/PEOGPESNP2.7/A15P2.6/A14P2.5/A13P2.4/Al2P2.3/A11P2.2/A10P2.1/A3P2.0/A8圖3Pin9:RESET/V園復(fù)位信號復(fù)用腳,當(dāng)8051通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電蘋:系統(tǒng)即初始復(fù)位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),8051的初始態(tài)。8051的復(fù)位方式可以是自動復(fù)位,也可以是手動復(fù)位,見下圖4。此外,RESET/Vd還是一復(fù)用腳,V掉電其間,此腳可接上備用電源,以保證單片機內(nèi)部RAM的數(shù)據(jù)不丟失。 '"

上電自動復(fù)位 手劫復(fù)位:電路 內(nèi)部時鐘方式圖48051□nt上電自動復(fù)位 手劫復(fù)位:電路 內(nèi)部時鐘方式圖48051□nt1)XTAL2時鐘源18XTAL1外部時鐘方式?Pin30:ALE/西國當(dāng)訪問外部程序器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問內(nèi)部程序存儲器時,ALE端將有一個1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機是否工作,也可以當(dāng)作一個時鐘向外輸出。更有一個特點,當(dāng)訪問外部程序存儲器,ALE會跳過一個脈沖。如果單片機是EPROM,在編程其間,頑;將用于輸入編程脈沖。?Pin29:商當(dāng)訪問外部程序存儲器時,此腳輸出負脈沖選通信號,PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上,外部程序存儲器則把指令數(shù)據(jù)放到P0口上,由CPU讀入并執(zhí)行。?Pin31:EA/Vpp程序存儲器的內(nèi)外部選通線,8051和8751單片機,內(nèi)置有4kB的程序存儲器,當(dāng)EA為高電平并且程岸地址小于4kB時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過4kB地址則讀取外部指令數(shù)據(jù)。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。顯然,對內(nèi)部無程序存儲器的8031,EA端必須接地。在編程時,EA/Vpp腳還需加上21V的編程電壓。DS1302芯片簡介DS1302是DALLAS公司推出的涓流充電時鐘芯片內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM通過簡單的串行接口與單片機進行通信實時時鐘/日歷電路提供秒分時日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動調(diào)整時鐘操作可通過AM/PM指示決定采用24或12小時格式DS1302與單片機之間能簡單地采用同步串行的方式進行通信僅需用到三個口線1RES復(fù)位2I/O數(shù)據(jù)線3SCLK串行時鐘時鐘/RAM的讀/寫數(shù)據(jù)以一個字節(jié)或多達31個字節(jié)的字符組方式通信DS1302工作時功耗很低保持數(shù)據(jù)和時鐘信息時功率小于1mW。DS1302是由DS1202改進而來增加了以下的特性雙電源管腳用于主電源和備份電源供應(yīng)Vcc1為可編程涓流充電電源附加七個字節(jié)存儲器它廣泛應(yīng)用于電話傳真便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域下面將主要的性能指標(biāo)作一綜合:?實時時鐘具有能計算2100年之前的秒分時日日期星期月年的能力還有閏年調(diào)整能力318位暫存數(shù)據(jù)存儲RAM?串行I/O口方式使得管腳數(shù)量最少?寬范圍工作電壓2.05.5V工作電流2.0V時,小于300nA?讀/寫時鐘或RAM數(shù)據(jù)時有兩種傳送方式單字節(jié)傳送和多字節(jié)傳送字符組方式8腳DIP封裝或可選的8腳SOIC封裝根據(jù)表面裝配簡單3線接口?與TTL兼容Vcc=5V

可選工業(yè)級溫度范圍-40+85與DS1202兼容在DS1202基礎(chǔ)上增加的特性對Vcc1有可選的涓流充電能力雙電源管用于主電源和備份電源供應(yīng)備份電源管腳可由電池或大容量電容輸入附加的7字節(jié)暫存存儲器1DS1302的基本組成和工作原理DS1302的管腳排列及描述如下圖及表所示管腳描述管腳描述管腳描述管腳描述X1X232.768KHz晶振管腳GND地RST復(fù)位腳I/O數(shù)據(jù)輸入/輸出引腳管腳配置8丁8丁65-1234登籍VGVDC1SCLKI/ORST匚1U8)v0C1X1匚2 7□SCLKX2匚3 6JI/OgndC4 53RST?PINDI=(3WMIL)DS1302SB-PIN50IC(200MIL)DS1302ZB-PINSOIC150MILSCLK串行時鐘Vcc1,Vcc2電源供電管腳訂單信息訂單信息訂單信息訂單信息部分#描述DS1302 串行時鐘芯片8腳DIPDS1302S 串行時鐘芯片8腳SOIC200milDS1302Z 串行時鐘芯片8腳SOIC150milDS1302內(nèi)部寄存器CH:時鐘停止位寄存器2的第7位12/24小時標(biāo)志CH=0振蕩器工作允許bit7=1,12小時模式CH=1振蕩器停止bit7=0,24小時模式WP:寫保護位寄存器2的第5位:AM/PM定義WP=0WP=1寄存器數(shù)據(jù)能夠?qū)懭階P=1 下午模式寄存器數(shù)據(jù)不能寫入AP=0 上午模式TCS:涓流充電選擇 DS:二極管選擇位TCS=1010 使能涓流充電 DS=01 選擇一個二極管TCS=其它 禁止涓流充電 DS=10 選擇兩個二極管DS=00或11,即使TCS=1010,充電功能也被禁止

74HC573芯片簡介74HC573是一種帶三態(tài)門的8D鎖存器,其管腳示意圖如下示:u:iIjc--DDDDDDDD-jc--DDDDDDDD-rc12343&丁呂1Q-8Q為8個輸出端。TOC\o"1-5"\h\zLE為數(shù)據(jù)打入端:當(dāng)C為“1”時,鎖存器輸出一狀態(tài)同輸入狀態(tài);當(dāng)C由“1”變“0”時,數(shù)據(jù) ’打入鎖存器 —OC為輸出允許端:當(dāng)OC=0時,三態(tài)門打開; 一當(dāng)砂1時,三態(tài)門關(guān)閉,輸出高阻。_4HC573CH451芯片簡介1概述CH451是一個整合了數(shù)碼管顯示驅(qū)動和鍵盤掃描控制以及UP監(jiān)控的多功能外圍芯片。CH451內(nèi)置既振蕩電路,可以動態(tài)驅(qū)動8位數(shù)碼管或者64位LED,具有BCD譯碼、閃爍、移位等功能;同時還可以進行64鍵的鍵盤掃描;CH451通過可以級聯(lián)的串行接口與單片機等交換數(shù)據(jù);并且提供上電復(fù)位和看門狗等監(jiān)控功能。2、特點顯示驅(qū)動?內(nèi)置大電流驅(qū)動級,段電流不小于25mA,字電流不小于150mA。?動態(tài)顯示掃描控制,直接驅(qū)動8位數(shù)碼管或者64位發(fā)光管LED。?可選數(shù)碼管的段與數(shù)據(jù)位相對應(yīng)的不譯碼方式或者BCD譯碼方式。?數(shù)碼管的字數(shù)據(jù)左移、右移、左循環(huán)、右循環(huán)。?各數(shù)碼管數(shù)字獨立閃爍控制。?通過占空比設(shè)定提供16級亮度控制。?支持段電流上限調(diào)整,可以省去所有限流電阻。?掃描極限控制,支持1到8個數(shù)碼管,只為有效數(shù)碼管分配掃描時間。鍵盤控制?內(nèi)置64鍵鍵盤控制器,基于8X8矩陣鍵盤掃描。?內(nèi)置按鍵狀態(tài)輸入的下拉電阻,內(nèi)置去抖動電路。?鍵盤中斷,低電平有效輸出。?提供按鍵釋放標(biāo)志位,可供查詢按鍵按下與釋放。外部接口?高速的4線串行接口,支持多片級聯(lián),時鐘速度從0到10MHz。?串行接口中的DIN和DCLK信號線可以與其它接口電路共用,節(jié)約引腳。?完全內(nèi)置時鐘振蕩電路,通常不需要外接晶體或者阻容振蕩。?內(nèi)置上電復(fù)位和看門狗Watch-Dog,提供高電平有效和低電平有效復(fù)位輸出。3功能CH451是一個多功能外圍芯片,通過可以級聯(lián)的4線串行接口與單片機、DSP、微處理器等交換數(shù)據(jù)。CH451包含三個功能:數(shù)碼管顯示驅(qū)動、鍵盤掃描控制、^P監(jiān)控,三個功能之間相互獨立,單片機可以通過操作命令分別啟用、關(guān)閉、設(shè)定CH451的任何一個功能。CH451的串行接口是由硬件實現(xiàn)的,單片機可以頻繁地通過串行接口進行高速操作,而絕不會降低CH451的工作效率。4操作命令4.1空操作:OOOOxxxxxxxxb空操作命令不對CH451產(chǎn)生任何影響。該命令可以在多個CH451級聯(lián)的應(yīng)用中,透過前級CH451向后級CH451發(fā)送操作命令而不影響前級的狀態(tài)。例如,要將操作命令001000000001B發(fā)送給兩級級聯(lián)電路中的后級CH451(后級CH451的DIN連接前級CH451的DOUT),只要在該命令后添加空操作命令000000000000B再發(fā)送,簡化描述是1"0"0"0"0"0"0”0”0”「0”0”0"0"0"0"0"0"0"0"0"0"0”0”L那么,該操作命令將經(jīng)過前級CH451到達后級CH451,而空操作命令留給了前級CH451。另外,為了在不影響CH451的前提下變化DCLK以清除看門狗計時,也可以發(fā)送空操作命令,在非級聯(lián)的應(yīng)用中,空操作命令可以只發(fā)送有效數(shù)據(jù)B8?B11,簡化描述是0”0”0”0”1。芯片內(nèi)部復(fù)位:001000000001B內(nèi)部復(fù)位命令將CH451的各個寄存器和各種參數(shù)復(fù)位到默認的狀態(tài)。芯片上電時,CH451總是被復(fù)位,此時各個寄存器均復(fù)位為0,各種參數(shù)均恢復(fù)為默認值。字數(shù)據(jù)左移:001100000000B字數(shù)據(jù)左移命令將CH451的字數(shù)據(jù)左移一次,即從DIG0向DIG7移動一位,然后最右邊的DIG0補進數(shù)據(jù)00H。例如,在數(shù)碼管DIG7?DIG0顯示“87654321”時,執(zhí)行字數(shù)據(jù)左移命令,顯示變?yōu)椤?654321” (不譯碼方式)或者“76543210”(BCD譯碼方式)。字數(shù)據(jù)右移:001100000010B字數(shù)據(jù)右移命令將CH451的字數(shù)據(jù)右移一次,即從DIG7向DIG0移動一位,然后最左邊的DIG7補進數(shù)據(jù)00H。例如,在數(shù)碼管DIG7?DIG0顯示“87654321”時,執(zhí)行字數(shù)據(jù)右移命令,顯示變?yōu)椤?765432” (不譯碼方式)或者“08765432”(BCD譯碼方式)。字數(shù)據(jù)左循環(huán):001100000001B字數(shù)據(jù)左循環(huán)命令將CH451的字數(shù)據(jù)左循環(huán)一次,即從DIG0向DIG7移動一位,然后最右邊的DIG0補進原DIG7的數(shù)據(jù)。例如,在數(shù)碼管DIG7?DIG0顯示“87654321”時,執(zhí)行字數(shù)據(jù)左循環(huán)命令,顯示變?yōu)椤?6543218”。字數(shù)據(jù)右循環(huán):001100000011B字數(shù)據(jù)右循環(huán)命令將CH451的字數(shù)據(jù)右循環(huán)一次,即從DIG7向DIG0移動一位,然后最左邊的DIG7補進原DIG0的數(shù)據(jù)。例如,在數(shù)碼管DIG7?DIG0顯示“87654321”時,執(zhí)行字數(shù)據(jù)右循環(huán)命令,顯示變?yōu)椤?8765432”。設(shè)定系統(tǒng)參數(shù):010000000[WDOG][KEYB][DISP]B設(shè)定系統(tǒng)參數(shù)命令用于設(shè)定CH451的系統(tǒng)級參數(shù):看門狗使能WDOG,鍵盤掃描使能KEYB,顯示驅(qū)動使能DISP。各個參數(shù)均通過1位數(shù)據(jù)控制,將相應(yīng)的數(shù)據(jù)位置為1則啟用該功能,否則關(guān)閉該功能(默認值)。例如,命令數(shù)據(jù)010000000011B表示關(guān)閉看門狗的功能、啟用鍵盤掃描的功能、啟用顯示掃描驅(qū)動的功能。設(shè)定顯示參數(shù):0101[MODE][LIMIT][INTENSITY]B設(shè)定顯示參數(shù)命令用于設(shè)定CH451的顯示參數(shù):譯碼方式MODE,掃描極限LIMIT,顯示亮度INTENSITY。譯碼方式MODE通過1位數(shù)據(jù)控制,置1時選擇BCD譯碼方式,置0時選擇不譯碼方式(默認值)。掃描極限LIMIT通過3位數(shù)據(jù)控制,數(shù)據(jù)001B?111B和000B分別設(shè)定掃描極限為1?7和8(默認值)。顯示亮度INTENSITY通過4位數(shù)據(jù)控制,數(shù)據(jù)0001B?1111B和0000B分別設(shè)定顯示驅(qū)動占空比為1/16?15/16和16/16(默認值)。例如,命令數(shù)據(jù)010101110000B表示選擇不譯碼方式、掃描極限為7、顯示驅(qū)動占空比為16/16;命令數(shù)據(jù)010110001010B表示選擇BCD譯碼方式、掃描極限為8、顯示驅(qū)動占空比為10/16。設(shè)定閃爍控制:0110[D7S][D6S][D5S][D4S][D3S][D2S][D1S][D0S]B設(shè)定閃爍控制命令用于設(shè)定CH451的閃爍顯示屬性:D7S?D0S分別對應(yīng)于8個字驅(qū)動DIG7?DIG0。閃爍屬性D7S?D0S分別通過1位數(shù)據(jù)控制,將相應(yīng)的數(shù)據(jù)位置為1則使能閃爍顯示,否則為正常顯示,不閃爍(默認值)。例如,命令數(shù)據(jù)011000100001B表示設(shè)定數(shù)碼管DIG5和DIG0閃爍顯示,其余數(shù)碼管正常顯示,不閃爍。加載字數(shù)據(jù):1[DIG_ADDR][DIG_DATA]B加載字數(shù)據(jù)命令用于將字數(shù)據(jù)DIG_DATA寫入DIG_ADDR指定地址的數(shù)據(jù)寄存器中。DIG_ADDR通過3位數(shù)據(jù)指定數(shù)據(jù)寄存器的地址,數(shù)據(jù)000B?111B分別指定地址0?7,對應(yīng)于DIG0?DIG7引腳驅(qū)動的8個數(shù)碼管。DIG_DATA是8位的字數(shù)據(jù)。例如,命令數(shù)據(jù)100001111001B表示將字數(shù)據(jù)79H寫入第1個數(shù)據(jù)寄存器,如果是不譯碼方式,則DIG0引腳驅(qū)動的數(shù)碼管將顯示E;命令數(shù)據(jù)110010001000B表示將字數(shù)據(jù)88H寫入第5個數(shù)據(jù)寄存器,如果是BCD譯碼方式,則DIG4引腳驅(qū)動的數(shù)碼管將顯示8.。讀取按鍵代碼:0111xxxxxxxxB讀取按鍵代碼命令用于獲得CH451最近檢測到的有效按鍵的按鍵代碼。該命令是唯一的具有數(shù)據(jù)返回的命令,CH451從DOUT引腳輸出按鍵代碼,按鍵代碼總是7位數(shù)據(jù),最高位是狀態(tài)碼,位5?位0是掃描碼。讀取按鍵代碼命令的位數(shù)據(jù)B0?B7可以是任意值,所以單片機可以將該操作命令縮短為4位數(shù)據(jù)B8?B11。例如,CH451檢測到有效按鍵并中斷,按鍵代碼是5EH,簡化描述「「「0"1H"L"H"H"H"H"L"表示先向CH451發(fā)出讀取按鍵代碼命令0111xxxxxxxxB,然后從DOUT獲得按鍵代碼5EH。操作命令位11位10位9位8位7位6位5位4位3位2位1位??詹僮?000XXXXXXXX芯片內(nèi)部復(fù)位001000000001字數(shù)據(jù)左移001100000000字數(shù)據(jù)右移001100000010字數(shù)據(jù)左循環(huán)001100000001字數(shù)據(jù)右循環(huán)001100000011設(shè)定系統(tǒng)參數(shù)010000000WDOGKEYBDISP設(shè)定顯K參數(shù)0101MODELIMITINTENSITY設(shè)定閃爍控制0110D7SD6SD5SD4SD3SD2SD1SDOS加載字數(shù)據(jù)01000DMLDATA,DIG。對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)11001DIG-DATA,DIG1對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)21010DIG_DATA,DIG2對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)31011DIG_DATA,DIG3對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)41100DIG.DATA,DIG4對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)51101DIG_DATA,DIG5對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)61110DIG_DATA,DIG6對應(yīng)的字數(shù)據(jù)加載字數(shù)據(jù)71111DIG_DATA,DIG7對應(yīng)的字數(shù)據(jù)讀取按鍵代碼0111XXXXXXXX5鍵盤掃描CH451的鍵盤掃描功能支持8X8矩陣的64鍵鍵盤。在鍵盤掃描期間,DIG7?DIG0引腳用于列掃描輸出,SEG7?SEG0引腳都帶有內(nèi)部下拉電阻,用于行掃描輸入;當(dāng)啟用鍵盤掃描功能后,DOUT引腳的功能由串行接口的數(shù)據(jù)輸出變?yōu)殒I盤中斷以及數(shù)據(jù)輸出。CH451定期在顯示驅(qū)動掃描過程中插入鍵盤掃描。在鍵盤掃描期間,DIG7?DIG0引腳按照DIG0至DIG7的順序依次輸出高電平,其余7個引腳輸出低電平;SEG7?SEG0引腳的輸出被禁止,當(dāng)沒有鍵被按下時,SEG7?SEG0都被下拉為低電平;當(dāng)有鍵被按下時,例如連接DIG3與SEG4的鍵被按下,則當(dāng)DIG3輸出高電平時SEG4檢測到高電平;為了防止因為按鍵抖動或者外界干擾而產(chǎn)生誤碼,CH451實行兩次掃描,只有當(dāng)兩次鍵盤掃描的結(jié)果相同時,按鍵才會被確認有效。如果CH451檢測到有效的按鍵,則記錄下該按鍵代碼,并通過DOUT引腳產(chǎn)生低電平有效的鍵盤中斷,此時單片機可以通過串行接口讀取按鍵代碼;在沒有檢測到新的有效按鍵之前,CH451不再產(chǎn)生任何鍵盤中斷。CH451不支持組合鍵,也就是說,同一時刻,不能有兩個或者更多的鍵被按下;如果多個鍵同時按下,那么按鍵代碼較小的按鍵優(yōu)先。CH451所提供的按鍵代碼為7位,位2?位0是列掃描碼,位5?位3是行掃描碼,位6是狀態(tài)碼(鍵按下為1,鍵釋放為0)。例如,連接DIG3與SEG4的鍵被按下,則按鍵代碼是1100011B或者63H,鍵被釋放后,按鍵代碼通常是0100011B或者23H,其中,對應(yīng)DIG3的列掃描碼為011B,對應(yīng)SEG4的行掃描碼為100B。單片機可以在任何時候讀取按鍵代碼,但一般在CH451檢測到有效按鍵而產(chǎn)生鍵盤中斷時讀取按鍵代碼,此時按鍵代碼的位6總是1,另外,如果需要了解按鍵何時釋放,單片機可以通過查詢方式定期讀取按鍵代碼,直到按鍵代碼的位6為0。下表是連接在DIG7?DIG0與SEG7?SEG0之間的鍵被按下時,CH451所提供的按鍵代碼。這些按鍵代碼具有一定的規(guī)律,如果需要鍵被釋放時的按鍵代碼,則將表中的按鍵代碼的位6置0,也就是將表中的按鍵代碼減去40H。按鍵代碼DIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SEG047H46H45H44H43H42H41H40HSEG14FH4EH4DH4CH4BH4AH49H48HSEG257H56H55H54H53H52H51H50HSEG35FH5EH5DH5CH5BH5AH59H58HSEG467H66H65HS4H63H62H61H6QHSEG56FH6EH6DH0CH6BH6AH69H68HSEG677H76H75H74H73H72H71H70HSEG77FH7EH7DH7CH7BH7AH79H78IH2.574HC138芯片簡介74HC138概述74HC138是一款高速CMOS器件,74HC138引腳兼容低功耗肖特基TTL(LSTTL)系列。74HC138譯碼器可接受3位二進制加權(quán)地址輸入(A0,A1和A3),并當(dāng)使能時,提供8個互斥的低有效輸出(Y0至Y7)°74HC138特有3個使能輸入端:兩個低有效(E1和E2)和一個高有效(E3)。除非E1和E2置低且E3置高,否則74HC138將保持所有輸出為高。利用這種復(fù)合使能特性,僅需4片74HC138芯片和1個反相器,即可輕松實現(xiàn)并行擴展,組合成為一個1-32(5線到32線)譯碼器。任選一個低有效使能輸入端作為數(shù)據(jù)輸入,而把其余的使能輸入端作為選通端,則74HC138亦可充當(dāng)一個8輸出多路分配器,未使用的使能輸入端必須保持綁定在各自合適的高有效或低有效狀態(tài)。74HC138與74HC238邏輯功能一致,只不過74HC138為反相輸出。

74HC138特性?多路分配功能?復(fù)合使能輸入,輕松實現(xiàn)擴展兼容JEDEC標(biāo)準(zhǔn)no.7A?存儲器芯片譯碼選擇的理想選擇?低有效互斥輸出ESD保護oHBMEIA/JESD22-A114-C超過2000VoMMEIA/JESD22-A115-A超過200V?溫度范圍o-40?+85°Co-40?+125C74HC13SPlruconTIguFfll^nm[VEI叵改叵E3叵?7[T74HC13SPlruconTIguFfll^nm[VEI叵改叵E3叵?7[TGMD叵始一也71磴弟靠玷而IP1土SC16, gnd3.1.系統(tǒng)硬件設(shè)計選用LJD-SY-5200單片機實驗系統(tǒng),主要使用cpu的p0口控制74ch573以及l(fā)ed,74ls138接p1.5,1.6,1.7.ch451的load接p1.2,dinp3.5dclkp3.4doutp3.3.ds1302sclkp1.1I/Op1.0rstp1.4.存儲器24c02sclp1.1,sdap1.0.3.2Lcd液晶下面介紹其工作原理,其中有四個寄存器AC,GGRAM,DDRAM,GGROM.GGROM:提供8192個觸發(fā)器選擇屏幕的開和關(guān)。Dff=1的時候就將DDRAM的內(nèi)容顯示在lcd上。DDRAM:實際上是提供了64*2個位組的空間,而且可以控制字型。(也就是要輸出的內(nèi)容)GGROM:可提供四組圖象自定義空間,可以將沒有的字自定義到GGROM,在顯示到lcd上。

10、寫資料到馳CODE;RWRSDB7DB6DB3DMLB3DBSDB1UBO1.LD71)6D5[>4D3足LIDO功能:寫入資料到內(nèi)部的盅觀JK■出RAM的信CODE: RW RS(DL1RA1{/CGR.AM/II?.^I/CDR.W)DB7DB6UB5 D網(wǎng)LB3DBSDB1UBOTHD71)605D3[)2D]DO3.38段數(shù)碼管下面介紹其工作原理,由于是跟ch451相連,dig0-7實現(xiàn)的是數(shù)碼管選擇,而seg0-7實現(xiàn)的各段的點亮。所以控制的核心就是cpu與ch451的控制4系統(tǒng)的軟件設(shè)計4.1程序設(shè)計與調(diào)試步驟(1) 選題構(gòu)思,研究實現(xiàn)功能的方法。(2) 畫出硬件圖。(3) 編寫程序,并保存。(4) 按硬件接線圖接線。(5) 聯(lián)機并編譯。(6) 檢查并修改語法錯誤,并保存。(7) 編譯文件,并運行,觀察調(diào)試結(jié)果。(8) 如不能正常運行,采用單步運行法進行調(diào)試,按部就班,直至能夠達到設(shè)計要求。(9) 記錄最終的程序,并保存設(shè)計圖與電路圖。4.2計數(shù)器初值計算延時方法可以有兩種一中是利用MCS-51內(nèi)部定時器才生溢出中斷來確定1秒的時間,另一種是采用軟延時的方法。定時器工作時必須給計數(shù)器送計數(shù)器初值,這個值是送到TH和TL中的。他是以加法記數(shù)的,并能從全1到全0時自動產(chǎn)生溢出中斷請求。因此,我們可以把計數(shù)器記滿為零所需的計數(shù)值設(shè)定為C和計數(shù)初值設(shè)定為TC可得到如下計算通式:TC=M-C式中,M數(shù)初值設(shè)定為TC可得到如下計算通式:TC=M-C式中,M為計數(shù)器摸值,該值和計數(shù)器工作方式有在方式0時M為213;在方式1時M的值為216;方式2和3為28「F口山屆占巖BBBBIII~~II―II~~I

QQQQ2EGSX,■O關(guān)。4.2.11秒的方法我們采用在主程序中設(shè)定一個初值為20的軟件計數(shù)器和使T0定時50毫秒.這樣每當(dāng)T0到50毫秒時CPU就響應(yīng)它的溢出中斷請求,進入他的中斷服務(wù)子程序。在中斷服務(wù)子程序中,CPU先使軟件計數(shù)器減1,然后判斷它是否為零。為零表示1秒已到可以返回到輸出時間顯示程序。4.3時間顯示4.3.1寫保護寄存器操作當(dāng)寫保護寄存器的最高位為0時允許數(shù)據(jù)寫入寄存器寫保護寄存器可以通過命令字節(jié)8E8F來規(guī)定禁止寫入/讀出寫保護位不能在多字節(jié)傳送模式下寫入Write_Enable:MOVCommand,#8Eh;命令字節(jié)為8EMOVByteCnt,#1;單字節(jié)傳送模式MOVR0,#XmtDat數(shù)據(jù)地址覆給R0MOVXmtDat,#00h數(shù)據(jù)內(nèi)容為0寫入允許ACALLSend_Byte調(diào)用寫入數(shù)據(jù)子程序RET返回調(diào)用本子程序處4.3.2時鐘停止位操作當(dāng)把秒寄存器的第7位時鐘停止位設(shè)置為0時起動時鐘開始Osc_Enable:MOVCommand,#80h;命令字節(jié)為80MOVByteCnt,#1;單字節(jié)傳送模式MOVR0,#XmtDat數(shù)據(jù)地址覆給R0MOVXmtDat,#00h數(shù)據(jù)內(nèi)容為0振蕩器工作允許ACALLSend_Byte調(diào)用寫入數(shù)據(jù)子程序RET返回調(diào)用本子程序處4.3.3.多字節(jié)傳送方式當(dāng)命令字節(jié)為BE或BF時DS1302工作在多字節(jié)傳送模式8個時鐘/日歷寄存器從寄存器0地址開始連續(xù)讀寫從0位開始的數(shù)據(jù)當(dāng)命令字節(jié)為FE或FF時DS1302工作在多字節(jié)RAM傳送模式31個RAM寄存器從0地址開始連續(xù)讀寫從0位開始的數(shù)據(jù)例如寫入00年6月21日星期三13時59分59秒程序設(shè)置如下Write_Multiplebyte:MOVCommand,#0BEh;命令字節(jié)為BEhMOVByteCnt,#8;多字節(jié)寫入模式此模塊為8個MOVR0,#XmtDat數(shù)據(jù)地址覆給R0MOVXmtDat,#59h秒單元內(nèi)容為59hMOVXmtDat+1,#59h分單元內(nèi)容為59hMOVXmtDat+2,#13h時單元內(nèi)容為13hMOVXmtDat+3,#21h日期單元內(nèi)容為21hMOVXmtDat+4,#06h月單元內(nèi)容為06hMOVXmtDat+5,#03h星期單元內(nèi)容為03hMOVXmtDat+6,#0年單元內(nèi)容為00hMOVXmtDat+7,#0寫保護單元內(nèi)容為00hACALLSend_Byte調(diào)用寫入數(shù)據(jù)子程序RET返回調(diào)用本子程序處讀出寄存器0-7的內(nèi)容程序設(shè)置如下Read_Multiplebyte:MOVCommand,#0BFh;命令字節(jié)為BFhMOVByteCnt,#8;多字節(jié)讀出模式此模塊為8個MOVR1,#RcvDat數(shù)據(jù)地址覆給R1ACALLReceive_Byte調(diào)用讀出數(shù)據(jù)子程序RET返回調(diào)用本子程序處5結(jié)論本系統(tǒng)就是充分利用了8051芯片的I/O引腳。系統(tǒng)統(tǒng)采用MSC-51系列單片機來設(shè)計交通燈控制器,實現(xiàn)了數(shù)碼管上顯示hello,大約2秒之后數(shù)碼管清屏,然后8*8led開始顯示交通指示燈,此時數(shù)碼管上同步顯示到記時3,2,1。然后轉(zhuǎn)向下一個指示燈(轉(zhuǎn)向)。完成之后,用鍵盤鍵入初值,依次在數(shù)碼管上顯示。由于使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時的更新系統(tǒng),進行不同狀態(tài)的組合。但是在我們設(shè)計和調(diào)試的過程中,也發(fā)現(xiàn)了一些問題,譬如紅燈和綠燈的切換還不夠迅速,紅綠燈規(guī)則不效率還不是很高,在數(shù)碼管1秒定時顯示時結(jié)果初值獲取不正確,導(dǎo)致顯示的值與意向中得值不同。這需要在實踐中進一步完善。通過這次單片機實驗設(shè)計,使我得到了一次用專業(yè)知識、專業(yè)技能分析和解決問題全面系統(tǒng)的鍛煉。使我在單片機的基本原理、單片機應(yīng)用系統(tǒng)開發(fā)過程,以及在常用編程設(shè)計思路技巧(特別是匯編語言)的掌握方面都能向前邁了一大步,為日后成為合格的應(yīng)用型人才打下良好的基礎(chǔ)。附錄:系統(tǒng)總原理圖和程序1、系統(tǒng)總體原理圖TAI斗 ILL11BBBE占3占31“E占SI7,項冬3BBB333 ] 匚二—I-s.”111匚.■--.■1 QJT一■卜~J4―<———,■-.匚—~~■.—i—5~"T— QL~P""——1—^2^iit' L>Hi-42、流程圖按鍵流圖總流程圖1開始)************/*******************************************************************************/************/*******************************************************************************/描述:3、程序代碼*通過8位數(shù)碼管顯示當(dāng)前的時間包括時分秒通過時間設(shè)置鍵可對當(dāng)前的時間進*行設(shè)置。共有3個設(shè)置按鍵按鍵1和按鍵2及按鍵3;按鍵1為選定鍵。按鍵1首次被*按下時鐘停止走時并且秒時間開始閃爍,此時可通過按鍵2對秒時間進行設(shè)置,*按鍵2按下一次秒時間數(shù)值加一。當(dāng)按鍵1第二次被按下時分時間被選中并不停*地閃爍,此時通過按鍵2可對分時間進行設(shè)置,按鍵2按下一次分時間加一。按鍵*第三次被按下時小時時間被選中并且不停的閃爍,此時通過按鍵2可對小時時間進*行設(shè)置,按鍵2每按下一次小時時間加一按鍵1第四次被按下后時間設(shè)置結(jié)束,時*鐘從設(shè)定的時間開始走時。按鍵3為日期和時間的切換鍵,按鍵3按下一次顯示日*期,再按下一次顯示時間。使用按鍵3可在日期和時間之間來回進行切換。 ************************************************************************************【版權(quán)】Copyright(C)微芯科技http://www.bluemcu.comAllRightsReserved**【聲明】此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! ********************************************************************************/#include<reg52.h>//#include<stdio.h>#include<absacc.h>#include<intrins.h>/*須主程序定義的參數(shù)*//*如果使用鍵盤中斷請定義#defineUSE_KEY*//*須主程序定義的參數(shù)*/#defineCH451_RESET 0x0201#defineCH451_LEFTMOV 0x0300#defineCH451_LEFTCYC 0x0301#defineCH451_RIGHTMOV 0x0302#defineCH451_RIGHTCYC 0x0303#defineCH451_SYSOFF 0x0400#defineCH451_SYSON1 0x0401#defineCH451_SYSON2 0x0403#defineCH451_SYSON3 0x0407#defineCH451_DSP 0x0500#defineCH451_BCD 0x0580#defineCH451_TWINKLE 0x0600#defineCH451_DIG0 0x0800#defineCH451_DIG1 0x0900#defineCH451_DIG2 0x0a00/*復(fù)位*//*設(shè)置移動方式-作移*//*設(shè)置移動方式-左循*//*設(shè)置移動方式-右移*//*設(shè)置移動方式-右循*//*關(guān)顯示、鍵盤、看門狗*//*開顯示*//*開顯示、鍵盤*//*開顯示、鍵盤、看門狗功能*//*設(shè)置默認顯示方式*//*設(shè)置BCD譯碼方式*//*設(shè)置閃爍控制*//*數(shù)碼管位0顯示*//*數(shù)碼管位1顯示*//*數(shù)碼管位2顯示*/#defineCH451_DIG30x0b00/*數(shù)碼管位3顯示*/#defineCH451_DIG40x0c00/*數(shù)碼管位4顯示*/#defineCH451_DIG50x0d00/*數(shù)碼管位5顯示*/#defineCH451_DIG60x0e00/*數(shù)碼管位6顯示*/#defineCH451_DIG70x0f00/*數(shù)碼管位7顯示*/#defineuchar■unsignedchar#defineuintunsignedintsbitaa=P2”0;sbitbb=P2”3;sbitSDA=P1”0;sbitSCL=P1”1;sbitP1_4=P1”4;sbitP1_3=P1”3;sbitP1_5=P1”5;/*函數(shù)聲明*/voidiic_wait(void);voidiic_start(void);voidiic_stop(void);voidiic_ack(void);voidiic_no_ack(void);bitiic_wait_ack(void);voidiic_send_byte(uchardemand);uchariic_receive_byte(void);#defineLED8X8R XBYTE[0xFD00]#defineLED8X8G XBYTE[0xFB00]/*iic數(shù)據(jù)傳送位*//*iic時鐘控制位*//*iic延時*//*開啟iic總線*//*關(guān)閉iic總線 *//*發(fā)送ACK信號*//*發(fā)送NOACK信號*//*等待ACK信號*//*MCU向iic設(shè)備發(fā)送一個字節(jié)*//*MCU從iic設(shè)備接收一個字節(jié)*//*紅色LED電亮地址定義*//*綠色LED點亮地址定義*/#defineucharunsignedchar#defineuintunsignedint/*實時時鐘時鐘線引腳*//*實時時鐘數(shù)據(jù)線引腳/*實時時鐘時鐘線引腳*//*實時時鐘數(shù)據(jù)線引腳*//*實時時鐘復(fù)位線引腳*/sbit T_IO = P1”0;sbit T_RST = P1”4;sbit ch451_din = P3”5;sbit ch451_clk = P3”4;sbit ch451_load = P1”2;sbit ch451_dout = P3”3;sbitACC0=ACC"0;sbitACC7=ACC"7;sbitflag_time=PSW5;ucharucharucharucharucharucharucharucharucharucharucharucharucharcount;M;N;ch451_key;key_flag;g;p;ds_hour;ds_min;ds_sec;ds_date;ds_month;ds_year;unsignedunsigned/*void/*uchar/*void/*uchar/*void/*voiducharucharucharucharucharucharucharucharcharz,x;chary;RTInputByte(uchar);RTOutputByte(void);W1302(uchar,uchar);R1302(uchar);Set1302(uchar*);Get1302(ucharcurtime[]);/*/*輸入IByte*/輸出?1Byte*/設(shè)置時間*/讀取1302當(dāng)前時間*/WClock[7]={0x00,0x01,0x02,0x22,0x07,0x06,0x06};SClock[7];code[8]={0x1f,0x3f,0x5f,0x7f,0x9f,0xbf,0xdf,0xff};Code4[8]={0xEF,0xCF,0x80,0x00,0x00,0x80,0xCF,0xEF};Code5[8]={0xFF,0x03,0x01,0x01,0xF1,0xE0,0xF1,0xFB};Code6[8]={0xFB,0xF1,0xE0,0xF1,0x01,0x01,0x03,0xFF};Code7[8]={0xDF,0x8F,0x07,0x8F,0x80,0x80,0xC0,0xFF};DATA;/*/*idatatest_write[104];idatatest_read[104];ucharucharunsignedchark;voiddelayd(void)(uinti;uintj;for(i=0;i<300;i++)for(j=0;j<100;j++);}voiddelayq(void)(uchari;ucharj;for(i=0;i<100;i++)for(j=0;j<100;j++);}/*iic延時*/voidiic_wait(void)(;;;;;;;;;;;;;;}/*開啟iic總線*/voidiic_start(void)(SDA=1;SCL=1;iic_wait();SDA=0;iic_wait();SCL=0;}/*關(guān)閉iic總線*/voidiic_stop(void)(SDA=0;SCL=0;iic_wait();SCL=1;iic_wait();SDA=1;}/*發(fā)送ACK信號*/voidiic_ack(void)SDA=0;iic_wait();SCL=1;iic_wait();SCL=0;}/*發(fā)送NOACK信號*/voidiic_no_ack(void)(SDA=1;iic_wait();SCL=1;iic_wait();SCL=0;}/********************************************************************函數(shù)名:iic_wait_ack功 能:等待ACK信號說 明:入口參數(shù):返回值:1-ACK 0-ERROR設(shè) 計:藍海微芯***********************************************************************/bitiic_wait_ack(void)(ucharerrtime=255;//uinterrtime=1000;SDA=1;iic_wait();SCL=1;iic_wait();while(SDA)(errtime--;if(!errtime)return0;}SCL=0;return1;}/********************************************************************函數(shù)名:iic_send_byte功 能:MCU向iic設(shè)備發(fā)送一個字節(jié)說 明:入口參數(shù):sbyte 待發(fā)送的字節(jié)數(shù)據(jù)返回值:設(shè) 計:藍海微芯***********************************************************************/voidiic_send_byte(ucharsbyte)(uchari=8;while(i--)(SCL=0;;SDA=(bit)(sbyte&0x80);sbyte<<=1;iic_wait();SCL=1;iic_wait();}SCL=0;}/********************************************************************函數(shù)名:iic_receive_byte功 能:MCU從iic設(shè)備接收一個字節(jié)說 明:入口參數(shù):返回值:ddata接收數(shù)據(jù)設(shè)計:藍海微芯***********************************************************************/uchariic_receive_byte(void)(uchari=8;ucharddata=0;SDA=1;while(i--)(ddata<<=1;SCL=0;iic_wait();SCL=1;iic_wait();ddata|=SDA;}SCL=0;returnddata;}/********************************************************************函數(shù)名:write_iic_data功 能:向iic設(shè)備寫AN個字節(jié)說 明:入口參數(shù):write_data 存放寫入字節(jié)的數(shù)組address 指定從address處開始寫入num 寫入的字節(jié)數(shù)返回值:無設(shè) 計:藍海微芯***********************************************************************/voidwrite_iic_data(ucharwrite_data[],ucharaddress,ucharnum)(ucharn;iic_start();iic_send_byte(0xa0);iic_wait_ack();iic_send_byte(address);iic_wait_ack();for(n=0;n<num;n++)(iic_send_byte(write_data[n]);iic_wait_ack();}iic_stop();}/********************************************************************函數(shù)名:read_iic_data功 能:從iic設(shè)備讀取N個字節(jié)說 明:入口參數(shù):read_data 存放讀取字節(jié)的數(shù)組address 指定從address處開始讀取num 讀取的字節(jié)數(shù)返回值:無設(shè)計:藍海微芯***********************************************************************/voidread_iic_data(ucharread_data[],ucharaddress,ucharnum)(ucharn;uchar*pread_data;pread_data=read_data;iic_start();iic_send_byte(0xa0);iic_wait_ack();iic_send_byte(address);iic_wait_ack();iic_start();iic_send_byte(0xa1);iic_wait_ack();for(n=0;n<num;n++)(*pread_data=iic_receive_byte();pread_data++;if(n!=(num-1)) //最后一個數(shù)據(jù)不應(yīng)答(iic_ack();}}iic_no_ack();iic_stop();}voiddelay(void)(uinti;uintj;for(i=0;i<200;i++);for(j=0;j<500;j++);}voiddelay_10us(void)(uchari;for(i=0;i<20;i++);}/********************************************************************函數(shù)名:RTInputByte()功 能:實時時鐘寫入一字節(jié)說 明:往DS1302寫入1Byte數(shù)據(jù)(內(nèi)部函數(shù))入口參數(shù):d寫入的數(shù)據(jù)返回值:無設(shè)計:藍海微芯***********************************************************************/voidRTInputByte(uchard)(uchari;ACC=d;for(i=8;i>0;i--)(T_IO=ACC0; /*相當(dāng)于匯編中的RRC*/T_CLK=1;T_CLK=0;ACC=ACC>>1;}}/********************************************************************函數(shù)名:RTOutputByte()功 能:實時時鐘讀取一字節(jié)說 明:從DS1302讀取1Byte數(shù)據(jù)(內(nèi)部函數(shù))入口參數(shù):無返回值:ACC設(shè)計:藍海微芯***********************************************************************/ucharRTOutputByte(void)(uchari;for(i=8;i>0;i--)(ACC=ACC>>1; /*相當(dāng)于匯編中的RRC*/ACC7=T_IO;T_CLK=1;T_CLK=0;}return(ACC);}/********************************************************************函數(shù)名:W1302()功 能:往DS1302寫入數(shù)據(jù)說 明:先寫地址,后寫命令/數(shù)據(jù)(內(nèi)部函數(shù))調(diào) 用:RTInputByte(),RTOutputByte()入口參數(shù):ucAddr:DS1302地址,ucData:要寫的數(shù)據(jù)返回值:無設(shè)計:藍海微芯***********************************************************************/voidW1302(ucharucAddr,ucharucDa)(T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr); /*地址,命令*/RTInputByte(ucDa); /*寫1Byte數(shù)據(jù)*/T_CLK=1;T_RST=0;}/********************************************************************函數(shù)名:R1302()功 能:讀取DS1302某地址的數(shù)據(jù)說 明:先寫地址,后讀命令/數(shù)據(jù)(內(nèi)部函數(shù))

調(diào)用:RTInputByte(),RTOutputByte()入口參數(shù):ucAddr:DS1302地址返回值:ucData:讀取的數(shù)據(jù)設(shè)計:藍海微芯***********************************************************************/ucharR1302(ucharucAddr)(ucharucData;T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr); /*地址,命令*/ucData=RTOutputByte(); /*讀1Byte數(shù)據(jù)*/T_CLK=1;T_RST=0;return(ucData);}/********************************************************************函數(shù)名:Set1302()功說調(diào)能:設(shè)置初始時間功說調(diào)明:先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)用:W1302()入口參數(shù):pClock:設(shè)置時鐘數(shù)據(jù)地址格式為:秒分時日月星期年7Byte(BCD碼)1B1B1B1B1B1B1B返回值:無設(shè)計:藍海微芯***********************************************************************/voidSet1302(uchar*pClock)(uchari;ucharucAddr=0x80;W1302(0x8e,0x00); /*控制命令,WP=0,寫操作?*/for(i=7;i>0;i--)(W1302(ucAddr,*pClock);/*秒分時日月星期年*/pClock++;ucAddr+=2;}W1302(0x8e,0x80); /*控制命令,WP=1,寫保護?*/}/********************************************************************函數(shù)名:Get1302()功 能:讀取DS1302當(dāng)前時間說 明:調(diào)用:R1302()入口參數(shù):ucCurtime:保存當(dāng)前時間地址。當(dāng)前時間格式為:秒分時日月星期年7Byte(BCD碼)1B1B1B1B1B1B1B返回值:無設(shè)計:藍海微芯***********************************************************************/voidGet1302(ucharucCurtime[])(uchari;ucharucAddr=0x81;for(i=0;i<7;i++)(ucCurtime[i]=R1302(ucAddr);/*格式為:秒分時日月星期年*/ucAddr+=2;}}/********************************************************************函數(shù)名:ch451_bcd()功能:對從DS1302讀取的時間值進行轉(zhuǎn)化說 明:把一字節(jié)的BCD碼格式的時間值分成兩字節(jié)調(diào) 用:入口參數(shù):ds_bcd返回值:設(shè)計:藍海微芯***********************************************************************/voidch451_bcd(uchards_bcd)(M=ds_bcd&0xf0;M>>=4;N=ds_bcd&0x0f;}/********************************************************************函數(shù)名:ch451_init()功 能:對ch451芯片進行初始化說 明:調(diào) 用:入口參數(shù):返回值:設(shè)計:藍海微芯***********************************************************************/voidch451_init(void)(ch451_din=0; /*先低后高,選擇4線輸入*/ch451_din=1;

ch451_load=1;ch451_clk=1;_nop_();}/********************************************************************函功說數(shù)名:ch451_write()能:把12位的指令或數(shù)據(jù)寫入ch451明:12位數(shù)據(jù)或指令的寫入順序是低位用:入口參數(shù):command數(shù)名:ch451_write()能:把12位的指令或數(shù)據(jù)寫入ch451明:12位數(shù)據(jù)或指令的寫入順序是低位用:入口參數(shù):command返回值:設(shè)計:藍海微芯***********************************************************************/voidch451_write(unsignedintcommand)(unsignedchari;#ifdefUSE_KEYEX1=0;#endifch451_load=0;for(i=0;i<12;i++)(ch451_din=command&1;ch451_

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論