安全檢測(cè)技術(shù)課程設(shè)計(jì)報(bào)告_第1頁
安全檢測(cè)技術(shù)課程設(shè)計(jì)報(bào)告_第2頁
安全檢測(cè)技術(shù)課程設(shè)計(jì)報(bào)告_第3頁
安全檢測(cè)技術(shù)課程設(shè)計(jì)報(bào)告_第4頁
安全檢測(cè)技術(shù)課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、安全檢測(cè)技術(shù)課程設(shè)計(jì)報(bào)告-基于單片機(jī)STC89C52八通道溫度數(shù)字采集系統(tǒng)院(系) 質(zhì)量與安全工程學(xué)院專業(yè)班級(jí) 07安全1 姓 名 張海霞 繆卓琳 戚麗娜 黃愷 王曉青 李文 夏琰 學(xué) 號(hào)0700603103 0700603104 0700603106 0700603116 0700603127 0700603142 0730223115指導(dǎo)教師 王強(qiáng) 日 期 2010年7月3日目錄1前言32概述42.1STC單片機(jī)介紹4STC單片機(jī)發(fā)展歷程介紹4STC單片機(jī)功能介紹52.2設(shè)計(jì)內(nèi)容52.3設(shè)計(jì)要求62.4設(shè)計(jì)系統(tǒng)方框圖73設(shè)計(jì)方案選擇83.1電源的選擇83.2A/D轉(zhuǎn)換電路芯片選擇83.3單

2、片機(jī)的選擇83.4測(cè)溫芯片的選擇93.5液晶顯示電路芯片的選擇93.6其他元器件的選擇94設(shè)計(jì)原理圖及PCB板封裝104.1單片機(jī)最小系統(tǒng)電路104.2按鍵輸入電路114.3液晶顯示電路124.4環(huán)境溫度測(cè)試電路134.5A/D轉(zhuǎn)換電路134.6開關(guān)量輸出電路144.7通信轉(zhuǎn)換電路144.8下位機(jī)存儲(chǔ)電路154.9核心電路154.10I/O擴(kuò)展電路164.11接口電路164.12報(bào)警電路164.13PCB板封裝175程序設(shè)計(jì)185.1System.h185.2system.c195.3Mainfun.c205.4xk1602.c275.5ds1624.c285.6mcp3208.c356系統(tǒng)流

3、程圖367成品展示368總結(jié)及感想37前言本次安全檢測(cè)技術(shù)課程設(shè)計(jì)是在安全檢測(cè)技術(shù)課程的基礎(chǔ)上,結(jié)合電工學(xué)、C語言、微機(jī)原理、電工實(shí)習(xí)、自動(dòng)控制原理等相關(guān)課程進(jìn)行的一次綜合設(shè)計(jì)。在設(shè)計(jì)任務(wù)確定后,成立了課題組,經(jīng)過大量的收集資料,于2010年6月28日提出具體工作方案及實(shí)施計(jì)劃,集體討論制定了寫作框架,并劃分了具體任務(wù)。本次課程設(shè)計(jì)的總體方案,是根據(jù)芯片7805、DS1624、max232、MCP3208、PL2303、TLV5614、ULN2803zw、1602字符液晶使用說明、74HC540、24c02中文官方資料手冊(cè)編寫,以電工學(xué),微機(jī)原理、自動(dòng)控制原理為指導(dǎo)思想,主要內(nèi)容包括以STC8

4、9C52單片機(jī)為核心芯片,控制其他各外圍電路的運(yùn)行,實(shí)現(xiàn)8通道溫度量的采集,A/D轉(zhuǎn)換,下位機(jī)顯示,控制。并將采集結(jié)果通過數(shù)字接口上傳到上位機(jī),實(shí)現(xiàn)歷史數(shù)據(jù)的顯示、保存等功能。在設(shè)計(jì)過程中,在方案選擇上會(huì)遇到許多問題,要考慮選擇的芯片性價(jià)比相對(duì)同功能的芯片高,不僅從要考慮芯片實(shí)現(xiàn)的功能,還要考慮其經(jīng)濟(jì)因素。溫度的采集在我們生活中運(yùn)用廣泛,如蔬菜的塑料大棚,建筑物內(nèi)的溫控系統(tǒng),以及醫(yī)學(xué)、天文學(xué)方面都有涉及。本次課程設(shè)計(jì)任務(wù)艱巨,為了做好這次設(shè)計(jì),我們搜集了大量資料,進(jìn)行了明確分工,專題分析,及時(shí)蹉商,分頭準(zhǔn)備,全身心地投入,完成了本次設(shè)計(jì)。我們?cè)趯?shí)際過程中遇到了很多困難,但經(jīng)過努力都一一克服。在

