多功能氣溫計(jì)_第1頁(yè)
多功能氣溫計(jì)_第2頁(yè)
多功能氣溫計(jì)_第3頁(yè)
多功能氣溫計(jì)_第4頁(yè)
多功能氣溫計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、多功能氣溫計(jì)一、摘要該設(shè)計(jì)方案是以89c52單片機(jī)為核心,采用dsl302控制顯示系統(tǒng),dsl8b20控制溫度采 集模塊,輔于日期提醒、鍵盤時(shí)間調(diào)整預(yù)設(shè)置等模塊,所構(gòu)建的數(shù)字時(shí)鐘系統(tǒng),能動(dòng)態(tài)顯示 實(shí)時(shí)時(shí)鐘的年、月、日、時(shí)、分、秒,對(duì)蜂鳴器與溫度調(diào)節(jié)模塊進(jìn)行了重點(diǎn)設(shè)計(jì),實(shí)現(xiàn)按鍵 控制時(shí)鐘正常顯示,調(diào)時(shí)等設(shè)置。本系統(tǒng)設(shè)計(jì)大部分功能有軟件來(lái)實(shí)現(xiàn),使電路簡(jiǎn)單明了, 系統(tǒng)穩(wěn)定性也得大大提高。二、引言單片機(jī)技術(shù)是當(dāng)今電子信息產(chǎn)業(yè)發(fā)展最迅速的領(lǐng)域,也是應(yīng)用電子技術(shù)專業(yè)的一門重要 課程。高職應(yīng)用電子技術(shù)專業(yè)更注重學(xué)生理論聯(lián)系實(shí)際,進(jìn)行動(dòng)手操作的能力,因此教學(xué)和 實(shí)驗(yàn)應(yīng)該滿足這樣的需求。本方案是針對(duì)單片機(jī)原理課

2、程為主的單片機(jī)模塊化創(chuàng)新電子綜合 實(shí)驗(yàn),從基本項(xiàng)目開(kāi)始,由易到難,讓學(xué)生真正掌握單片機(jī)應(yīng)用開(kāi)發(fā)的相關(guān)技術(shù),具備獨(dú)立 設(shè)計(jì)和制作簡(jiǎn)單的單片機(jī)相關(guān)產(chǎn)品的能力。三、方案分析及論證按照系統(tǒng)設(shè)計(jì)的要求和功能,將系統(tǒng)分為主控模塊、時(shí)鐘電路模塊、按鍵掃描模塊、 蜂鳴器模塊、電源電路、復(fù)位電路、晶振電路幾個(gè)模塊,系統(tǒng)框圖如下。主控模塊采用 AT89C52 單片機(jī),按鍵模塊幾個(gè)按鍵用于調(diào)整時(shí)間和設(shè)定鬧鐘,顯示模塊采用DS18B20,時(shí)鐘電路 模塊采用DS1302實(shí)時(shí)實(shí)現(xiàn)對(duì)時(shí)間,日期的操作。氣溫計(jì)采用DS18B20作為測(cè)溫元件,要求通過(guò)功能鍵K2控制實(shí)現(xiàn)氣溫顯示;溫度測(cè)量值每秒鐘更新 1 次;日歷和時(shí)鐘采用DS1

