版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于51單片機(jī)設(shè)計(jì)的多功能</p><p><b> 出租車計(jì)價(jià)器</b></p><p><b> 目 錄</b></p><p> 第1章 引 言·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1</p
2、><p> 1. 1 出租車計(jì)價(jià)器概述~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1</p><p> 1. 2 本設(shè)計(jì)任務(wù)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1</p>
3、<p> 1.2.1 設(shè)計(jì)任務(wù)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1</p><p> 1.2.2 設(shè)計(jì)要求~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1</
4、p><p> 1. 3 系統(tǒng)主要功能~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2</p><p> 第2章 出租車計(jì)價(jià)器硬件設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2</p><p> 2.1 系統(tǒng)的硬件
5、構(gòu)成及功能~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2</p><p> 2. 2 AT89S51單片機(jī)及其引腳說(shuō)明~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2</p><p> 2.3 AT24C02引腳圖及其引腳功能~~~~~~~~~~
6、~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~4</p><p> 2. 4 AT24C02 掉電存儲(chǔ)單元的設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5</p><p> 2.5 里程計(jì)算、計(jì)價(jià)單元的設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7、~~~~~~~~~~~~~~~~6</p><p> 2.6 數(shù)據(jù)顯示單元設(shè)計(jì)·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6</p><p> 第3章 系統(tǒng)軟件設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~8</p&g
8、t;<p> 3. 1 系統(tǒng)主程序設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~8</p><p> 3. 2 定時(shí)中斷程序設(shè)計(jì)·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10</p>&
9、lt;p> 3. 3 里程計(jì)數(shù)中斷服務(wù)程序設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~10</p><p> 3.4 中途等待中斷服務(wù)程序設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~10</p><p> 3. 5 鍵盤(pán)服務(wù)程序設(shè)計(jì)~~~
10、~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~10</p><p> 3. 6 顯示子程序服務(wù)程序設(shè)計(jì)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~10</p><p> 第4章系統(tǒng)調(diào)試與測(cè)試結(jié)果分析~~~~~~~~~~~~~~~~~~~
11、~~~~~~~~~~~~~~~~~~~~~~~~~11</p><p> 4. 1 使用的儀器儀表~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~11</p><p> 4.2 系統(tǒng)調(diào)試~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12、~~~~~~~~~~~~~~~~~~~~~~~~11</p><p> 結(jié) 束 語(yǔ)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~12</p><p> 1、計(jì)價(jià)表使用說(shuō)明~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~12</p><p> 2、全部源程序~~~~~~~~
13、~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~12</p><p><b> 第1章 引 言</b></p><p> 本次課程設(shè)計(jì)利用單片機(jī)技術(shù)來(lái)實(shí)現(xiàn)一臺(tái)多功能出租車計(jì)價(jià)器,具有性能可靠、電路簡(jiǎn)單、成本低等特點(diǎn)。</p><p> 1.1 出租車計(jì)價(jià)器概述</p><p> 計(jì)價(jià)器顯示
14、的營(yíng)運(yùn)金額是營(yíng)運(yùn)里程與價(jià)格的函數(shù)(等候時(shí)間一般折算成一定比例的里程來(lái)計(jì)算)。出租車計(jì)價(jià)器通過(guò)傳感器與行駛車輛連接。出租汽車的實(shí)際里程通過(guò)傳感器的脈沖信號(hào)在計(jì)價(jià)器里折算成一定的計(jì)價(jià)營(yíng)運(yùn)里程。目前市場(chǎng)上出租車計(jì)價(jià)器功能主要有具有數(shù)據(jù)的復(fù)位功能、白天/晚上轉(zhuǎn)換功能、數(shù)據(jù)輸出功能、計(jì)時(shí)計(jì)價(jià)功能等等,但能夠進(jìn)行語(yǔ)音播報(bào)數(shù)據(jù)信息的出租車計(jì)價(jià)器還是比較少見(jiàn)的,針對(duì)這一點(diǎn)我們來(lái)設(shè)計(jì)一款多功能出租車計(jì)價(jià)器,在原有功能的基礎(chǔ)上增加單價(jià)輸出、單價(jià)調(diào)整、路程輸
15、出、顯示當(dāng)前的系統(tǒng)時(shí)間、語(yǔ)音播報(bào)數(shù)據(jù)信息等功能。</p><p> 1.2 本設(shè)計(jì)任務(wù)</p><p> 1.2.1 設(shè)計(jì)任務(wù)</p><p> 設(shè)計(jì)一款基于AT89S51單片機(jī)的出租車計(jì)價(jià)器。</p><p> 1.2.2 設(shè)計(jì)要求</p><p><b> 1.基本要求</b>&l
16、t;/p><p> ?。?)不同情況具有不同的收費(fèi)標(biāo)準(zhǔn)。</p><p><b> ??白天</b></p><p><b> ??晚上</b></p><p> ??途中等待(>10min 開(kāi)始收費(fèi))</p><p> 能進(jìn)行手動(dòng)修改單價(jià)。</p>
17、<p> 具有數(shù)據(jù)的復(fù)位功能。</p><p> IO 口分配的簡(jiǎn)易要求。</p><p> ??距離檢測(cè)使用霍爾開(kāi)關(guān)A44E</p><p> ??白天/晚上收費(fèi)標(biāo)準(zhǔn)的轉(zhuǎn)換開(kāi)關(guān)</p><p><b> ??數(shù)據(jù)的清零開(kāi)關(guān)</b></p><p> ??單價(jià)的調(diào)整(最好使
18、用+和-按鍵)</p><p> 數(shù)據(jù)輸出(采用LCM103)。</p><p> ??單價(jià)輸出 2 位</p><p> ??路程輸出 2 位</p><p> ??總金額輸出 3 位</p><p><b> 按鍵。</b></p><p><b
19、> ??啟動(dòng)計(jì)時(shí)開(kāi)關(guān)</b></p><p> ??數(shù)據(jù)復(fù)位(清零)</p><p><b> ??白天/晚上轉(zhuǎn)換</b></p><p><b> 2.發(fā)揮部分</b></p><p> 能夠在掉電的情況下存儲(chǔ)單價(jià)等數(shù)據(jù)。</p><p> 能
20、夠顯示當(dāng)前的系統(tǒng)時(shí)間。</p><p><b> 語(yǔ)音播報(bào)數(shù)據(jù)信息。</b></p><p> 1.3 系統(tǒng)主要功能</p><p> 本課程設(shè)計(jì)所設(shè)計(jì)的出租車計(jì)價(jià)器的主要功能有:數(shù)據(jù)的復(fù)位、白天/晚上轉(zhuǎn)換、數(shù)據(jù)輸出、計(jì)時(shí)計(jì)價(jià)、單價(jià)輸出及調(diào)整、路程輸出、語(yǔ)音播報(bào)數(shù)據(jù)信息、實(shí)現(xiàn)在系統(tǒng)掉電的時(shí)候保存單價(jià)和系統(tǒng)時(shí)間等信息等功能。輸出采用8 段
21、數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià),而且還能根據(jù)白天、黑夜、中途等待來(lái)調(diào)節(jié)單價(jià),同時(shí)在不計(jì)價(jià)的時(shí)候還能作為時(shí)鐘為司機(jī)同志提供方便。</p><p> 第2章 計(jì)價(jià)器硬件設(shè)計(jì)</p><p> 本系統(tǒng)的硬件設(shè)計(jì)主要包括單片機(jī)AT89S51、數(shù)據(jù)顯示部件、A44E霍爾傳感器電路、AT24C02 掉電存儲(chǔ)單元的設(shè)計(jì)、里程計(jì)算及計(jì)價(jià)單元的設(shè)計(jì)。在硬件設(shè)計(jì)過(guò)程中,充分利用各部件
22、的功能,實(shí)現(xiàn)多功能的出租車計(jì)價(jià)器設(shè)計(jì)。</p><p> 2.1 系統(tǒng)的硬件構(gòu)成及功能</p><p> 計(jì)價(jià)器的單片機(jī)控制方案圖如圖1 單片機(jī)控制方案圖所示。它由以下幾個(gè)部件組成:?jiǎn)纹瑱C(jī)AT89S51、總金額及單價(jià)顯示部件、鍵盤(pán)控制部件,AT24C02 掉電存儲(chǔ)控制、里程計(jì)算單元、串中顯示驅(qū)動(dòng)電路等。</p><p> 利用單片機(jī)豐富的IO端口,及其控制的
23、靈活性,實(shí)現(xiàn)基本的里程計(jì)價(jià)功能和價(jià)格調(diào)節(jié)、時(shí)鐘顯示功能。不但能實(shí)現(xiàn)所要求的功能而且能在很大的程度上擴(kuò)展功能,而且還可以方便的對(duì)系統(tǒng)進(jìn)行升級(jí)。具體電路參見(jiàn)附錄中“多功能出租車計(jì)價(jià)器總體電路圖”如圖1 單片機(jī)控制方案圖。</p><p> 圖1 單片機(jī)控制方案圖</p><p> 2.2 AT89S51單片機(jī)及其引腳說(shuō)明</p><p> AT89S51是美國(guó)
24、ATMEL公司生產(chǎn)的低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4KB的可系統(tǒng)編程的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲(chǔ)器既可在線編程(ISP)也可用傳統(tǒng)方法進(jìn)行編程及通用 8位微處理器于單片芯片中,具有高性價(jià)比。</p><p> AT89S51是一個(gè)有40個(gè)引腳的芯片,引腳配置如圖2 AT89S51引腳配置所示。
25、</p><p> 圖2 AT89S51引腳配置</p><p> AT89S51芯片的40個(gè)引腳功能為:</p><p> VCC 電源電壓。</p><p><b> GND 接地。</b></p><p> RST 復(fù)位輸入。</p><p> 當(dāng)R
26、ST變?yōu)楦唠娖讲⒈3?個(gè)機(jī)器周期時(shí),將使單片機(jī)復(fù)位。WDT溢出將使該引腳輸出高電平,設(shè)置SFR AUXR的DISRTO位(地址8EH)可打開(kāi)或關(guān)閉該功能。DISKRTO位缺省為RESET輸出高電平打開(kāi)狀態(tài)。</p><p> XTAL1 反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> XTAL2 來(lái)自反向振蕩放大器的輸出。</p><p>
27、 P0口 一組8位漏極開(kāi)路型雙向I/O口。也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動(dòng)8個(gè)TTL邏輯門(mén)電路,對(duì)端口寫(xiě)“1”可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。</p><p> P1口 一個(gè)帶內(nèi)部上拉電阻的8
28、位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。P1口部分端口引腳及功能如表1 P1口特殊功能所示。</p><p> 表1 P1口特殊功能</p><p&
29、gt; P2口 一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問(wèn)8位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口線上的內(nèi)容在整個(gè)訪問(wèn)期間不改變。Flash編程
30、和程序校驗(yàn)期間,P2亦接收低8位地址。</p><p> P3口 一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。P3的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)P3口寫(xiě)“1”時(shí),它們被內(nèi)部的上拉電阻把拉到高電并可作輸入端口。作輸入端口使用時(shí),被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如表2 P3口特殊功能所示。P3口還接收一些用于
31、Flash閃速存儲(chǔ)器編程和程序校驗(yàn)期間的控制信號(hào)。</p><p> 表2 P3口特殊功能</p><p> PSEN/ 程序儲(chǔ)存允許輸出是外部程序存儲(chǔ)器的讀先通信號(hào),當(dāng)AT89S51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN/有效,即輸出兩個(gè)脈沖。當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,沒(méi)有兩次有效的PSEN/信號(hào)。</p><p> EA/VPP 外
32、部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器,EA端必須保持低電平,需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程電壓VPP。</p><p> 2.3 AT24C02引腳圖及其引腳功能</p><p> AT24C02芯片引腳配置如圖3 </p><p> AT24C02引腳配置圖所示。&
33、lt;/p><p> 圖3 AT24C02引腳配置圖</p><p> AT24C02芯片DIP封裝,共有8個(gè)引腳,其中:</p><p> A2~A0 地址引腳;</p><p> SDA、SCL I2C總線接口;</p><p> WP 寫(xiě)保護(hù)引腳,WP接VSS時(shí),禁止寫(xiě)入高位地址,WP接VDD時(shí),允
34、許寫(xiě)入任何地址;</p><p><b> VCC 電源端</b></p><p><b> GND 接地端</b></p><p> 2.4 AT24C02 掉電存儲(chǔ)單元的設(shè)計(jì)</p><p> 掉電存儲(chǔ)單元的作用是在電源斷開(kāi)的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的單價(jià)信息。AT24C02是ATMEL
35、公司的2KB 字節(jié)的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40 年以上,而且采用8 腳的DIP 封裝,使用方便。其電路如圖 4 掉電存儲(chǔ)電路原理圖所示。</p><p> 圖 4 掉電存儲(chǔ)電路原理圖</p><p> 圖中R8、R10 是上拉電阻,其作用是減少AT2
36、4C02 的靜態(tài)功耗,由于AT24C02 的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(移位脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)傳送數(shù)據(jù)。</p><p> 每當(dāng)設(shè)定一次單價(jià),系統(tǒng)就自動(dòng)調(diào)用存儲(chǔ)程序,將單價(jià)信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時(shí)候,自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)器內(nèi)的單價(jià)等信息,讀到緩存單元中,供主程序使用。</p><p> 2.5 里程計(jì)算、
37、計(jì)價(jià)單元的設(shè)計(jì)</p><p> 里程計(jì)算是通過(guò)安裝在車輪上的霍爾傳感器A44E檢測(cè)到的信號(hào),送到單片機(jī),經(jīng)處理計(jì)算,送給顯示單元的。其原理如圖 5 傳感器測(cè)距示意圖所示。</p><p> 圖 5 傳感器測(cè)距示意圖</p><p> 由于A44E 屬于開(kāi)關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號(hào)符合TTL 電平標(biāo)準(zhǔn),可以直接接到
38、單片機(jī)的IO 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。</p><p> A44E 集成霍耳開(kāi)關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D 和OC 門(mén)輸出E 五個(gè)基本部分組成。</p><p> 在輸入端輸入電壓CC V ,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢(shì)發(fā)生器的兩端,根據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上
39、將會(huì)產(chǎn)生霍耳電勢(shì)差H V 輸出,該H V 信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC 門(mén)輸出。當(dāng)施加的磁場(chǎng)達(dá)到?工作點(diǎn)?(即OP B )時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí)OC 門(mén)輸出端輸出低電壓,通常稱這種狀態(tài)為?開(kāi)?。當(dāng)施加的磁場(chǎng)達(dá)到?釋放點(diǎn)?(即rP B )時(shí),觸發(fā)器輸出低電壓,三極管截止,使OC 門(mén)輸出高電壓,這種狀態(tài)為?關(guān)?。這樣兩次電壓變換,使霍耳開(kāi)關(guān)完成了一次開(kāi)關(guān)動(dòng)作。</p&
40、gt;<p> 我們選擇了P3.2 口作為信號(hào)的輸入端,內(nèi)部采用外部中斷0(這樣可以減少程序設(shè)計(jì)的麻煩),車輪每轉(zhuǎn)一圈(我們?cè)O(shè)車輪的周長(zhǎng)是1 米),霍爾開(kāi)關(guān)就檢測(cè)并輸出信號(hào),引起單片機(jī)的中斷,對(duì)脈計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到1000 次時(shí),也就是1 公里,單片機(jī)就控制將金額自動(dòng)的加增加,其計(jì)算公式:當(dāng)前單價(jià)×公里數(shù)=金額。</p><p> 2.6 數(shù)據(jù)顯示單元設(shè)計(jì)</p><
41、;p> 由于設(shè)計(jì)要求有單價(jià)(2 位)、路程(2 位)、總金額(3 位)顯示輸出,加上我們另外擴(kuò)展了時(shí)鐘顯示(包含時(shí)分秒的顯示),采用LCD 液晶段碼顯示,在距離屏幕1 米之外就無(wú)法看清數(shù)據(jù),不能滿足要求,而且在白天其對(duì)比度也不能夠滿足要求,因此我們采用6 位LED數(shù)碼管的分屏顯示,如圖 6 采用6 位LED數(shù)碼管的分屏顯示所示:</p><p> 時(shí)鐘顯示(圖中顯示為12 點(diǎn)0 分46 秒)</
42、p><p> 圖 6 采用6 位LED數(shù)碼管的分屏顯示</p><p> 數(shù)據(jù)的分屏的顯示是通過(guò)按鍵S1 來(lái)實(shí)現(xiàn)切換的,如圖 7 S1切換顯示屏所示。</p><p> 圖 7 S1切換顯示屏</p><p> 在出租車不走的時(shí)候,按下S1,可以實(shí)現(xiàn)數(shù)據(jù)的分屏顯示;車在行走的時(shí)候只有總金額和單價(jià)顯示屏在顯示,當(dāng)?shù)竭_(dá)目的地的時(shí)候,客戶要
43、求查看總的里程</p><p> 的時(shí)候,就可以按下S1 切換到里程和單價(jià)顯示屏,供客戶查詢。顯示電路的電路原理圖如圖 8 顯示器原理圖所示。</p><p> 圖 8 顯示器原理圖</p><p> 從單片機(jī)串口輸出的信號(hào)先送到左邊的移位寄存器(74HC164),由于移位脈沖的作用,使數(shù)據(jù)向右移,達(dá)到顯示的目的。移位寄存器74HC164還兼作數(shù)碼管的驅(qū)動(dòng)
44、,插頭1(header1)接電源,插頭2(header2)接數(shù)據(jù)和脈沖輸出端。電路中的三個(gè)整流管D1~D3 的作用是降低數(shù)碼管的工作電壓,增加其使用壽命。</p><p> 第3章 系統(tǒng)的軟件設(shè)計(jì)</p><p> 本系統(tǒng)的軟件設(shè)計(jì)主要可分為主程序模塊、定時(shí)計(jì)數(shù)中斷程序、里程計(jì)數(shù)中斷服務(wù)程序、中途等待中斷服務(wù)程序、顯示子程序服務(wù)程序、鍵盤(pán)服務(wù)程序六大模塊。下面對(duì)各部分模塊作介紹。&l
45、t;/p><p> 3.1 系統(tǒng)主程序設(shè)計(jì)</p><p> 在主程序模塊中,需要完成對(duì)各接口芯片的初始化、出租車起價(jià)和單價(jià)的初始化、中斷向量的設(shè)計(jì)以及開(kāi)中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。主程序流程圖如圖9 所示。當(dāng)按下S1
46、時(shí),就啟動(dòng)計(jì)價(jià),將根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷出行駛里程是否已超過(guò)起價(jià)公里數(shù)。若已超過(guò),則根據(jù)里程值、每公里的單價(jià)數(shù)和起價(jià)數(shù)來(lái)計(jì)算出當(dāng)前的累計(jì)價(jià)格,并將結(jié)果存于價(jià)格寄存器中,然后將時(shí)間和當(dāng)前累計(jì)價(jià)格送顯示電路顯示出來(lái)。當(dāng)?shù)竭_(dá)目的地的時(shí)候,由于霍爾開(kāi)關(guān)沒(méi)有送來(lái)脈沖信號(hào),就停止計(jì)價(jià),顯示當(dāng)前所應(yīng)該付的金額和對(duì)應(yīng)的單價(jià),到下次啟動(dòng)計(jì)價(jià)時(shí),系統(tǒng)自動(dòng)對(duì)顯示清零,并重新進(jìn)行初始化過(guò)程。</p><p> 3.2 定時(shí)
47、中斷服務(wù)程序</p><p> 在定時(shí)中斷服務(wù)程序中,每100ms 產(chǎn)生一次中斷,當(dāng)產(chǎn)生10 次中斷的時(shí)候,也就到了一秒,送數(shù)據(jù)到相應(yīng)的顯示緩沖單元,并調(diào)用顯示子程序?qū)崟r(shí)顯示。其程序流程如圖10 所示。</p><p> 3.3 里程計(jì)數(shù)中斷服務(wù)程序</p><p> 每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào)就使單片機(jī)中斷一次,當(dāng)里程計(jì)數(shù)器對(duì)里程脈沖計(jì)滿1000 次
48、時(shí),使微機(jī)進(jìn)入里程計(jì)數(shù)中斷服務(wù)程序中。在該程序中,需要完成當(dāng)前行駛里程數(shù)和總額的累加操作,并將結(jié)果存入里程和總額寄存器中。3.4 中途等待中斷服務(wù)程序</p><p> 當(dāng)在計(jì)數(shù)狀態(tài)下霍爾開(kāi)關(guān)沒(méi)有輸出信號(hào),片內(nèi)的T1 定時(shí)器便被啟動(dòng),每當(dāng)計(jì)時(shí)到達(dá)10分鐘,就對(duì)當(dāng)前金額加上中途等待的單價(jià),以后每十分鐘都自動(dòng)加上中途等待的單價(jià)。當(dāng)中途等待結(jié)束的時(shí)候,也就自動(dòng)切換到正常的計(jì)價(jià)。</p><p&g
49、t; 3.5 顯示子程序服務(wù)程序</p><p> 由于是分屏顯示數(shù)據(jù),所以就要用到4 個(gè)顯示子程序,分別是:時(shí)分秒顯示子程序(HMS_DIS)、金額單價(jià)顯示子程序(CP_DIS)、路程單價(jià)顯示子程序(DP_DIS)、單價(jià)調(diào)節(jié)子程序(PA_DIS)。</p><p> 3.6 鍵盤(pán)服務(wù)程序</p><p> 鍵盤(pán)采用查詢的方式,放在主程序中,當(dāng)沒(méi)有按鍵按
50、下的時(shí)候,單片機(jī)循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。如圖9 主程序流程圖,圖10 定時(shí)中斷服務(wù)程序。</p><p> 第4章 系統(tǒng)調(diào)試與測(cè)試結(jié)果分析</p><p> 根據(jù)系統(tǒng)設(shè)計(jì)方案,本系統(tǒng)的調(diào)試共分為三大部分:硬件調(diào)試,軟件調(diào)試和軟硬件聯(lián)調(diào)。測(cè)試包括里程計(jì)價(jià)測(cè)試、掉電存儲(chǔ)測(cè)試測(cè)試。</p><p> 4.1 使用的
51、儀器儀表 </p><p> 數(shù)字萬(wàn)用表 DT9203</p><p> 單片機(jī)仿真器 WAVE6000</p><p> 燒寫(xiě)器 GF2100</p><p> 雙蹤穩(wěn)壓穩(wěn)流電源 DH1718E-5</p><p> 數(shù)字示波器
52、 TDS1002</p><p><b> 4.2 系統(tǒng)調(diào)試</b></p><p> 根據(jù)系統(tǒng)設(shè)計(jì)方案,本系統(tǒng)的調(diào)試共分為三大部分:硬件調(diào)試,軟件調(diào)試和軟硬件聯(lián)調(diào)。由于在系統(tǒng)設(shè)計(jì)中采用模塊設(shè)計(jì)法,所以方便對(duì)各電路模塊功能進(jìn)行逐級(jí)測(cè)試。</p><p><b> 結(jié) 束 語(yǔ)</b></p>
53、<p> 通過(guò)本次課程設(shè)計(jì),又使我學(xué)到了許多書(shū)本上無(wú)法學(xué)到的知識(shí),也使也深該體會(huì)到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對(duì)學(xué)過(guò)的單片機(jī)知識(shí)有了很多的鞏固,同時(shí)也對(duì)單片機(jī)這一門(mén)課程產(chǎn)生了更大的興趣。</p><p> 在本次課程設(shè)計(jì)過(guò)程中,我學(xué)會(huì)了在網(wǎng)絡(luò)上查找有關(guān)本設(shè)計(jì)的各硬件的資源,其中包括:AT89S51單片機(jī)及其引腳說(shuō)明、AT24C02引腳圖及其引腳功能等,為本次課程設(shè)計(jì)提供了一定的資料。由于平
54、時(shí)很少進(jìn)行課程設(shè)計(jì),所以對(duì)于課程設(shè)計(jì)報(bào)告的格式也是近期才接觸到,經(jīng)過(guò)這兩次的設(shè)計(jì),為我們以后畢業(yè)設(shè)計(jì)的制作也奠定了一定的基礎(chǔ)。</p><p><b> 1.計(jì)價(jià)表使用說(shuō)明</b></p><p> ?。?)S1按鍵的功能</p><p> 在出租車不走的時(shí)候,按下S1,可以實(shí)現(xiàn)數(shù)據(jù)的分屏顯示;車在行走的時(shí)候只有總金額和單價(jià)顯示屏在顯示,當(dāng)
55、到達(dá)目的地的時(shí)候,客戶要求查看總的里程的時(shí)候,就可以按下S1 切換到里程和單價(jià)顯示屏,供客戶查詢。</p><p> (2)S2按鍵的功能</p><p> 在按下S1按鍵之后,若接著按下S2鍵則進(jìn)行單價(jià)調(diào)整(默認(rèn)為調(diào)整白天單價(jià)),當(dāng)接著按下S1時(shí),則進(jìn)行晚上單價(jià)調(diào),再次按下S1可進(jìn)行中途等待單價(jià)調(diào)整。當(dāng)單價(jià)調(diào)整結(jié)束后,可以通過(guò)過(guò)按下S2按鍵進(jìn)行時(shí)間調(diào)整,默認(rèn)為調(diào)整時(shí),接著按下S1可進(jìn)
56、行調(diào)整分,分調(diào)整后再接下S1可進(jìn)行秒調(diào)整。當(dāng)時(shí)調(diào)整完成后,若接著按下S2則又可進(jìn)行單價(jià)調(diào)整。</p><p> (3)S3按鍵的功能</p><p> 在顯示金額及單價(jià)時(shí),若按下S3鍵則顯示路程和單價(jià),再次按下S3,可返回顯示金額及單價(jià)。</p><p> ?。?)S4按鍵的功能</p><p> 在按下S1按鍵之后,若接著按下S4按鍵
57、,則進(jìn)行設(shè)定默認(rèn)晚上單價(jià),并啟動(dòng)計(jì)價(jià)器,若沒(méi)有按下S4則可設(shè)定默認(rèn)單價(jià)(白天),并啟動(dòng)計(jì)價(jià)器。當(dāng)設(shè)定默認(rèn)晚上單價(jià)結(jié)束后,再次接下S4按鍵,則可設(shè)定默認(rèn)中途等待單價(jià),并啟動(dòng)計(jì)價(jià)器。當(dāng)設(shè)定默認(rèn)中途等待單價(jià)后,若還按一次S4,則返回系統(tǒng)時(shí)間的顯示。</p><p><b> 2.全部源程序</b></p><p> //12864(帶字庫(kù)) (漢字及字母的顯示,漢字不
58、能錯(cuò)位)</p><p> #include <stdio.h></p><p> #include <reg52.h></p><p> #include <absacc.h></p><p> #define lcd_bus P0 // 數(shù)據(jù)總線</p><
59、p> sbit rs =P3^2; //數(shù)據(jù)&指令選擇,H:寫(xiě)數(shù)據(jù),L:寫(xiě)指令</p><p> sbit rw =P3^3; //讀&寫(xiě)選擇,H:read,L:write</p><p> sbit e =P3^4; //讀寫(xiě)使能</p><p> sbit psb=P3^0; //psb=H,并口模式, psb=L,串口模
60、式</p><p> sbit rst=P3^5; //LCD復(fù)位,低有效</p><p> sbit bf =P0^7; //忙閑狀態(tài)標(biāo)志位,H:內(nèi)部正執(zhí)行操作,L:空閑</p><p> sbit P20=P2^0; //進(jìn)入單價(jià)調(diào)節(jié)</p><p> sbit P21=P2^1; //計(jì)價(jià)開(kāi)始按鍵</p>
61、<p> sbit P23=P2^3; //時(shí)間調(diào)節(jié)按鍵</p><p> sbit P26=P2^6; //停車鎖定屏顯按鍵</p><p> sbit P27=P2^7; //確認(rèn)按鍵</p><p> sbit P16=P1^6; //光電開(kāi)關(guān)檢測(cè)</p><p> sbit P14=P1^4; //
62、373片選</p><p> void delayus(unsigned char us);//延時(shí)子程序us</p><p> void delayms(unsigned int ms);//延時(shí)子程序ms</p><p> void init_lcd(void);//初始化</p><p> void chk_busy(void)
63、;//檢測(cè)忙閑</p><p> void wr_data(unsigned char dat);//寫(xiě)數(shù)據(jù)到LCD</p><p> void wr_comm(unsigned char comm);//寫(xiě)命令到LCD</p><p> void wr_str(unsigned char *s);//向LCD寫(xiě)字符串,長(zhǎng)度64字符之內(nèi)(32個(gè)漢字)</
64、p><p> void wendu();</p><p> sbit DS18B20=P1^7; // ds18b20數(shù)據(jù)線</p><p> void leddisplay(); // 數(shù)碼管顯示</p><p> void shijian();</p><p> bit ResetDS1820(void)
65、; //復(fù)位子程序</p><p> void WRDS18B20(unsigned char); // 寫(xiě)1個(gè)字節(jié)子程序</p><p> unsigned char RDDS18B20(void); // 讀1個(gè)字節(jié)子程序</p><p> unsigned int GetTempDS18B20(void); //讀取溫度子程序</p>
66、<p> void delay1s(); //延時(shí)子程序 1s</p><p> /*-----------------DS1302程序開(kāi)始----------------- -----*/</p><p> sbit SCLK1302=P1^3; // 時(shí)鐘</p><p> sbit DATA1302=P1^2; // 數(shù)據(jù)</p>
67、;<p> sbit RST1302=P1^1; // 復(fù)位</p><p> sbit BIT0=ACC^0; // 累加器A 最低位</p><p> sbit BIT7=ACC^7; // 累加器A 最高位</p><p> void wr1302(unsigned char dat); //向1302寫(xiě)1個(gè)字節(jié)</p&g
68、t;<p> unsigned char rd1302(void); //從1302讀1個(gè)字節(jié)</p><p> void v_wr1302(unsigned char add,unsigned char dat); //先寫(xiě)地址,后寫(xiě)1字節(jié)數(shù)據(jù)</p><p> unsigned char v_rd1302(unsigned char add);
69、 //先寫(xiě)地址,后讀1字節(jié)數(shù)據(jù)</p><p> void v_set1302(unsigned char *p2); //設(shè)置初始時(shí)間</p><p> void v_get1302(void); //讀取DS1302當(dāng)前時(shí)間</p><p> /*
70、 -----------------DS1302程序結(jié)束------------------- */</p><p> unsigned char RcvData[8]; // 1302接收緩沖區(qū)</p><p> unsigned char SendData[8]={0,0,0,0,0,0,0,0}; // 1302發(fā)送緩沖區(qū)</p><p> uns
71、igned char time[7]; //當(dāng)前時(shí)間,格式: 秒 分 時(shí) 日 月 星期 年</p><p> unsigned char settime[7]={0x20,0x55,0x14,0x20,0x07,0x03,0x09};</p><p> //時(shí)間初始值: 秒 分 時(shí) 日 月 星期 年</p><p> unsigned c
72、har ledxs0[8]; // 時(shí)-分-秒 LED顯示</p><p> unsigned char ledxs[3]; // 數(shù)碼管顯示緩沖區(qū)</p><p> unsigned char ledxs2[8]; // 時(shí)-分-秒 LED顯示</p><p> unsigned char xs[16]; //顯示緩沖區(qū)年 月 日 時(shí) 分 秒<
73、/p><p> unsigned char aa[5]={0x30,0x30,0x30,0x30,0}; //距離數(shù)組</p><p> unsigned char bb[5]={0x30,0x30,0x30,0x30,0}; //費(fèi)用數(shù)組</p><p> unsigned char cc[2]={0x31,0x35};//單價(jià)數(shù)組</p><
74、;p> unsigned char dd[4]={0,0,0,0}; //語(yǔ)音芯片報(bào)價(jià)數(shù)組</p><p> void zongkong();</p><p> void tiaojie();</p><p> void jijia();</p><p> void baojia();</p><p>
75、 void danjia();</p><p> unsigned int x=15;//單價(jià)</p><p><b> main()</b></p><p><b> {</b></p><p> delayms(200);</p><p> v_set1302
76、(settime); // 設(shè)置初始時(shí)間</p><p> zongkong();</p><p><b> }</b></p><p> void zongkong()</p><p><b> { P14=1;</b></p><p> init_lcd();/
77、/LCD初始化,并清屏</p><p><b> while(1)</b></p><p><b> {</b></p><p> shijian();</p><p><b> wendu();</b></p><p> if(P20==0)
78、</p><p><b> {</b></p><p> danjia();//進(jìn)入單價(jià)調(diào)節(jié)函數(shù)</p><p><b> }</b></p><p> if(P21==0)</p><p><b> {</b></p><
79、p> init_lcd();//LCD初始化,并清屏</p><p> jijia(); //進(jìn)入計(jì)價(jià)頁(yè)面</p><p><b> }</b></p><p> if(P23==0)</p><p> tiaojie(); //調(diào)節(jié)時(shí)間</p><p> wr_comm
80、(0x80);</p><p> wr_str("泰山學(xué)院出租車行");</p><p> wr_comm(0x90);</p><p> wr_str(" 歡 迎 您");</p><p> wr_comm(0x88);</p><p> wr_str(&q
81、uot; ");</p><p> wr_data(ledxs2[0]);</p><p> wr_data(ledxs2[1]);</p><p> wr_data(ledxs2[2]);</p><p> wr_data(ledxs2[3]);</p><p> wr_data(ledxs
82、2[4]);</p><p> wr_data(ledxs2[5]);</p><p> wr_data(ledxs2[6]);</p><p> wr_data(ledxs2[7]);</p><p> wr_comm(0x98);</p><p> wr_data(ledxs0[0]);</p>
83、;<p> wr_data(ledxs0[1]);</p><p> wr_data(ledxs0[2]);</p><p> wr_data(ledxs0[3]);</p><p> wr_data(ledxs0[4]);</p><p> wr_data(ledxs0[5]);</p><p&g
84、t; wr_data(ledxs0[6]);</p><p> wr_data(ledxs0[7]);</p><p> wr_comm(0x9d);</p><p> wr_data(ledxs[0]);</p><p> wr_data(ledxs[1]);</p><p> wr_str("
85、.");</p><p> wr_data(ledxs[2]);</p><p> wr_str("度");</p><p><b> }</b></p><p><b> }</b></p><p> void shijian()&l
86、t;/p><p><b> {</b></p><p> unsigned char i,j;</p><p> v_get1302(); //取得當(dāng)前時(shí)間</p><p><b> j=2;</b></p><p> for(i=7;i>0;i--)<
87、;/p><p><b> {</b></p><p> xs[j]=(time[i-1]>>4)+0x30;</p><p> xs[j+1]=(time[i-1]&0x0f)+0x30; //BCD碼拆成2字節(jié)</p><p><b> j=j+2;</b></p&
88、gt;<p><b> }</b></p><p> ledxs0[0]=xs[2];</p><p> ledxs0[1]=xs[3]; // 年</p><p> ledxs0[2]=0x2d; // -</p><p> ledxs0[3]=xs[6];</p>
89、<p> ledxs0[4]=xs[7]; // 月</p><p> ledxs0[5]=0x2d; // -</p><p> ledxs0[6]=xs[8];</p><p> ledxs0[7]=xs[9]; // 日</p><p> ledxs2[0]=xs[10];</p>&
90、lt;p> ledxs2[1]=xs[11]; // 時(shí)</p><p> ledxs2[2]=0x2d; // -</p><p> ledxs2[3]=xs[12];</p><p> ledxs2[4]=xs[13]; // 分</p><p> ledxs2[5]=0x2d; // -&l
91、t;/p><p> ledxs2[6]=xs[14];</p><p> ledxs2[7]=xs[15]; // 秒</p><p><b> }</b></p><p> void wr1302(unsigned char dat) //向1302寫(xiě)1個(gè)字節(jié)</p><p><
92、;b> {</b></p><p> unsigned char i;</p><p> for(i=0;i<8;i++) //從最低位開(kāi)始發(fā)送</p><p><b> {</b></p><p><b> ACC=dat;</b></p><
93、;p> DATA1302=BIT0;//位傳送至數(shù)據(jù)總線</p><p><b> ;</b></p><p> SCLK1302=0; //清時(shí)鐘總線</p><p><b> ;</b></p><p> SCLK1302=1; //時(shí)鐘上升沿,發(fā)送數(shù)據(jù)有效</p>
94、<p> dat=dat>>1; //數(shù)據(jù)右移</p><p><b> ;</b></p><p><b> }</b></p><p><b> }</b></p><p> unsigned char rd1302(void) //從13
95、02讀1個(gè)字節(jié)</p><p><b> {</b></p><p> unsigned char i;</p><p> for(i=0;i<8;i++) //從最低位開(kāi)始接收</p><p><b> {</b></p><p> ACC=ACC>
96、>1;</p><p> DATA1302=1; //讀數(shù)據(jù)之前,P1口輸出1</p><p> SCLK1302=1;//時(shí)鐘置高電平</p><p><b> ;</b></p><p> SCLK1302=0;//時(shí)鐘下降沿,接收數(shù)據(jù)有效</p><p><b>
97、;</b></p><p> BIT7=DATA1302;//接收1位數(shù)據(jù)</p><p><b> ;</b></p><p><b> }</b></p><p> return ACC;</p><p><b> }</b>&
98、lt;/p><p> void v_wr1302(unsigned char add,unsigned char dat)//先寫(xiě)地址,后寫(xiě)1字節(jié)數(shù)據(jù)</p><p> { // 地址或命令 數(shù)據(jù)</p><p> RST1302=0;//復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止</p><p&g
99、t;<b> ;</b></p><p> SCLK1302=0;//清時(shí)鐘總線</p><p><b> ;</b></p><p> RST1302=1;//復(fù)位引腳高電平,控制邏輯有效</p><p><b> ;</b></p><p>
100、; wr1302(add); //寫(xiě)地址或命令</p><p><b> ;</b></p><p> wr1302(dat); //寫(xiě)1個(gè)數(shù)據(jù)</p><p><b> ;</b></p><p> SCLK1302=1;</p><p> RST130
101、2=0;</p><p><b> }</b></p><p> unsigned char v_rd1302(unsigned char add) //先寫(xiě)地址,后讀1字節(jié)數(shù)據(jù)</p><p> { // 地址</p><p> unsigned char
102、 i;</p><p> RST1302=0;//復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止</p><p><b> ;</b></p><p> SCLK1302=0;//清時(shí)鐘總線</p><p><b> ;</b></p><p> RST1302=1;//復(fù)位引腳
103、高電平,控制邏輯有效</p><p><b> ;</b></p><p> wr1302(add); //寫(xiě)地址或命令</p><p><b> ;</b></p><p> i=rd1302(); //讀取數(shù)據(jù)</p><p> SCLK1302=1;&
104、lt;/p><p> RST1302=0;</p><p> return i; //返回讀取的數(shù)據(jù)</p><p><b> }</b></p><p> /********************************************************************</p>
105、<p> * 名稱: send_byte1302</p><p> * 說(shuō)明: 先寫(xiě)地址,后寫(xiě)數(shù)據(jù)(時(shí)鐘多字節(jié)方式)</p><p> * 功能: 往DS1302寫(xiě)入時(shí)鐘數(shù)據(jù)(多字節(jié)方式)</p><p> * 調(diào)用: wr1302();v_wr1302();</p><p> * 輸入: *p: 時(shí)鐘數(shù)據(jù)地址 格式為
106、: 秒 分 時(shí) 日 月 星期 年 控制</p><p> * 8Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B 1B</p><p><b> * 返回值: 無(wú)</b></p><p> *******************************************************************
107、****/</p><p> void send_byte1302(unsigned char *p)</p><p><b> {</b></p><p> unsigned char i;</p><p> v_wr1302(0x8e,0x00); // 控制命令,WP=0,寫(xiě)操作</p>&l
108、t;p> RST1302=0;//復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止</p><p><b> ;</b></p><p> SCLK1302=0;//清時(shí)鐘總線</p><p><b> ;</b></p><p> RST1302=1;//復(fù)位引腳高電平,控制邏輯有效</p&
109、gt;<p><b> ;</b></p><p> wr1302(0xbe); //0xbe:時(shí)鐘多字節(jié)寫(xiě)命令</p><p> for(i=0;i<8;i++)//發(fā)送數(shù)據(jù)8字節(jié)</p><p><b> {</b></p><p> wr1302(*p);<
110、/p><p><b> p++;</b></p><p><b> }</b></p><p> SCLK1302=1;</p><p> RST1302=0;</p><p><b> }</b></p><p> /*
111、*******************************************************************</p><p> * 名稱: rcv_byte1302</p><p> * 說(shuō)明: 先寫(xiě)地址,后讀數(shù)據(jù)(時(shí)鐘多字節(jié)方式)</p><p> * 功能: 讀取DS1302時(shí)鐘數(shù)據(jù)</p><p> *
112、 調(diào)用: wr1302() , rd1302()</p><p> * 輸入: *p1: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年</p><p> * 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B</p><p> * 返回值: ucDa :讀取的數(shù)據(jù)</p><p> **************
113、*********************************************************/</p><p> unsigned char rcv_byte1302(unsigned char *p1)</p><p><b> {</b></p><p> unsigned char i;</p>
114、<p> RST1302=0;//復(fù)位引腳低電平,所有數(shù)據(jù)傳送終止</p><p><b> ;</b></p><p> SCLK1302=0;//清時(shí)鐘總線</p><p><b> ;</b></p><p> RST1302=1;//復(fù)位引腳高電平,控制邏輯有效</
115、p><p><b> ;</b></p><p> wr1302(0xbf);// 0xbf:時(shí)鐘多字節(jié)讀命令</p><p> for(i=0;i<8;i++)//接收數(shù)據(jù)8字節(jié)</p><p><b> {</b></p><p> *p1=rd1302();
116、</p><p><b> p1++;</b></p><p><b> }</b></p><p> SCLK1302=1;</p><p> RST1302=0;</p><p><b> }</b></p><p>
117、; /********************************************************************</p><p> * 名稱: v_set1302</p><p><b> * 說(shuō)明:</b></p><p> * 功能: 設(shè)置初始時(shí)間</p><p> * 調(diào)用:
118、 v_wr1302()</p><p> * 輸入: *p2: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年</p><p> * 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B</p><p><b> * 返回值: 無(wú)</b></p><p> **************
119、*********************************************************/</p><p> void v_set1302(unsigned char *p2)</p><p><b> {</b></p><p> unsigned char i;</p><p> u
120、nsigned char addr=0x80;</p><p> v_wr1302(0x8e,0x00); //控制命令,WP=0,允許寫(xiě)</p><p> for(i=0;i<7;i++)</p><p><b> {</b></p><p> v_wr1302(addr,*p2); /* 秒 分 時(shí) 日
121、 月 星期 年 */</p><p><b> p2++;</b></p><p> addr=addr+2;</p><p><b> }</b></p><p> v_wr1302(0x8e,0x80); // 控制命令,WP=1,寫(xiě)保護(hù)</p><p><
122、b> }</b></p><p> /********************************************************************</p><p> * 名稱: v_get1302</p><p><b> * 說(shuō)明:</b></p><p> *
123、功能: 讀取DS1302當(dāng)前時(shí)間</p><p> * 調(diào)用: v_rd1302()</p><p> * 輸入: time: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年</p><p> * 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B</p><p><b> * 返回值: 無(wú)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于51單片機(jī)設(shè)計(jì)的多功能出租車計(jì)價(jià)器
- 畢業(yè)設(shè)計(jì)----多功能單片機(jī)出租車計(jì)價(jià)器
- 基于單片機(jī)的多功能出租車計(jì)價(jià)器設(shè)計(jì)-畢業(yè)論文定稿
- 基于單片機(jī)出租車多功能計(jì)價(jià)器設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)
- 基于51單片機(jī)的出租車計(jì)價(jià)器畢業(yè)設(shè)計(jì)論文
- 畢業(yè)論文--基于單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)
- 基于單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)【畢業(yè)論文】
- 多功能出租車計(jì)價(jià)器畢業(yè)設(shè)計(jì)論文
- 畢業(yè)論文----基于c-51單片機(jī)出租車計(jì)價(jià)器的研究
- 畢業(yè)論文---基于單片機(jī)的出租車計(jì)價(jià)器的設(shè)計(jì)
- 畢業(yè)論文(設(shè)計(jì))基于單片機(jī)的出租車計(jì)價(jià)器的設(shè)計(jì)
- 多功能出租車計(jì)價(jià)器設(shè)計(jì)論文資料
- 多功能出租車計(jì)價(jià)器畢業(yè)設(shè)計(jì)
- 課程設(shè)計(jì)---基于51單片機(jī)的出租車計(jì)價(jià)器
- 畢業(yè)論文-- 基于單片機(jī)的出租車計(jì)價(jià)器軟件設(shè)計(jì)
- 出租車計(jì)價(jià)器設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)
- 基于單片機(jī)的出租車計(jì)價(jià)器
評(píng)論
0/150
提交評(píng)論