5、過程中得到老師及同學(xué)的大力支持與協(xié)助,在此表示衷心的感謝。概述 STC單片機(jī)介紹 STC單片機(jī)發(fā)展歷程介紹單片機(jī)作為微型計(jì)算機(jī)的一個(gè)重要分支,其應(yīng)用范圍很廣,發(fā)展也很快。1971年Intel公司首次宣布4004的4位微處理器,1974年12月Fairchild(仙童)公司即推出了8位單片機(jī)F8,開創(chuàng)了單片機(jī)的門戶。單片機(jī)在我國的應(yīng)用始于20世紀(jì)70年代末,那時(shí)我國的科研工作者開始對(duì)單片機(jī)的應(yīng)用進(jìn)行了初期探索,20世紀(jì)80年代,單片機(jī)在我國得以廣泛的應(yīng)用,各理工科院校陸續(xù)開設(shè)了有關(guān)應(yīng)用課程。在教學(xué)及應(yīng)用上,Zilog公司生產(chǎn)的Z80CPU成為我國工業(yè)控制的主流,以Z80為CPU組成的TP801單

6、板機(jī)在教學(xué)上及應(yīng)用領(lǐng)域發(fā)揮過巨大作用。20世紀(jì)80年代末至90年代初,我國在工業(yè)控制領(lǐng)域開始轉(zhuǎn)向使用Intel公司生產(chǎn)的MCS-51。單片機(jī)從1976年公布8位機(jī)至今不到30年的時(shí)間,它沒有像微處理器那樣從8位、16位,一直發(fā)展到32位、64位,8位機(jī)目前依然是單片機(jī)的主流機(jī)型。但是,它突破了原有的集成結(jié)構(gòu),在內(nèi)部繼承了越來越多的外圍電路和外設(shè)接口,從而發(fā)展成為控制器(MicroController)的體系結(jié)構(gòu),其發(fā)展歷程大致分為以下幾步:第一階段:?jiǎn)纹瑱C(jī)的控索階段第二階段:?jiǎn)纹瑱C(jī)的完善階段第三階段:8位單片機(jī)的鞏固發(fā)展及16位單片機(jī)的推出階段第四階段:為控制器的全面發(fā)展階段單片機(jī)已在各行業(yè)得

7、到廣泛應(yīng)用,為適應(yīng)更多的應(yīng)用領(lǐng)域,廠家采取了在一塊單片機(jī)芯片上集成多種功能部件和大容量存儲(chǔ)器的方法。因而,整個(gè)應(yīng)用系統(tǒng)不需要擴(kuò)展,而體積變小、可靠性增高,使單片機(jī)成為真正意義上的單片機(jī)系統(tǒng)。 STC單片機(jī)功能介紹單片機(jī)是隨著大規(guī)模集成電路的出現(xiàn)及其發(fā)展,將計(jì)算機(jī)的CPU,RAM,ROM,定時(shí)/計(jì)數(shù)器和多種I/O接口集成在一片芯片上,形成了芯片級(jí)的計(jì)算機(jī),因此單片機(jī)早期的含義稱為單片微型計(jì)算機(jī)(single chipmicrocomputer)。它擁有優(yōu)異的性價(jià)比、集成度高、體積小、可靠性高、控制功能強(qiáng)、低電壓、低功耗的顯著優(yōu)點(diǎn)。主要應(yīng)用于智能儀器儀表、工業(yè)檢測(cè)控制、機(jī)電一體化等方面,并取得了顯

8、著成果。單片機(jī)應(yīng)用系統(tǒng)可分為:(1)最小應(yīng)用系統(tǒng)是指維持單片機(jī)運(yùn)行的最簡(jiǎn)單配置系統(tǒng)。這種系統(tǒng)成本低廉,結(jié)構(gòu)簡(jiǎn)單,常構(gòu)成一些簡(jiǎn)單的控制系統(tǒng),如開關(guān)狀態(tài)的輸入/輸出控制等。片內(nèi)有ROM/EPROM的單片機(jī),其最小應(yīng)用系統(tǒng)除了外部配置晶振,復(fù)位電路,電源的單個(gè)單片機(jī)。片內(nèi)無ROM/RAM的單片機(jī),其最小應(yīng)用系統(tǒng)除了外部配置晶振,復(fù)位電路,電源外,還應(yīng)外接EPROM或EEPROM作為程序存儲(chǔ)器使用。(2)最小功耗應(yīng)用系統(tǒng)是指為了保證正常運(yùn)行,系統(tǒng)的功耗最小。(3)典型應(yīng)用系統(tǒng)是指單片機(jī)要完成工業(yè)測(cè)控功能所必須的硬件結(jié)構(gòu)系統(tǒng)。STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程