3、302進(jìn)行控制顯示,通過(guò)功能鍵K3、K4控制分別實(shí)現(xiàn)“年月日”和“時(shí)分秒”顯示;(3)要求設(shè)置啟動(dòng)鍵K1和停止鍵K16,啟動(dòng)鍵和功能鍵實(shí)現(xiàn)聯(lián)鎖控制(即啟動(dòng)鍵按下后 功能鍵按下才有效);( 4 )初始狀態(tài)時(shí),數(shù)碼管不顯示, 8 個(gè)流水燈全滅,蜂鳴器不響,繼電器、直流電機(jī)、步進(jìn)電機(jī)均不工作;要求啟動(dòng)鍵K1按下,數(shù)碼管顯示全8并按500ms亮滅閃爍,8個(gè)流水燈 也按500ms亮滅閃爍;停止鍵K16按下后回復(fù)初始狀態(tài);(5)按下K4鍵進(jìn)行“時(shí)分秒”顯示時(shí),可以通過(guò)K5、K6鍵進(jìn)行小時(shí)和分鐘時(shí)間的校正; 要求能夠整點(diǎn)報(bào)時(shí)(即分鐘為59,秒為55、 56、 57、 58時(shí)蜂鳴器短鳴4聲,秒為59時(shí)長(zhǎng) 鳴1

4、 聲);如果時(shí)間顯示到“23-59-59”秒時(shí),直流電動(dòng)機(jī)啟動(dòng)10秒鐘后關(guān)閉;(6)按下K2鍵顯示氣溫時(shí),要求溫度超過(guò)35度時(shí),蜂鳴器“滴一滴一”慢速連續(xù)鳴響; 溫度低于0度時(shí),蜂鳴器“滴滴滴滴”急促連續(xù)鳴響;溫度為035度時(shí),蜂鳴器不響。(7)要求按下啟動(dòng)鍵K1、功能鍵K2、K3、K4和停止鍵K16時(shí),蜂鳴器短促響一聲。四、電路原理分析1、AT89C52單片機(jī)T2/P1. 0匚1T2EK/P1. 1匚239P1. T2/P1. 0匚1T2EK/P1. 1匚239P1. 2匚338P1. 3匚斗37P1.4匚536M0SI/P1. 5匚635XIS0/P1.6匚734SCK/P1. 7匚833

5、RST匚932KKD/P3. 0匚1031TKD/P3. 1匚1130INT0/P3. 2匚1223INT1/P3. 3匚1328的一個(gè)型號(hào),它是Vcc P0. P0.P0.P0.0 /AD0 1/AD1 2/AD2 3/AD3P0. 4/AD4P0. 5/AD5 P0. 6/AD6 P0. 7/AD7 EA/VPP ALE/PEOG PESNP2. 7/A15AT89C5戲是系列單片機(jī)AT89C5 寫的Flash只讀程ATMEL 公司的高置通用8位中央處許多較復(fù)雜系統(tǒng)控PDIP 1HtMEL公司生產(chǎn)的。塾一個(gè)低電壓,高性能 CMOSg位單片機(jī),片內(nèi)含bytes的可反復(fù)擦 的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器

6、( I 玉容標(biāo)準(zhǔn)3/MCS-51 能強(qiáng)大的 at8捋 FZ 0/A8序存儲(chǔ)器和1256 byte 度、非易失性存儲(chǔ)技術(shù)生 理器和耳a?h眷存儲(chǔ)單 軸場(chǎng)合品RAM),器件采用1指令系統(tǒng),片內(nèi)9C5才單片機(jī)可為您提供AT89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中 斷口, 3 個(gè) 16 位可編程定時(shí)計(jì)數(shù)器 ,2 個(gè)全雙工串行通信口, 2 個(gè)讀寫口線, AT89C5 2 可以按照常規(guī)方法進(jìn)行編程 , 但不可以在線編程 (S 系列的才支持在線編程 ) 。其將通 用的微處理器和 Flash 存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的 Flash 存儲(chǔ)器可有效 地降低開(kāi)發(fā)成本

7、。兼容MCS51指令系統(tǒng) 8k可反復(fù)擦寫(1000次)Flash ROM32 個(gè)雙向 I/O 口 256x8bit 內(nèi)部 RAM3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷時(shí)鐘頻率0-24MHZ2 個(gè)串行中斷 可編程 UART 串行通道2個(gè)外部中斷源 共6個(gè)中斷源2個(gè)讀寫中斷口線 3級(jí)加密位低功耗空閑和掉電模式 軟件設(shè)置睡眠和喚醒功能AT89C52 P為40腳雙列直插封裝的8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核, 在內(nèi)部功能及管腳排布上與通用的 8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。 功能包括對(duì)會(huì)聚主 IC 內(nèi)部寄存器、數(shù)據(jù) RAM 及外部接口等功能部件的初始化,會(huì) 聚調(diào)整控制,會(huì)聚測(cè)試圖

