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

下載本文檔

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

文檔簡介

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

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

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

可選工業級溫度范圍-40+85與DS1202兼容在DS1202基礎上增加的特性對Vcc1有可選的涓流充電能力雙電源管用于主電源和備份電源供應備份電源管腳可由電池或大容量電容輸入附加的7字節暫存存儲器1DS1302的基本組成和工作原理DS1302的管腳排列及描述如下圖及表所示管腳描述管腳描述管腳描述管腳描述X1X232.768KHz晶振管腳GND地RST復位腳I/O數據輸入/輸出引腳管腳配置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內部寄存器CH:時鐘停止位寄存器2的第7位12/24小時標志CH=0振蕩器工作允許bit7=1,12小時模式CH=1振蕩器停止bit7=0,24小時模式WP:寫保護位寄存器2的第5位:AM/PM定義WP=0WP=1寄存器數據能夠寫入AP=1 下午模式寄存器數據不能寫入AP=0 上午模式TCS:涓流充電選擇 DS:二極管選擇位TCS=1010 使能涓流充電 DS=01 選擇一個二極管TCS=其它 禁止涓流充電 DS=10 選擇兩個二極管DS=00或11,即使TCS=1010,充電功能也被禁止

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

74HC138特性?多路分配功能?復合使能輸入,輕松實現擴展兼容JEDEC標準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.系統硬件設計選用LJD-SY-5200單片機實驗系統,主要使用cpu的p0口控制74ch573以及led,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個觸發器選擇屏幕的開和關。Dff=1的時候就將DDRAM的內容顯示在lcd上。DDRAM:實際上是提供了64*2個位組的空間,而且可以控制字型。(也就是要輸出的內容)GGROM:可提供四組圖象自定義空間,可以將沒有的字自定義到GGROM,在顯示到lcd上。

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