9、Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。STC89C52具有以下標(biāo)準(zhǔn)功能:8K字節(jié)Flash,256字節(jié)RAM,32位I/O接口線,定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇模式??臻e模式下,CPU停止工作,允許

10、RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作,直到下一個(gè)中斷或硬件復(fù)位為止。設(shè)計(jì)內(nèi)容本次課程設(shè)計(jì)是以STC89C52單片機(jī)為核心芯片,控制其他各外圍電路的運(yùn)行,實(shí)現(xiàn)8通道溫度量的采集,A/D轉(zhuǎn)換,下位機(jī)顯示,控制。并將采集結(jié)果通過數(shù)字接口上傳到上位機(jī),實(shí)現(xiàn)歷史數(shù)據(jù)的顯示、保存等功能。其主要模塊包括:單片機(jī)最小系統(tǒng)電路;按鍵輸入電路;液晶顯示電路;下位機(jī)存儲(chǔ)電路;環(huán)境溫度測(cè)試電路;A/D轉(zhuǎn)換電路;開關(guān)量輸出電路;通信轉(zhuǎn)換電路;上位機(jī)程序。設(shè)計(jì)要求(1)熟練掌握PROTEL軟件,會(huì)使用該軟件繪制原理圖元件,PCB元件封裝,電路原理圖,及生成PCB板。(2)理解電路原理圖,熟悉各模塊的方案選擇原則,熟

11、悉總線、SPI等各種通用總線。(3)熟悉STC89C51單片機(jī)的各部分功能,熟悉單片機(jī)的外部中斷、定時(shí)中斷和串口中斷??梢允褂脝纹瑱C(jī)控制其他外圍電路,實(shí)現(xiàn)本次課程設(shè)計(jì)的所有功能。(4)熟練掌握KEIL軟件,可以獨(dú)立完成單片機(jī)C語言程序的編寫,編譯及調(diào)試。(5)熟練掌握燒錄軟件,可以使用相應(yīng)的軟件將生成的hex文件燒錄到單片機(jī)中。(6)熟練掌握GUI-builder軟件,可以使用該軟件編寫上位機(jī)程序,實(shí)現(xiàn)上位機(jī)與下位機(jī)的通訊,可以在上位機(jī)顯示及保存通訊數(shù)據(jù)。(7)熟悉溫度傳感器,溫度變送器的作用及原理,熟悉熱電偶、變送器以及A/D芯片之間的接線方法。設(shè)計(jì)系統(tǒng)方框圖設(shè)計(jì)方案選擇電源的選擇 供選擇的

12、電源有:7805和LM317。7805可提供電壓為小于18V的一個(gè)電壓值,LM317可提供的電壓為6V40V可調(diào)電壓,但LM317無法精確的提供某一電壓值,所以電源應(yīng)選擇用7805。A/D轉(zhuǎn)換電路芯片選擇 供選擇的芯片有:MCP3208、TLC549、AD7888和ADC0832。其區(qū)別如下表:芯片名稱字符數(shù)通道數(shù)接口Mcp3208128SPITlc54981SPIAD7888128SPIADC083288并行由于字符數(shù)、通道數(shù)和接口的比較,我們將Tlc549和ADC0832排除,但由于芯片AD7888價(jià)格過于昂貴而Mcp3208價(jià)格便宜許多,所以我們選擇Mcp3208作為A/D做換電路的芯片

13、。 單片機(jī)的選擇供選擇的單片機(jī)有:AT89S52、STC89C52和STC89C51 ,其區(qū)別如下表:?jiǎn)纹瑱C(jī)RAMROM下載方式下載軟件AT89S525128KISPISP/flashmagicSTC89C525128K串口STC-ISPSTC89C512564K由于STC89C51的RAM為256不符合要求,而STC89C52的下載軟件較AT89S52更方便,股我們選擇STC89C52。 測(cè)溫芯片的選擇供選擇的芯片有:DS1624、LM35和DSI8B20,其區(qū)別如下表:測(cè)溫芯片輸出量類型接口時(shí)序要求DS1624數(shù)字寬LM35模擬DSI8B20數(shù)字單總線苛刻由于LM35輸出量為模擬信號(hào),不符