8、控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1( 19腳)和XTAL2( 18腳)為振蕩器輸入輸出端口,外接12 MHZ 晶振。 RST/Vpd (9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。 VC C(40 腳)和 VSS(20 腳)為供電端口,分別接 +5V 電源的正負(fù)端。 P0P3 為可 編程通用 I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中, P0 端口(3239 腳)被定 義為N1功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13腳定義為IR輸入端, 10腳和11腳定義為I2C總線控制端口,分別連接 N1的SDAS( 18腳)和SCLS (19腳

9、)端口, 12 腳、27 腳及 28 腳定義為握手信號(hào)功能端口,連接主板 CPU 的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。P0 口P0 口是一組 8 位漏極開(kāi)路型雙向 I/O 口, 也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口 用時(shí),每位能吸收電流的方式驅(qū)動(dòng) 8 個(gè) TTL 邏輯門電路,對(duì)端口 P0 寫“1”時(shí),可作為高阻抗輸入端用。 在訪問(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í), 要求外接上拉電阻。P1 口P1 是一個(gè)帶內(nèi)部

10、上拉電阻的 8 位雙向 I/O 口, P1 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或 輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平, 此時(shí)可作輸入口。 作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流 (IIL)。與 AT89C51 不同之處是, P1.0 和 P1.1 還可分別作為定時(shí) /計(jì)數(shù)器 2 的外部計(jì) 數(shù)輸入( P1.0/T2 )和輸入( P1.1/T2EX ),參見(jiàn)表 1。Flash 編程和程序校驗(yàn)期間, P1 接收低 8 位地址。P2 口P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O 口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或 輸出電流)4

11、個(gè)TTL邏輯門電路。對(duì)端口 P2 寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入 口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一 個(gè)電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或 16 位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX DPTR 指令)時(shí), P2 口送出高 8 位地址數(shù)據(jù)。在訪問(wèn) 8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí) 行 MOVX RI 指令)時(shí), P2 口輸出 P2 鎖存器的內(nèi)容。Flash 編程或校驗(yàn)時(shí), P2 亦接收高位地址和一些控制信號(hào)。P3 口P3 口是一組帶有內(nèi)部上拉電阻的 8 位雙向 I/O 口。 P3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收 或輸出電流)

12、4個(gè)TTL邏輯門電路。對(duì) P3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此 時(shí),被外部拉低的 P3 口將用上拉電阻輸出電流( IIL)。P3 口除了作為一般的 I/O 口線外,更重要的用途是它的第二功能P3 口還接收一些用于 Flash 閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。RST 復(fù)位輸入。當(dāng)振蕩器工作時(shí), RST 引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。 ALE/PROG當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE (地址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節(jié)。一般情況下, ALE 仍以時(shí)鐘振蕩頻率的 1/6 輸出固定的脈沖信號(hào), 因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目

13、的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將 跳過(guò)一個(gè) ALE 脈沖。對(duì) Flash 存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖( PRO G)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的DO位置位, 可禁止 ALE 操作。該位置位后,只有一條 MOVX 和 MOVC 指令才能將 ALE 激活。 此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置 ALE 禁止位無(wú)效。PSEN程序儲(chǔ)存允許(PSEN )輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng) AT89C52由外部 程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次 PSEN 有效,即輸出兩個(gè)脈沖。 在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳

14、過(guò)兩次 PSEN 信號(hào)。EA/VPP外部訪問(wèn)允許。欲使 CPU 僅訪問(wèn)外部程序存儲(chǔ)器(地址為 OOOOHFFFFH) , EA 端必須保持低電平(接地)。需注意的是:如果加密位 LB1 被編程,復(fù)位時(shí)內(nèi)部會(huì) 鎖存 EA 端狀態(tài)。如 EA 端為高電平(接 Vcc 端), CPU 則執(zhí)行內(nèi)部程序存儲(chǔ)器中 的指令。 Flash 存儲(chǔ)器編程時(shí),該引腳加上 +12V 的編程允許電源 Vpp ,當(dāng)然這必須 是該器件是使用 12V 編程電壓 Vpp 。XTAL1振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL2振蕩器反相放大器的輸出端。2、復(fù)位電路復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電