QQQQ2EGSX,■O關。4.2.11秒的方法我們采用在主程序中設定一個初值為20的軟件計數器和使T0定時50毫秒.這樣每當T0到50毫秒時CPU就響應它的溢出中斷請求,進入他的中斷服務子程序。在中斷服務子程序中,CPU先使軟件計數器減1,然后判斷它是否為零。為零表示1秒已到可以返回到輸出時間顯示程序。4.3時間顯示4.3.1寫保護寄存器操作當寫保護寄存器的最高位為0時允許數據寫入寄存器寫保護寄存器可以通過命令字節8E8F來規定禁止寫入/讀出寫保護位不能在多字節傳送模式下寫入Write_Enable:MOVCommand,#8Eh;命令字節為8EMOVByteCnt,#1;單字節傳送模式MOVR0,#XmtDat數據地址覆給R0MOVXmtDat,#00h數據內容為0寫入允許ACALLSend_Byte調用寫入數據子程序RET返回調用本子程序處4.3.2時鐘停止位操作當把秒寄存器的第7位時鐘停止位設置為0時起動時鐘開始Osc_Enable:MOVCommand,#80h;命令字節為80MOVByteCnt,#1;單字節傳送模式MOVR0,#XmtDat數據地址覆給R0MOVXmtDat,#00h數據內容為0振蕩器工作允許ACALLSend_Byte調用寫入數據子程序RET返回調用本子程序處4.3.3.多字節傳送方式當命令字節為BE或BF時DS1302工作在多字節傳送模式8個時鐘/日歷寄存器從寄存器0地址開始連續讀寫從0位開始的數據當命令字節為FE或FF時DS1302工作在多字節RAM傳送模式31個RAM寄存器從0地址開始連續讀寫從0位開始的數據例如寫入00年6月21日星期三13時59分59秒程序設置如下Write_Multiplebyte:MOVCommand,#0BEh;命令字節為BEhMOVByteCnt,#8;多字節寫入模式此模塊為8個MOVR0,#XmtDat數據地址覆給R0MOVXmtDat,#59h秒單元內容為59hMOVXmtDat+1,#59h分單元內容為59hMOVXmtDat+2,#13h時單元內容為13hMOVXmtDat+3,#21h日期單元內容為21hMOVXmtDat+4,#06h月單元內容為06hMOVXmtDat+5,#03h星期單元內容為03hMOVXmtDat+6,#0年單元內容為00hMOVXmtDat+7,#0寫保護單元內容為00hACALLSend_Byte調用寫入數據子程序RET返回調用本子程序處讀出寄存器0-7的內容程序設置如下Read_Multiplebyte:MOVCommand,#0BFh;命令字節為BFhMOVByteCnt,#8;多字節讀出模式此模塊為8個MOVR1,#RcvDat數據地址覆給R1ACALLReceive_Byte調用讀出數據子程序RET返回調用本子程序處5結論本系統就是充分利用了8051芯片的I/O引腳。系統統采用MSC-51系列單片機來設計交通燈控制器,實現了數碼管上顯示hello,大約2秒之后數碼管清屏,然后8*8led開始顯示交通指示燈,此時數碼管上同步顯示到記時3,2,1。然后轉向下一個指示燈(轉向)。完成之后,用鍵盤鍵入初值,依次在數碼管上顯示。由于使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時的更新系統,進行不同狀態的組合。但是在我們設計和調試的過程中,也發現了一些問題,譬如紅燈和綠燈的切換還不夠迅速,紅綠燈規則不效率還不是很高,在數碼管1秒定時顯示時結果初值獲取不正確,導致顯示的值與意向中得值不同。這需要在實踐中進一步完善。通過這次單片機實驗設計,使我得到了一次用專業知識、專業技能分析和解決問題全面系統的鍛煉。使我在單片機的基本原理、單片機應用系統開發過程,以及在常用編程設計思路技巧(特別是匯編語言)的掌握方面都能向前邁了一大步,為日后成為合格的應用型人才打下良好的基礎。附錄:系統總原理圖和程序1、系統總體原理圖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位數碼管顯示當前的時間包括時分秒通過時間設置鍵可對當前的時間進*行設置。共有3個設置按鍵按鍵1和按鍵2及按鍵3;按鍵1為選定鍵。按鍵1首次被*按下時鐘停止走時并且秒時間開始閃爍,此時可通過按鍵2對秒時間進行設置,*按鍵2按下一次秒時間數值加一。當按鍵1第二次被按下時分時間被選中并不停*地閃爍,此時通過按鍵2可對分時間進行設置,按鍵2按下一次分時間加一。按鍵*第三次被按下時小時時間被選中并且不停的閃爍,此時通過按鍵2可對小時時間進*行設置,按鍵2每按下一次小時時間加一按鍵1第四次被按下后時間設置結束,時*鐘從設定的時間開始走時。按鍵3為日期和時間的切換鍵,按鍵3按下一次顯示日*期,再按下一次顯示時間。使用按鍵3可在日期和時間之間來回進行切換。 ************************************************************************************【版權】Copyright(C)微芯科技http://www.bluemcu.comAllRightsReserved**【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息! ********************************************************************************/#include<reg52.h>//#include<stdio.h>#include<absacc.h>#include<intrins.h>/*須主程序定義的參數*//*如果使用鍵盤中斷請定義#defineUSE_KEY*//*須主程序定義的參數*/#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/*復位*//*設置移動方式-作移*//*設置移動方式-左循*//*設置移動方式-右移*//*設置移動方式-右循*//*關顯示、鍵盤、看門狗*//*開顯示*//*開顯示、鍵盤*//*開顯示、鍵盤、看門狗功能*//*設置默認顯示方式*//*設置BCD譯碼方式*//*設置閃爍控制*//*數碼管位0顯示*//*數碼管位1顯示*//*數碼管位2顯示*/#defineCH451_DIG30x0b00/*數碼管位3顯示*/#defineCH451_DIG40x0c00/*數碼管位4顯示*/#defineCH451_DIG50x0d00/*數碼管位5顯示*/#defineCH451_DIG60x0e00/*數碼管位6顯示*/#defineCH451_DIG70x0f00/*數碼管位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;/*函數聲明*/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數據傳送位*//*iic時鐘控制位*//*iic延時*//*開啟iic總線*//*關閉iic總線 *//*發送ACK信號*//*發送NOACK信號*//*等待ACK信號*//*MCU向iic設備發送一個字節*//*MCU從iic設備接收一個字節*//*紅色LED電亮地址定義*//*綠色LED點亮地址定義*/#defineucharunsignedchar#defineuintunsignedint/*實時時鐘時鐘線引腳*//*實時時鐘數據線引腳/*實時時鐘時鐘線引腳*//*實時時鐘數據線引腳*//*實時時鐘復位線引腳*/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*/設置時間*/讀取1302當前時間*/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;}/*關閉iic總線*/voidiic_stop(void)(SDA=0;SCL=0;iic_wait();SCL=1;iic_wait();SDA=1;}/*發送ACK信號*/voidiic_ack(void)SDA=0;iic_wait();SCL=1;iic_wait();SCL=0;}/*發送NOACK信號*/voidiic_no_ack(void)(SDA=1;iic_wait();SCL=1;iic_wait();SCL=0;}/********************************************************************函數名:iic_wait_ack功 能:等待ACK信號說 明:入口參數:返回值:1-ACK 0-ERROR設 計:藍海微芯***********************************************************************/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;}/********************************************************************函數名:iic_send_byte功 能:MCU向iic設備發送一個字節說 明:入口參數:sbyte 待發送的字節數據返回值:設 計:藍海微芯***********************************************************************/voidiic_send_byte(ucharsbyte)(uchari=8;while(i--)(SCL=0;;SDA=(bit)(sbyte&0x80);sbyte<<=1;iic_wait();SCL=1;iic_wait();}SCL=0;}/********************************************************************函數名:iic_receive_byte功 能:MCU從iic設備接收一個字節說 明:入口參數:返回值:ddata接收數據設計:藍海微芯***********************************************************************/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;}/********************************************************************函數名:write_iic_data功 能:向iic設備寫AN個字節說 明:入口參數:write_data 存放寫入字節的數組address 指定從address處開始寫入num 寫入的字節數返回值:無設 計:藍海微芯***********************************************************************/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();}/********************************************************************函數名:read_iic_data功 能:從iic設備讀取N個字節說 明:入口參數:read_data 存放讀取字節的數組address 指定從address處開始讀取num 讀取的字節數返回值:無設計:藍海微芯***********************************************************************/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)) //最后一個數據不應答(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++);}/********************************************************************函數名:RTInputByte()功 能:實時時鐘寫入一字節說 明:往DS1302寫入1Byte數據(內部函數)入口參數:d寫入的數據返回值:無設計:藍海微芯***********************************************************************/voidRTInputByte(uchard)(uchari;ACC=d;for(i=8;i>0;i--)(T_IO=ACC0; /*相當于匯編中的RRC*/T_CLK=1;T_CLK=0;ACC=ACC>>1;}}/********************************************************************函數名:RTOutputByte()功 能:實時時鐘讀取一字節說 明:從DS1302讀取1Byte數據(內部函數)入口參數:無返回值:ACC設計:藍海微芯***********************************************************************/ucharRTOutputByte(void)(uchari;for(i=8;i>0;i--)(ACC=ACC>>1; /*相當于匯編中的RRC*/ACC7=T_IO;T_CLK=1;T_CLK=0;}return(ACC);}/********************************************************************函數名:W1302()功 能:往DS1302寫入數據說 明:先寫地址,后寫命令/數據(內部函數)調 用:RTInputByte(),RTOutputByte()入口參數:ucAddr:DS1302地址,ucData:要寫的數據返回值:無設計:藍海微芯***********************************************************************/voidW1302(ucharucAddr,ucharucDa)(T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr); /*地址,命令*/RTInputByte(ucDa); /*寫1Byte數據*/T_CLK=1;T_RST=0;}/********************************************************************函數名:R1302()功 能:讀取DS1302某地址的數據說 明:先寫地址,后讀命令/數據(內部函數)

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

ch451_load=1;ch451_clk=1;_nop_();}/********************************************************************函功說數名:ch451_write()能:把12位的指令或數據寫入ch451明:12位數據或指令的寫入順序是低位用:入口參數:command數名:ch451_write()能:把12位的指令或數據寫入ch451明:12位數據或指令的寫入順序是低位用:入口參數:command返回值:設計:藍海微芯***********************************************************************/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論