14、合要求,我們將其排除,而對(duì)于DSI8B20,由于其時(shí)序要求苛刻、編程難度高、轉(zhuǎn)移時(shí)間長且容易出錯(cuò),所以我們選擇DS1624作為測(cè)溫電路的芯片。液晶顯示電路芯片的選擇 供選擇的芯片有1602和12864,其區(qū)別如下表:芯片顯示形式字符數(shù)是否顯示漢字價(jià)格占用I/O口數(shù)量1602字符型32否便宜101112864點(diǎn)陣型32是較貴串行時(shí)3個(gè)并行時(shí)1314個(gè)由于1602是字符型,所以不能顯示漢字,但由于12864占用的I/O口串行時(shí)為3個(gè)太少,串行時(shí)為1314個(gè)太多,且12864的價(jià)格太昂貴,所以選擇1602為宜。其他元器件的選擇晶振電路中電容C5、C6因選擇容值2033pF的電容,他們起協(xié)助震動(dòng)的作用

15、。按鍵電路總的電路R4、R5因選擇阻值為110k歐的電阻,用作上拉電阻。電容C44、C45是容值1uF的去抖電容。A/D轉(zhuǎn)換電路中由于運(yùn)用PID算法,故電阻因?yàn)?70歐,電容為0.1uF。電源電路中電容C1、C3因選用阻值在1001000uF的電容,C2、C4為濾波電容,二極管1N4007的作用是保護(hù)電路,二極管1N4148的作用為消除電路的反向電流。報(bào)警電路中,三極管Q9作為開關(guān)使用,必須為PNP型三極管。同時(shí)電阻R24的阻值必須達(dá)到幾十歐。否則蜂鳴器LS1會(huì)發(fā)生誤響。設(shè)計(jì)原理圖及PCB板封裝單片機(jī)最小系統(tǒng)電路單片機(jī)機(jī)最小系統(tǒng)電路包括電源電路,晶振電路和復(fù)位電路,其主要功能是使單片機(jī)可以正常

16、工作。其中電源電路采用LM7805穩(wěn)壓芯片,該芯片可將外部電壓穩(wěn)定在5V左右,正負(fù)誤差0.15V,輸出電流1.5A,輸出阻抗15 EMBED Equation.DSMT4 ,可以很好的完成單片機(jī)系統(tǒng)的穩(wěn)壓工作。晶振電路采用11.0592MHz的晶振。復(fù)位電路由上電復(fù)位和按鍵復(fù)位電路組成。(1)電源電路,如圖4-1a:圖4-1a 電源電路原理圖 (2)晶振電路,如圖4-1b:圖4-1b 晶振電路原理圖(3)復(fù)位電路,如圖4-1c:圖4-1c 復(fù)位電路原理圖按鍵輸入電路本次設(shè)計(jì)的按鍵輸入電路采用了單片機(jī)的外部中斷模式,單片機(jī)的2路外部中斷分別接入2個(gè)按鍵,實(shí)現(xiàn)液晶顯示切換等功能。如圖4-2:圖4-

17、2 按鍵輸入電路原理圖液晶顯示電路在本次課程設(shè)計(jì)中,采用1602字符型液晶實(shí)現(xiàn)A/D采樣數(shù)據(jù)、開關(guān)量數(shù)據(jù)的下位機(jī)顯示。如圖4-3:圖4-3 液晶顯示原理圖環(huán)境溫度測(cè)試電路本設(shè)計(jì)采用 EMBED Equation.DSMT4 總線調(diào)用DS1624溫度測(cè)試芯片測(cè)量單片機(jī)系統(tǒng)周圍的溫度,以保證單片機(jī)系統(tǒng)不會(huì)因?yàn)楸旧頊囟犬惓6鵁o法正常工作。如圖4-4:圖4-4 環(huán)境溫度測(cè)試電路原理A/D轉(zhuǎn)換電路A/D轉(zhuǎn)換電路采用微芯公司生產(chǎn)的mcp3208芯片,該芯片精度高、轉(zhuǎn)換速度快、價(jià)格相對(duì)較低,使用SPI總線調(diào)用。以實(shí)現(xiàn)實(shí)現(xiàn)8通道、12位模擬量與數(shù)字量的轉(zhuǎn)換。如圖4-5:圖4-5 A/D轉(zhuǎn)換電路原理圖開關(guān)量輸出