15、源穩(wěn)定后,撤銷復(fù)位信號(hào)。 為可靠起見(jiàn),電源穩(wěn)定后還要經(jīng)一定的延時(shí)才撤銷復(fù)位信號(hào),以防電源開(kāi)關(guān)或電源插頭分- 合過(guò)程中引起的抖動(dòng)而影響復(fù)位。圖1所示的RC復(fù)位電路可以實(shí)現(xiàn)上述基本功能,圖3為 其輸入-輸出特性。但解決不了電源毛刺(A點(diǎn))和電源緩慢下降(電池電壓不足)等問(wèn)題 而 且調(diào)整 RC 常數(shù)改變延時(shí)會(huì)令驅(qū)動(dòng)能力變差。左邊的電路為高電平復(fù)位有效右邊為低電平 Sm為手動(dòng)復(fù)位開(kāi)關(guān)Ch可避免高頻諧波對(duì)電路的干擾VCChuazhoucn. com十*22VCChuazhoucn. com十*22站VCC3、時(shí)鐘電路時(shí)鐘是單片機(jī)的心臟,單片機(jī)各功能部件的運(yùn)行都是以時(shí)鐘頻率為基準(zhǔn),有條不紊的 一拍一拍地工

16、作。因此,時(shí)鐘頻率直接影響單片機(jī)的速度,時(shí)鐘電路的質(zhì)量也直接影響單片 機(jī)系統(tǒng)的穩(wěn)定性。常用的時(shí)鐘電路有兩種方式:一種是內(nèi)部時(shí)鐘方式,另一種為外部時(shí)鐘方 式。本文用的是內(nèi)部時(shí)鐘方式。電路圖如下:30pFI12MHz30pFMCS-51 單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,該高增益反向放大器的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個(gè)引腳跨接石英晶體振蕩器和微調(diào)電容,就構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。4、DS1302 時(shí)鐘芯片DS1302 包括時(shí)鐘/日歷寄存器和 31 字節(jié)(8 位)的數(shù)據(jù)暫存寄存器,數(shù)據(jù)通信僅通過(guò)一條串行輸入輸出口。實(shí)時(shí)時(shí)鐘/日歷提供包括秒、分、日、星期、

17、月、年等信息。閏年課自行調(diào)整,課選擇12小時(shí)制和24小時(shí)制,可以設(shè)置AM、PM。只通過(guò)三根線進(jìn)行數(shù)據(jù)的控制盒傳遞:RST非、I/O的控制盒傳遞:RST非、I/O、SCLK通過(guò)備用電源可以讓芯片在小于1MW的功率下運(yùn)作。VcC2 C1 8J VcciX1C2 S 73 SCLKX2匸3? 6ni/oGND匸4 g 5JCE各引腳的功能說(shuō)明:Vccl:備用電池端;Vcc2:5V 電源。當(dāng) Vcc2Vcc1 時(shí),由 Vcc2 向 DS1302 供電,當(dāng) Vcc2Vcc1 時(shí),由Vcc2 向 DS1302 供電。SCLK :串行時(shí)鐘,輸入;I/O:數(shù)據(jù)輸入輸出口;CE/RST:復(fù)位腳X1X2是外界晶振

18、腳(32.768Khz的晶振)地( GND)5、DS18B20不同而不同,,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。DS18B20測(cè)溫原理如圖3所示。 圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器 1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。 計(jì)數(shù)器1和溫度寄存器被預(yù)置在一55r所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振 產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1 的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì) 數(shù)器1 的預(yù)置將重新被裝入,計(jì)數(shù)器1 重 新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì) 數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)

19、數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù) 值即 為所測(cè)溫度。圖 3 中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于 修正計(jì)數(shù)器 1 的預(yù)置值。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分構(gòu)成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸 發(fā)器TH和TL、配置寄存器。DS18B20引腳定義(1)DQ 為數(shù)字信號(hào)輸入、輸出端;(2)GND 為電源地;3)VDD 為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。6、按鍵電路按鍵的開(kāi)關(guān)狀態(tài)通過(guò)一定的電路轉(zhuǎn)換為高、低電平狀態(tài)。按鍵閉合過(guò)程在相應(yīng)的 I/O 端口形成一個(gè)負(fù)脈沖。閉合和釋放過(guò)程都要經(jīng)過(guò)一定的過(guò)程才能達(dá)到穩(wěn)定,這一過(guò)程是處

20、于 高、低電平之間的一種不穩(wěn)定狀態(tài),稱為抖動(dòng)。抖動(dòng)持續(xù)時(shí)間的常長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有 關(guān),一般在5-10ms之間。為了避免CPU多次處理按鍵的一次閉合,應(yīng)采用措施消除抖動(dòng)。 本文采用的是獨(dú)立式按鍵,直接用I/O 口線構(gòu)成單個(gè)按鍵電路,每個(gè)按鍵占用一條I/O 口線, 每個(gè)按鍵的工作狀態(tài)不會(huì)產(chǎn)生互相影響。五、程序設(shè)計(jì)(1)各模塊程序主程序Main.c#include common.h#include timer.h#include pcf8591.h#include display.h#include ds18b20.h#include ds1302.huchar DRIVERS=0 x00;/定

21、義電機(jī),蜂鳴器等設(shè)備初始化 值void SYS_init(void)/初始化設(shè)備LED=0 xff;SMG_WE=0 x00;SMG_DU=0 xff;OTHERS=DRIVERS;/定時(shí)器初始化Timer_init();/初始化數(shù)碼管 不顯示DIS_init();/初始化 ds1302DS_init();/初始化 ds18b20DQ_rst();DQ_write(0 xcc);DQ_write(0 xbe);void main(void)/系統(tǒng)初始化SYS_init();while(1)/功能鍵設(shè)置/當(dāng) k1 按下,實(shí)現(xiàn)速度顯示,當(dāng)速度超過(guò) 100 ,蜂鳴器報(bào)警,當(dāng)?shù)陀?0 繼電器工作 le