18、電路本次設(shè)計(jì)采用ULN2803芯片控制8路繼電器實(shí)現(xiàn)8路開關(guān)量的輸出,輸出的開關(guān)量最大可以達(dá)到24V。如圖4-6:圖4-6 開關(guān)量輸出電路圖通信轉(zhuǎn)換電路本次設(shè)計(jì)采用串口接口實(shí)現(xiàn)下位機(jī)與上位機(jī)的通信,將A/D轉(zhuǎn)換數(shù)據(jù)、開關(guān)量數(shù)據(jù)等數(shù)據(jù)傳達(dá)到上位機(jī)。如圖4-7:圖4-7 通信轉(zhuǎn)換原理圖下位機(jī)存儲(chǔ)電路下位機(jī)存儲(chǔ)模塊采用 EMBED Equation.DSMT4 總線調(diào)用2片 EMBED Equation.DSMT4 芯片24C08,實(shí)現(xiàn)各數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)。如圖4-8:圖4-8 下位機(jī)存儲(chǔ)電路原理圖核心電路如圖4-9:圖4-9 核心電路原理圖I/O擴(kuò)展電路如圖4-10:圖4-10 I/O擴(kuò)張電路原理圖接

19、口電路如圖4-11:圖4-11 接口電路原理圖報(bào)警電路如圖4-12:圖4-12 報(bào)警電路原理圖PCB板封裝如圖4-13:圖4-13 PCB板封裝圖程序設(shè)計(jì)System.h/*頭文件區(qū)*/#include <reg52.H>/單片機(jī)特有的 (頭文件)作用:主要是對(duì)字符、整數(shù)、位進(jìn)行定義和一些調(diào)用的函數(shù)進(jìn)行聲明。#include <absacc.h> #include <intrins.h>#include <stdio.h>/*宏定義區(qū)*/#define uchar unsigned char /無符號(hào)的字符#define uint unsigne

20、d int/無符號(hào)的整數(shù)輸入/*位定義區(qū)*/sbit lcdrs=P27;/液晶數(shù)據(jù)/命令選擇端sbit lcden=P26;/液晶使能端/*sbit lcdrw=P35;*/液晶使能端sbit DIN=P24; /mcp3208輸入 ADsbit DOUT=P23; /mcp3208輸出sbit SCLK=P22; /mcp3208時(shí)鐘sbit CS=P25; /mcp3208片選sbit SDA=P21;/I2CSDA端口 1624采集溫度sbit SCL=P20;/I2CSCL端口sbit beep=P37;/蜂鳴器端口/*公共變量定義區(qū)*/*接口函數(shù)聲明區(qū)*/extern void w

21、rite_com(uchar com);/液晶寫命令函數(shù)extern void write_data(uchar date);/液晶寫數(shù)據(jù)函數(shù)extern void write_num(uchar com,uint num,uchar dot);/液晶寫數(shù)字函數(shù)extern void lcd1602_init();/液晶初始化函數(shù) 1602extern void i_init(void);/DS1624初始化函數(shù)extern uint jbreadtemperature();/DS1624讀取溫度函數(shù)extern void I2C_SendStr(uchar SlaveAddress,ucha

22、r SubAddress,uchar pSData);/寫24C08函數(shù)extern uchar I2C_RcvStr(uchar SlaveAddress,uchar SubAddress);/讀24C08函數(shù) 1624extern uint sample(uchar chx); /AD轉(zhuǎn)換 AD/*公共函數(shù)聲明區(qū)*/extern void delay1(uint x); /延時(shí)xmsextern void delay10ms(void); /延時(shí)10msextern void delay(void); /延時(shí) system.c#include "system.h" /三

23、個(gè)延時(shí)程序 (公式函數(shù))作用:主要是延時(shí)程序,延時(shí)程序的計(jì)算,方便在主函數(shù)中的調(diào)用。void delay1(uint x) /延時(shí)Xms程序uchar tw;while (x->0) /while循環(huán)for (tw=0;tw<125;tw+); /for 循環(huán)void delay(void) /延時(shí)_nop_();/空字符,作用也是延時(shí)_nop_();/空字符,作用也是延時(shí)_nop_();/空字符,作用也是延時(shí)_nop_();/空字符,作用也是延時(shí)_nop_();/空字符,作用也是延時(shí)_nop_();/空字符,作用也是延時(shí)void delay10ms(void) /延時(shí)10ms程序