22、d1 閃爍if(start&(!stop)&(!ds1302_dis)&(!Temperature)G_point_vec=1;LED_1s();if(d eal_adc)deal_adc=0;SPEND_deal();/當(dāng)k2按下,模擬停車,led 1 8亮if(stop=1) LED=0 x7e;DIS_init();/當(dāng) k5 按下,系統(tǒng)還原if(stop=2&(!start)&(!stop) SYS_init();/當(dāng) k4 按下,顯示當(dāng)前實(shí)時(shí)溫度 if(ds1302_dis&(!start)&(!stop)DEAL_ds1302();/當(dāng) k5 按下,顯示當(dāng)前實(shí)時(shí)時(shí)間 if(Temp

23、erature&(!start)&(!ds1302_dis) G_point_tem=1;OTHERS=0 x00;if(temp_flash) temp_flash=0;Temp_read();Deal_tem();Common.h#ifndef _COMMON_H_#define _COMMON_H_ #include reg52.h#include absacc.h#include intrins.h typedef unsigned int uint; typedef unsigned char uchar;extern uchar DRIVERS;#define LED#define

24、 SMG_WE#define LED#define SMG_WE#define SMG_DU#define OTHERSXBYTE0 x9fffXBYTE0 xdfffXBYTE0 xffffXBYTE0 xbfff#endifDisplay.c#include common.h#include pcf8591.h#include ds18b20.huchar code Disp_Seg12 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf,0 xff;uchar Disp_Dec8;/數(shù)碼管初始化,全關(guān)閉voi

25、d DIS_init(void)uchar i;for(i=0;i8;i+)Disp_Deci=8;/數(shù)碼管顯示函數(shù)void display(void)static uchar wela=0 x01,dula=0;static uchar count;SMG_WE=0 x00;SMG_DU=0 xff;/暫存段碼值count=Disp_SegDisp_Decdula;/當(dāng)溫度鍵按下,打開(kāi)顯示小數(shù)點(diǎn)if(G_point_tem)G_point_tem=0;if(dula=2) count=count&0 x7f; /當(dāng)速度鍵按下,打開(kāi)顯示小數(shù)點(diǎn)if(G_point_vec)G_point_vec

26、=0;if(dula=2)count=count&0 x7f; SMG_WE=wela;SMG_DU=count;dula+;wela0;x-);/復(fù)位函數(shù)void DQ_rst(void)uchar presece=1;while(presece)while(presece)DQ=1;_nop_();_nop_();DQ=0;DQ_delay(50);DQ=1;DQ_delay(6); presece=DQ;DQ_delay(45); presece=DQ;DQ=1;/寫字節(jié)函數(shù)void DQ_write(uchar dat)uchar i;for(i=0;i1;DQ=1;DQ_delay(

27、1);/讀字節(jié)函數(shù)uchar DQ_read(void)uchar i,val=0;for(i=0;i=1;DQ=0; _nop_();_nop_();_nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_(); if(DQ)val|=0 x80;DQ_delay(6);DQ=1;return (val);/讀溫度值void Temp_read(void)DQ_rst();DQ_write(0 xcc);DQ_write(0 xbe);tempe_count0=DQ_read();tempe_count1=DQ_read();DQ_rst();DQ

28、_write(0 xcc);DQ_write(0 x44);/處理溫度值void Deal_tem(void)uchar n,tem;/當(dāng)溫度為負(fù)值時(shí),高位取反,低位取反加一 if(tempe_count1127) tempe_count1=255-tempe_count1; tempe_count0=256-tempe_count0; n=1;tem=tempe_count0&0 x0f;Disp_Dec3=point_bittem; tem=(tempe_count1&0 x0f)4); Disp_Dec2=tem%100%10;Disp_Dec1=tem%100/10;Disp_Dec0

29、=tem/100;if(!Disp_Dec0)Disp_Dec0=11;if(!Disp_Dec1)Disp_Dec1=11;if(n) Disp_Dec0=10;Disp_Dec4=11;Disp_Dec5=11;Disp_Dec6=11;Disp_Dec7=11; Ds18b20.h#ifndef _DS18B20_H_#define _DS18B20_H_extern bit G_point_tem;extern void Deal_tem(void); extern void Temp_read(void);extern void DQ_write(uchar dat); extern

30、 void DQ_rst(void);extern void TempProc(void); extern void ReadTemp(void);#endifDs1302.c#include common.h /時(shí)鐘芯片特殊位申明sbit SCLK=P7;sbit DATI0=P23;sbit RST二P3;/寫字節(jié)函數(shù)void DS_write(uchar dat)uchar i;SCLK=0;for(i=0;i=1;/讀字節(jié)函數(shù)uchar DS_read(void)uchar i,val;for(i=0;i=1;return (val);/寫寄存器地址一個(gè)字節(jié)void SET_write

31、(uchar addr,uchar dat) RST=0;SCLK=0;RST=1;DS_write(addr);DS_write(dat);SCLK=1;RST=0;/讀寄存器地址一個(gè)地址uchar SET_read(uchar addr) uchar val;RST=0;SCLK=0;RST=1;DS_write(addr); val=DS_read();SCLK=1;RST=0;return (val); /讀秒uchar read_sec(void) uchar val; val=SET_read(0 x81);return (val); /讀分uchar read_min(void)

32、uchar val;val=SET_read(0 x83);return (val);/讀時(shí)uchar read_hou(void)uchar val;val=SET_read(0 x85);return (val);/關(guān)時(shí)鐘芯片寫保護(hù)void DISable(void)SET_write(0 x8e,0 x00);/開(kāi)時(shí)鐘芯片寫保護(hù)void ENable(void)SET_write(0 x8e,0 x80);/初始化時(shí)鐘芯片 初始值 08:30:00void DS_init(void)DISable();SET_write(0 x80,0 x00);SET_write(0 x82,0 x3

33、0);SET_write(0 x84,0 x08);ENable();Ds1302.h#ifndef _DS1302_H_#define _DS1302_H_extern void DS_init(void);extern uchar read_hou(void);extern uchar read_min(void);extern uchar read_sec(void);#endifKeyscan.c#include common.h/鍵盤掃描函數(shù)uchar keyscan(void)static uchar k;uchar readdata1,readdata2;uchar trg,tr

34、g1,trg2,count1,count2;P3=0 x0f;readdatai二P30 x0f;tr gl二readda ta1&( readda tacou ntl); counti=readdatai;P3=0 xf0;readdata2二P30 xf0;trg2二readdata2&(readdata2count2); count2=readdata2;trg=trgi+trg2;switch(trg)case 0 x8i:k=i;break;case 0 x4i:k=2;break;case 0 x2i:k=3;break;case 0 xii:k=4;break;case 0 x8

35、2:k=5;break;case 0 x42:k=6;break;case 0 x22:k=7;break;case 0 xi2:k=8;break;case 0 x84:k=9;break;case 0 x44:k=i0;break;case 0 x24:k=ii;break;case 0 xi4:k=i2;break;case 0 x88:k=i3;break;case 0 x48:k=i4;break;case 0 x28:k=i5;break;case 0 xi8:k=i6;break;default :k=0; break;return (k);Keyscan.h#ifndef _K

36、EYSCAN_H_#define _KEYSCAN_H_ extern uchar keyscan(void);#endifPcf8591.c#include common.h#include display.h#include timer.hbit G_point_vec=0;/全局變量 速度顯示小數(shù)點(diǎn)標(biāo)志sbit SDA二P2l;sbit SCL=P20;/起始函數(shù)void I2C_start(void)SDA=1;SCL=1;SDA=0;SCL=0;/停止函數(shù)void I2C_stop(void)SDA=0;SCL=0; SCL=1;SDA=1;/應(yīng)答信號(hào)bit I2C_ack(void

37、)uchar i; SCL=1;while(SDA=1)&(i255)i+;SCL=0;if(i=255) return (0);elsereturn (1);/寫字節(jié)函數(shù)void I2C_write(uchar dat)uchar i;for(i=0;i8;i+)SDA=(bit)(dat&0 x80);/ 先寫高位SCL=1; SCL=0;dat=1;/讀字節(jié)函數(shù)uchar I2C_read(void)uchar i,val; SDA=1;for(i=0;i8;i+) val120km/h void SPEND_deal(void)uint val,val1,val2,val3,val4;

38、/將 AD 值讀出處理 val=ADC_read(0 x03); val1=val*196/10000; val2=(val*196%10000)/1000; val4=(val*196%10000)%1000)/100; val3=val1*100+val2*10+val4;/當(dāng)速度超過(guò)100ms,蜂鳴器報(bào)警 if(val3416)BUZZER_100ms(); else BUZZER_100ms_off();/當(dāng)速度低于100ms,繼電器工作 if(val3208)RELAY_500ms(); else RELAY_500ms_off(); Disp_Dec0=val3*24/10000;

39、 Disp_Dec1=(val3*24%10000)/1000;Disp_Dec2=(val3*24%10000)%1000)/100;Disp_Dec3=(val3*24%10000)%1000)%100)/10; Disp_Dec4=11;Disp_Dec5=11;Disp_Dec6=11;Disp_Dec7=11;Pcf8591.h#ifndef _PCF8591_H_#define _PCF8591_H_extern bit G_point_vec;extern void SPEND_deal(void);#endifTimer.c#include common.h#include k

40、eyscan.h#include display.h#include ds1302.h /全局變量 功能鍵值初始化 uchar start=0,deal_adc=0,stop=0;uchar Temperature=0,ds1302_dis=0;uchar LED_flash=0;/ds1302 的時(shí)分秒 uchar sec,min,hou;bit buzzer_flash=0,relay_flash=0;bit temp_flash=0,read_ds1302=0;/定時(shí)器初始化void Timer_init(void)/選擇定時(shí)方式與時(shí)基 1msTMOD=0 x01;TH0=0 xfc;T

41、L0=0 x18; TR0=1; ET0=1; EA=1;void timer0(void) interrupt 1static uchar num,num1;static uchar key_num;static uint num2,num3,num4;TR0=0;TH0=0 xfc;TL0=0 x18;display();/讀取鍵盤掃描值 50msnum+;if(num=5)num=0;key_num=keyscan();/記錄功能鍵值,返回給主程序if(key_num=5)start=1;stop=0;Temperature=0;ds1302_dis=0;if(key_num=6)Tem

42、perature=1;start=0;ds1302_dis=0;if(key_num=7)stop=1;if(key_num=8)stop=2;if(key_num=9)ds1302_dis=1;start=0;stop=0;/處理 AD 轉(zhuǎn)換時(shí)間標(biāo)志 50msnum1+;if(num1=50)num1=0;deal_adc=1;/led 閃爍間隔標(biāo)志 500msnum2+;if(num2=500)num2=0;LED_flash=LED_flash;/溫度采集間隔與蜂鳴器 時(shí)間間隔標(biāo)志 100msnum3+;if(num3=100)num3=0;temp_flash=1;buzzer_flash=buzzer_flash;/繼電器工作時(shí)間 間隔 500msnum4+;if(num4=500)num4=0;read_ds1302=1;relay_flash=relay_flash;TR0=1;/led 閃爍程序void LED_1s(void

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論