24、uint i;for(i=0;i<1000;i+) /for 循環(huán)delay(); /延時(shí)Mainfun.c#include "system.h" / (主函數(shù))作用:對(duì)各個(gè)子程序進(jìn)行調(diào)用,讀取溫度,打開蜂鳴器。uchar code table=" CJLU "/code寫到ROM 定義無符號(hào)字符型數(shù)組uchar code table1="Designed by sjb"/code寫到ROM 定義無符號(hào)字符型數(shù)組uchar code table2=" Temperature: "/code寫到ROM 定義無符

25、號(hào)字符型數(shù)組uchar int1flag=0;/外部中斷0標(biāo)記值uchar int2flag=0;/外部中斷1標(biāo)記值uint Tick_10ms=0; /時(shí)間片計(jì)數(shù)器uchar jbswitch=0;/開關(guān)量輸出狀態(tài)uint monilout4=0;/模擬量輸出值 uint jbsystemp=0;unsigned char idata M32; /變量定義 (溫度采集放入其中,AD數(shù)據(jù)等放入)unsigned short xdata D32;void interrupt_init() /配置寄存器 中斷初始化IT0=1; /下降沿觸發(fā) 外部中斷0EX0=1;IT1=1; /下降沿觸發(fā) 外部中

26、斷1EX1=1;TMOD|= 0x11; /方式寄存器TH0=0xDC; /11.0592M 初始化TL0=0x00;IE = 0x8F; /中斷允許控制寄存器TR0 = 1; /運(yùn)行控制位,由軟件置1或者控制的開關(guān)IP=0X05;EA=1; /CPU中斷打開void mainfun_init() / mainfan函數(shù)初始化uchar i;lcd1602_init();/液晶初始化 i_init();/I2C初始化for(i=0;i<14;i+)/顯示初始化write_data(tablei); /寫入 CJLU delay1(5); /延時(shí)5微秒write_com(0x80+0x40

27、);/換行到第二行第一個(gè)for(i=0;i<16;i+)write_data(table1i);/寫入 Designed by sjbdelay1(5); /延時(shí)5微秒for(i=0;i<30;i+)/延時(shí) (控制顯示時(shí)間)delay10ms();p0=0xfe /打開繼電器通道0interrupt_init();/中斷初始化 write_com(0x01);/清屏 void display()/在LED屏幕上顯示東西uchar i,recbaif=0;switch(int1flag) / 外部中斷0標(biāo)記值 多分支結(jié)構(gòu)的選擇語case 0:/write_com(0x01);/清屏w

28、rite_com(0x80);/顯示屏的第一行第一位for(i=0;i<16;i+)write_data(table2i); /寫入 Temperature: delay1(5); /延時(shí)5微秒write_com(0xC0); /0xc0=0x80+0x40 寫在第二行第一個(gè) 防止亂碼for(i=0;i<4;i+)/顯示4個(gè)空格write_data(' ');/寫空格write_com(0xC0+11);/把光標(biāo)移到temperature后面for(i=0;i<5;i+) /顯示5個(gè)空格write_data(' ');/寫空格write_num

29、(0xc0+4,D12,1); /放板上溫度值write_data(0xdf);write_data('C');/寫入C 攝氏度標(biāo)志break;case 1: /顯示03個(gè)通道for(i=0;i<4;i+)switch(i)case 0: / case是供選擇的3個(gè)屏幕write_com(0x80); /顯示屏的第一行第一位write_data('0'); /寫入0write_data(':'); /寫入:write_num(0xff,Di,2);/寫入溫度break; /跳出case 1:write_com(0x80+8);write_d

30、ata('1');write_data(':');write_num(0xff,Di,2); /寫入溫度break;case 2:write_com(0xc0);write_data('2');write_data(':');write_num(0xff,Di,2); /寫入溫度break;case 3:write_com(0xc0+8);write_data('3');write_data(':');write_num(0xff,Di,2);/寫入溫度break; default:break;wr

31、ite_data(0xdf); /把光標(biāo)移到0xdf位上write_data('C'); /寫入Cbreak;case 2: /顯示47個(gè)通道for(i=4;i<8;i+)switch(i)case 4:write_com(0x80);write_data('4');write_data(':');write_num(0xff,Di,2);/寫入溫度break;case 5:write_com(0x80+8);write_data('5');write_data(':');write_num(0xff,Di,

32、2);/寫入溫度break;case 6:write_com(0xc0);write_data('6');write_data(':');write_num(0xff,Di,2); /寫入溫度break;case 7:write_com(0xc0+8);write_data('7');write_data(':');write_num(0xff,Di,2); /寫入溫度break;default: /switch語句中所有case都不成立時(shí)執(zhí)行最后面的default語句break;write_data(0xdf);write_da

33、ta('C'); /寫入Cbreak;default:break;void main()uchar i; /寄存器,8位float ccc; / 浮點(diǎn)型uint jbzj;mainfun_init();while(1)jbsystemp=jbreadtemperature();/獲取系統(tǒng)板當(dāng)前的溫度jbzj=jbsystemp>>3;/jbsystemp往右移三位ccc=(float)jbzj*0.03125; /計(jì)算出溫度值 分辨率(一位就是0.03125) jbzj=ccc*100; /ccc*100是將有兩位小數(shù)的那個(gè)數(shù)變成正數(shù) D12=jbzj%10000;

34、 /D12放板上溫度 取四位有效數(shù)字for(i=0;i<8;i+)jbzj=sample(i);/獲取AD轉(zhuǎn)換值ccc=1.0*jbzj/10.92; /計(jì)算得到 一個(gè)為10.92,一個(gè)為75ccc-=75; /計(jì)算得到 一個(gè)為10.92,一個(gè)為75jbzj=ccc*10; /把小數(shù)變整數(shù)if(jbzj>3000)jbzj=0;Di=jbzj;if(jbzj>=600)beep=0; /打開蜂鳴器elsebeep=1; /關(guān)閉蜂鳴器if(jbzj>=700) /繼電器的打開switch(i)case 0:p1&=0xfe;break;case 1:p1&

35、=0xfd;break;case 2: p1&=0xfb;break;case 3:p1&=0xf7;break;case 4:p1&=0xef;break;case 5:p0&=0xdf;break;case 6:p1&=0xbf;break;case 7:p1&=0x7f;break;default: break; /終止分支或循環(huán)else /繼電器的關(guān)閉switch(i)case 0:p1|=0x01;break;case 1:p1|=0x02;break;case 2: p1|=0x04;break;case 3:p1|=0x08;bre

36、ak;case 4:p1|=0x10;break;case 5:p1|=0x20;break;case 6:p1|=0x40;break;case 7:p1|=0x80;break;default:break;/* INT0中斷函數(shù) */void counter0(void) interrupt 0 EX0=0; /允許外部中斷0中斷 關(guān)閉外部0中斷write_com(0x01);/清屏int1flag+;if(int1flag=3)int1flag=0;write_com(0x01);/清屏EX0=1; /打開外部0中斷/* INT1中斷函數(shù) */void counter1(void) in

37、terrupt 2 EX1=0;beep=beep; /beep取反EX1=1;/*/* 定時(shí)器0中斷函數(shù) */void T0zd(void) interrupt 1 static xdata uchar num; /static是靜態(tài)變量 變量定義在高256TH0=0xC4; /11.0592M 定時(shí)器初始化TL0=0x00; Tick_10ms+;num+;if(20=num) /隔段時(shí)間讀取1302的數(shù)據(jù)。時(shí)間間隔可以調(diào)整num=0;if(num%5=0) /5個(gè)顯示一次display();/*/xk1602.c#include "system.h" /液晶函數(shù) 液晶

38、顯示和并行接口)作用:液晶顯示程序,主要進(jìn)行液晶初始化,液晶寫指令,液晶寫數(shù)據(jù),液晶寫數(shù)字。對(duì)顯示器和并行接口進(jìn)行處理。void lcd1602_init() /液晶初始化函數(shù)lcden=0; /液晶的始能端置0/*lcdrw=0;*/write_com(0x38); /調(diào)用寫指令函數(shù),寫指令為0x38 write_com(0x0c); write_com(0x06);write_com(0x01);write_com(0x80);/把光標(biāo)移到第一位/液晶寫指令函數(shù)void write_com(uchar com)lcdrs=0; /液晶數(shù)據(jù)-命令選擇端P0=com; delay1(5);/延

39、時(shí)5mslcden=1; /lcden跟lcdrs都是管腳delay1(5);lcden=0;/液晶寫數(shù)據(jù)函數(shù)void write_data(uchar date)lcdrs=1; /液晶數(shù)據(jù)-命令選擇端P0=date;delay1(5); /延時(shí)5mslcden=1;delay1(5);lcden=0;/液晶寫數(shù)字函數(shù)void write_num(uchar com,uint num,uchar dot) /顯示字符位置、數(shù)字、小數(shù)點(diǎn)的位置uchar d4,d3,d2,d1;uint jbnum=0;jbnum=num;jbnum%=10000; d4=num/1000;/千位的數(shù)字輸出d3

40、=num/100%10; /百位的數(shù)字輸出d2=num/10%10; /十位的數(shù)字輸出d1=num%10; /個(gè)位的數(shù)字輸出if(com!=0xff) /小數(shù)點(diǎn)位置的確定 write_com(com);write_data(0x30+d4);write_data(0x30+d3);if(dot=1) /小數(shù)點(diǎn)位置的確定write_data('.');write_data(0x30+d2);if(dot=2)write_data('.');write_data(0x30+d1); ds1624.c#include "system.h" /(液晶

41、顯示和并行接口)作用:液晶顯示程序,主要進(jìn)行液晶初始化,液晶寫指令,液晶寫數(shù)據(jù),液晶寫數(shù)字。對(duì)顯示器和并行接口進(jìn)行處理。uchar adata;void i_start(void);/發(fā)出一個(gè)啟始位 I2C總線啟動(dòng)void i_stop(void); /發(fā)出一個(gè)終值為void i_ack(void); /發(fā)出一個(gè)應(yīng)答位bit i_clock(void);bit i_send(uchar i_data);/發(fā)送字節(jié)uchar i_receive(void); /接收字符bit set_temperature_T(void);bit start_temperature_T(void);bit re

42、ad_temperature_T(uchar *p);void I2C_SendStr(uchar SlaveAddress,uchar SubAddress,uchar pSData);uchar I2C_RcvStr(uchar SlaveAddress,uchar SubAddress);uchar RcvB(void);void i_init(void)SCL=0; /把端口scl賦值成0i_stop(); /I2C停止void i_start(void) /發(fā)出一個(gè)啟始位 I2C總線啟動(dòng) 時(shí)序圖+數(shù)據(jù)手冊(cè)(data set)SCL=1; /把端口scl賦值1delay(); /延時(shí)S

43、DA=0; /把端口sda賦值0delay(); /延時(shí)SCL=0; /端口scl賦值0delay(); /延時(shí)void i_stop(void) /發(fā)出一個(gè)停止位SDA=0; /把端口sda賦值0delay(); /延時(shí)SCL=1; /把端口scl賦值1delay(); /延時(shí)SDA=1; /把端口sda賦值1delay(); /延時(shí)SCL=0; /把端口賦值為delay(); /延時(shí) void i_ack(void) /發(fā)出一個(gè)應(yīng)答位SDA=0; /把端口sda賦值0i_clock();SDA=1; /把端口sda賦值為1bit i_clock(void) /為形成應(yīng)答位的CLOCKbit

44、 sample;SCL=1; /把端口scl賦值為1delay(); /延時(shí)sample=SDA; /sda賦值給sample_nop_(); /空指令 延時(shí)作用_nop_(); /空指令 延時(shí)作用SCL=0; /把端口scl賦值為0delay(); /延時(shí)return(sample); /調(diào)用mcp3208.c中的sample函數(shù)bit i_send(uchar i_data) /發(fā)送一個(gè)字節(jié)uchar i;for(i=0;i<8;i+) /for 循環(huán)SDA=(bit)(i_data & 0x80);i_data=i_data<<1; /i-data向左移一位再賦

45、給i-datai_clock();SDA=1; /把端口sda賦值為1return(i_clock(); /調(diào)用為形成應(yīng)答位的CLOCKuchar i_receive(void) /接收一個(gè)字節(jié)uchar i_data=0;uchar i;for(i=0;i<8;i+) /for 循環(huán)i_data*=2; /i-data賦值為i-data*2if(i_clock() /調(diào)用為形成應(yīng)答位的CLOCKi_data+; /i-data自加return(i_data); /返回i-databit set_temperature_T(void) /設(shè)定溫度轉(zhuǎn)換方式i_start(); /調(diào)用發(fā)出一個(gè)啟始位if(i_send(0x90) /器件手冊(cè)上整理出來的if(i_send(0xac) /器件手冊(cè)上整理出來的if(i_send(0x4a) /器件手冊(cè)上整理出來的i_stop(); /終止為delay(); /延時(shí)return(1); /返回1elsei_stop(); /終止位delay(); /延時(shí)return(0); /返回0else i_stop(); /終止位delay(); /延時(shí)return(0); /返回0else i_stop(); /終止位delay

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論