




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于DSP的數(shù)碼管顯示課程設(shè)計(jì)報(bào)告(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)
基于DSP的數(shù)碼管顯示課程設(shè)計(jì)報(bào)告(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)基于DSP數(shù)碼管顯示課程名稱(chēng)DSP技術(shù)學(xué)院名稱(chēng)電子與信息工程學(xué)院專(zhuān)業(yè)電子信息工程年級(jí)班級(jí)開(kāi)出學(xué)期2013-2014下期學(xué)生學(xué)號(hào)指導(dǎo)教師成績(jī)201*年*月*日一、課程設(shè)計(jì)目的如今DSP已經(jīng)成為運(yùn)用很廣泛的嵌入式芯片,它的功能強(qiáng)大,能完成很多一般芯片不能完成的數(shù)據(jù)處理,大量使用DSP已經(jīng)是全球的潮流。通過(guò)課程設(shè)計(jì),使我們綜合運(yùn)用DSP技術(shù)課程和其他有關(guān)課程的理論和生產(chǎn)實(shí)際知識(shí)去分析和解決具體問(wèn)題的能力得到提高,并使其所學(xué)知識(shí)得到進(jìn)一步鞏固、深化和發(fā)展;初步培養(yǎng)學(xué)生對(duì)工程設(shè)計(jì)的獨(dú)立工作能力,學(xué)習(xí)設(shè)計(jì)的一般方法;以及鍛煉我們查閱資料、方案比較、團(tuán)結(jié)合作的能力。學(xué)會(huì)簡(jiǎn)單電路的實(shí)驗(yàn)調(diào)試和整指標(biāo)測(cè)試方法,增強(qiáng)我們的動(dòng)手能力,為以后學(xué)習(xí)和工作打下基礎(chǔ)。二、課程設(shè)計(jì)內(nèi)容1、設(shè)計(jì)思路用DSP芯片設(shè)計(jì)一個(gè)單個(gè)數(shù)碼管顯示電路,數(shù)碼管由0—9循環(huán)點(diǎn)亮,每1秒鐘亮一個(gè)數(shù)字,每亮一次觸發(fā)蜂鳴器響一下。另外加輸入檢測(cè)電路,當(dāng)一旦按下復(fù)位鍵后數(shù)碼管自動(dòng)清零。設(shè)計(jì)流程圖開(kāi)始開(kāi)始初始化初始化DSP初始化CD4511(數(shù)碼管清零)初始化CD4511(數(shù)碼管清零)循環(huán)顯示循環(huán)顯示0-9讀取讀取IOPB數(shù)據(jù)DSP數(shù)據(jù)處理DSP數(shù)據(jù)處理判斷復(fù)位鍵是否按下判斷復(fù)位鍵是否按下是是否3、設(shè)計(jì)實(shí)現(xiàn)程序主程序#include"math。h”#include"stdio。h”#include"lf2407_c.h”unsignedcharflag=0;//voidDelay(intx)voiddelay_ms()//延時(shí)1ms(CPU頻率10M){unsignedintk;for(k=0;k〈1000;k++);}voiddelay_s()//延時(shí)1s(CPU頻率10M){unsignedintk,j;for(k=0;k〈1000;k++)for(j=0;j〈1000;j++);}voiddelay_us()//延時(shí)100us(CPU頻率10M){unsignedintk;for(k=0;k<10;k++);}voiddelay(void)//任意延時(shí){unsignedinti,j;for(i=1000;i〉0;i--)for(j=200;j〉0;j—-);}voidinit(){asm(”setcSXM");asm(”clrcOVM");asm(”clrcCNF”);asm("setcINTM");SCSR1=0x81FE;WDCR=0x0E8;IMR=0x0000;IFR=0x0FFFF;MCRA=MCRA&0x00FF;//iopb設(shè)為一般I/OPBDATDIR=PBDATDIR|0xFF00;//1234為輸出PBDATDIR=PBDATDIR&0xEFFF;//1234為輸出PADATDIR=PBDATDIR&0xFF00;//初始化顯示0}voidmain(){intm;unsignedintuLED[10]={0xFF00,0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06,0xFF07,0xFF08,0xFF09};init();//初始化for(m=0;m<=10;m++){PBDATDIR=uLED[m];//顯示數(shù)字delay_s();if(PBDATDIR&0x0010==0x0000)//判斷復(fù)位鍵是否按下{PBDATDIR=PBDATDIR|0xFF00;//清零m=0;delay_s();}}}三、硬件電路設(shè)計(jì)1、外圍電路設(shè)計(jì)外圍電路采用一個(gè)CD4511進(jìn)行數(shù)據(jù)譯碼,采用輸入BCD碼輸出段碼的方式進(jìn)行顯示,外接一個(gè)蜂鳴器,一個(gè)復(fù)位按鈕,和一個(gè)數(shù)碼管。電路圖如圖所示2、DSP芯片管腳設(shè)定DSP芯片管腳:IOPB0CD4511芯片A輸入IOPB1CD4511芯片B輸入IOPB2CD4511芯片C輸入IOPB3CD4511芯片D輸入IOPB4復(fù)位鍵信號(hào)檢測(cè)管腳使用元件介紹3。1、TMS320LF2407A芯片基本介紹TMS320C24x系列DSP中,分為5V供電的TMS320F/C24x和3.3V供電低功耗TMS320LF/LC240xA兩類(lèi)。這里以TMS320LF2407A為主進(jìn)行介紹.TMS320LF2407A是TMS320F/C24x的改進(jìn)型,采用低功耗設(shè)計(jì),3.3V供電,最高運(yùn)算速度達(dá)到40MIPS.主要特點(diǎn)如下:⑴片內(nèi)具有2k字節(jié)的單口RAM(SARAM),32K字的Flash程序存儲(chǔ)器,544字節(jié)的雙口RAM(DARAM)。⑵兩個(gè)事件管理器模塊EVA和EVB,每個(gè)包括:兩個(gè)16位通用定時(shí)器,8?jìng)€(gè)PWM通道。⑶高達(dá)40個(gè)可獨(dú)立編程或復(fù)用的通用I/O引腳。⑷片內(nèi)集成:16路10位A/D轉(zhuǎn)換通道;控制局域網(wǎng)絡(luò)(CAN)2。0B模塊;串行通信接口引腳功能各引腳按功能可分為以下8個(gè)部分(表2.1~2.9):⑴事件管理器(EVA和EVB)引腳;⑵ADC模數(shù)轉(zhuǎn)換器引腳;⑶通信模塊(CAN/SPI/SCI)引腳;⑷外部中斷與時(shí)鐘引腳;⑸地址/數(shù)據(jù)及存儲(chǔ)器控制信號(hào)引腳;⑹振蕩器/PLL/FLASH/BOOT引導(dǎo)程序及其他引腳;⑺JTAG仿真測(cè)試引腳;⑻電源引腳。SCI)模塊;串行外設(shè)接口(SPI)模塊;看門(mén)狗定時(shí)器(WDT)模塊。TMS320LF2407A的引腳封裝圖TMS320LF2407A的引腳結(jié)構(gòu)圖3.2、CD4511BCD-7段譯碼驅(qū)動(dòng)器CD4511是常用的七段顯示譯碼驅(qū)動(dòng)器,它的內(nèi)部除了七段譯碼電路外,還這有鎖存電路和輸出驅(qū)動(dòng)器部分,具有輸出電流大,最大可達(dá)25mA,可直接驅(qū)動(dòng)LED數(shù)碼管。CD4511由4個(gè)輸入端A/B/C/D和7個(gè)輸出端a~g,它還具有輸入BCD碼鎖存、燈測(cè)試和熄滅控制功能,它們分別由鎖存端LE、燈測(cè)試LT、熄滅控制端BI來(lái)控制。引腳圖如2所示,真值表如圖3所示四、課程設(shè)計(jì)元件清單名稱(chēng)型號(hào)數(shù)量/個(gè)編號(hào)DSP芯片實(shí)驗(yàn)板TMS320LF2407A1U1CD4511段譯碼器CD45111U2單個(gè)數(shù)碼管5101AR1uLED復(fù)位按鍵1S9蜂鳴器1SP限流電阻1K8R0-R7杜邦線若干排針若干五、課程設(shè)計(jì)實(shí)物程序運(yùn)行結(jié)果圖運(yùn)行顯示數(shù)字5運(yùn)行顯示數(shù)字2按下復(fù)位鍵后數(shù)碼管清零課程設(shè)計(jì)總結(jié)此次的課程設(shè)計(jì)中我對(duì)DSP芯片有了更加充分的了解,以前只是通過(guò)書(shū)籍或其他消息知道DSP芯片的重要性,但是只有真正做了之后才能意識(shí)到DSP芯片的功能強(qiáng)大,它雖然基本原理和使用與單片機(jī)差不多,但是真正使用過(guò)之后才覺(jué)得它運(yùn)行速度更快,能直接做一些信號(hào)處理,內(nèi)部直接帶有很多常用數(shù)學(xué)運(yùn)算的硬件電路,因此在數(shù)字信號(hào)處理方面非常有用,我也是在使用之后才發(fā)現(xiàn)DSP芯片為什么叫做數(shù)字信號(hào)處理芯片的.此次我做的實(shí)驗(yàn)不算難,但仍需細(xì)心調(diào)試程序,對(duì)于頭文件的定義一定要清楚。此次實(shí)驗(yàn)不僅增強(qiáng)了我的實(shí)際動(dòng)手能力,而且還讓我對(duì)于DSP有了更大的興趣,以后定將花更多的時(shí)間對(duì)其進(jìn)行更深入的學(xué)習(xí)。單片機(jī)課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)課題:基于51單片機(jī)的交通燈設(shè)計(jì)專(zhuān)業(yè):?機(jī)械設(shè)計(jì)制造及其自動(dòng)化學(xué)號(hào):?指導(dǎo)教師:??邵添設(shè)計(jì)日期: ? 2017/12/18成績(jī):重慶大學(xué)城市科技學(xué)院電氣學(xué)院基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告一、設(shè)計(jì)目的作用本設(shè)計(jì)是一款簡(jiǎn)單實(shí)用的小型數(shù)字溫度計(jì),所采用的主要元件有傳感器DS18B20,單片機(jī)AT89C52,,四位共陰極數(shù)碼管一個(gè),電容電阻若干。DS18B20支持“一線總線”接口,測(cè)量溫度范圍—55°C~+125°C。在—10~+85°C范圍內(nèi),精度為±0。5°C。18B20的精度較差,為±本次數(shù)字溫度計(jì)的設(shè)計(jì)共分為五部分,主控制器,LED顯示部分,傳感器部分,復(fù)位部分,按鍵設(shè)置部分,時(shí)鐘電路.主控制器即單片機(jī)部分,用于存儲(chǔ)程序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來(lái)顯示溫度;傳感器部分,即溫度傳感器,用來(lái)采集溫度,進(jìn)行溫度轉(zhuǎn)換;復(fù)位部分,即復(fù)位電路,按鍵部分用來(lái)設(shè)置上下限報(bào)警溫度。測(cè)量的總過(guò)程是,傳感器采集到外部環(huán)境的溫度,并進(jìn)行轉(zhuǎn)換后傳到單片機(jī),經(jīng)過(guò)單片機(jī)處理判斷后將溫度傳遞到數(shù)碼管顯示。二、設(shè)計(jì)要求(1).利用DS18B20傳感器實(shí)時(shí)檢測(cè)溫度并顯示。(2).利用數(shù)碼管實(shí)時(shí)顯示溫度.(3)。當(dāng)溫度超過(guò)或者低于設(shè)定值時(shí)蜂鳴器報(bào)警,LED閃爍指示。(4).能夠手動(dòng)設(shè)置上限和下限報(bào)警溫度。三、設(shè)計(jì)的具體實(shí)現(xiàn)1、系統(tǒng)概述方案一:由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類(lèi)的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。方案設(shè)計(jì)框圖如下:數(shù)碼管顯示電路熱敏電阻組成的感溫電路數(shù)碼管顯示電路熱敏電阻組成的感溫電路AD轉(zhuǎn)換方案二:考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿(mǎn)足設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。2、
單元電路設(shè)計(jì)與分析1、硬件設(shè)計(jì)按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由3個(gè)模塊組成:主控制器、測(cè)溫電路和顯示電路。數(shù)字溫度計(jì)總體電路結(jié)構(gòu)框圖所示:蜂鳴器報(bào)警模塊AT89C51單片機(jī)DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報(bào)警模塊蜂鳴器報(bào)警模塊AT89C51單片機(jī)DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報(bào)警模塊單片機(jī)的選擇單片機(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿(mǎn)足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。由于器件問(wèn)題,我們使用了通用的手機(jī)5V充電器接口。復(fù)位電路模塊單片機(jī)系統(tǒng)的復(fù)位電路在這里使用的是上電+按鈕的復(fù)位電路模式,其中電阻R采用的是10KΩ的阻值,電容采用電容值為10uF的電解電容,電路圖如下:溫度顯示模塊四位共陰極數(shù)碼管,能夠顯示小數(shù)。列掃描用P2.4~P2。7口來(lái)實(shí)現(xiàn),列驅(qū)動(dòng)直接51接單片機(jī)驅(qū)動(dòng).電路圖如下: ??? ? ?? ? ??? 溫度傳感器模塊DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。電路圖如下:? ?? ? ? ?? ??? ? ?按鍵模塊按鍵是用來(lái)設(shè)置報(bào)警的上下限溫.K1是用來(lái)進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除按鍵音,再按一下啟動(dòng)按鍵音.在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,K1是實(shí)現(xiàn)減1功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。? 2、軟件設(shè)計(jì)主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和現(xiàn)實(shí)數(shù)據(jù)刷新子程序等。主程序主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量溫度值。溫度測(cè)量每1S進(jìn)行一次.主流程圖如下:讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時(shí)須進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫(xiě)。流程圖如下:溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令.當(dāng)采用12位分辨率時(shí),轉(zhuǎn)換時(shí)間約為750ms.在本程序設(shè)計(jì)中,采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。流程圖如下:顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高數(shù)據(jù)顯示位為0時(shí),將符號(hào)顯示位移入下一位.系統(tǒng)的調(diào)試及性能分析:硬件調(diào)試,首先檢查電感的焊接是否正確,然后可用萬(wàn)用表測(cè)試或通電檢測(cè)。軟件調(diào)試可以先編寫(xiě)顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和現(xiàn)實(shí)數(shù)據(jù)刷新子程序等的編程及調(diào)試由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對(duì)DS18B20進(jìn)行讀/寫(xiě)編程時(shí)必須嚴(yán)格地保證讀/寫(xiě)時(shí)序;否則將無(wú)法讀取測(cè)量結(jié)果。本程序采用單片機(jī)匯編或C語(yǔ)言編寫(xiě)用KeilC51編譯器編程調(diào)試。軟件調(diào)試到能顯示溫度值,并且在有溫度變化時(shí)顯示溫度能改變,就基本完成.性能測(cè)試可用制作的溫度計(jì)和已有的成品溫度計(jì)同時(shí)進(jìn)行測(cè)量比較。由于DS18B20的精度很高,所以誤差指標(biāo)可以限制在0.5℃以?xún)?nèi)。另外,—55~+125 ? ? ?? ??? 四、總結(jié)本次的課程設(shè)計(jì)使我們進(jìn)一步鞏固了書(shū)本上的知識(shí),做到了學(xué)以致用.這是我們第二次自己動(dòng)手設(shè)計(jì)的電路,通過(guò)系統(tǒng)仿真軟件Proteus和編譯軟件Keil,使我們進(jìn)一步了解了單片機(jī)的設(shè)計(jì)制作過(guò)程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過(guò)自己的修改,但還是有很多功能不能實(shí)現(xiàn),如溫度上下限設(shè)置。由于Proteus并不是很熟練,在使用的過(guò)程中有很多原件的名稱(chēng)不知道,從而花費(fèi)了大量的時(shí)間在網(wǎng)上查找,今后應(yīng)該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩。總結(jié)經(jīng)驗(yàn)的時(shí)候我們得出這樣的結(jié)論,學(xué)習(xí)應(yīng)該學(xué)以致用,有目的的去學(xué)習(xí),如果學(xué)了不用等于沒(méi)學(xué)。其次,要學(xué)以致用,理論聯(lián)系實(shí)際,這樣才會(huì)取得事半功倍的效果.五、附錄附錄一:元件清單元件名稱(chēng)數(shù)量AT89C51單片機(jī)112MHZ晶振133pF電容222uF電解電容1按鍵開(kāi)關(guān)5IC插座40Pin1DS18B20溫度傳感器1蜂鳴器1LED?5紅1四位一體共陰數(shù)碼管1470,1K,4.7K電阻8,2,1三極管85501導(dǎo)線若干排針若干附錄二:完整電路原理圖附錄三:焊接實(shí)物圖附錄四:源程序/*********************************************************************程序名;基于51單片機(jī)的溫度計(jì)*功能:實(shí)時(shí)測(cè)量溫度,超過(guò)上下限報(bào)警,報(bào)警溫度可手動(dòng)調(diào)整.K1是用來(lái)*進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限*調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)*退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除*按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,*K1是實(shí)現(xiàn)減1功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。*編程者:彭明闖*編程時(shí)間:2014/05/30 *********************************************************************/#include〈reg52。h>?? #include<intrins.h〉?? ?//將intrins。h頭文件包含到主程序(調(diào)用其中的_nop_()空操作函數(shù)延時(shí))#defineuintunsignedint? #defineucharunsignedchar ucharmax=0x00,min=0x00; ?//max是上限報(bào)警溫度,min是下限報(bào)警溫度bits=0;? ???? ? //s是調(diào)整上下限溫度時(shí)溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右bits1=0;? ???????//s1標(biāo)志位用于上下限查看時(shí)的顯示voiddisplay1(uintz);? ?//聲明display1()函數(shù)(display。h頭文件中的函數(shù),ds18b20。h要用應(yīng)先聲明)#include"ds18b20。h" ? ??#include"keyscan.h" #include"display.h” ?? /******************************************************//*??? 主函數(shù) ??? ? ???//*****************************************************/voidmain(){ beer=1;??? ?//關(guān)閉蜂鳴器 led=1; ? ?? //關(guān)閉LED燈?timer1_init(0); ??//初始化定時(shí)器1(未啟動(dòng)定時(shí)器1) get_temperature(1);??//首次啟動(dòng)DS18B20獲取溫度(DS18B20上電后自動(dòng)將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器) while(1)? ?? ?{ ??keyscan();? ?? get_temperature(0);???display(temp,temp_d*0.625);??alarm();? ????}}/*********************************************************************程序名;DS18B20頭文件*編程者:彭明闖*編程時(shí)間:2014/5/30*說(shuō)明:用到的全局變量是:無(wú)符號(hào)字符型變量temp(測(cè)得的溫度整數(shù)部分),temp_d*(測(cè)得的溫度小數(shù)部分),標(biāo)志位f(測(cè)量溫度的標(biāo)志位‘0’表示“正溫度"‘1’表*示“負(fù)溫度”),標(biāo)志位f_max(上限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表*示“負(fù)溫度”),標(biāo)志位f_min(下限溫度的標(biāo)志位‘0’表示“正溫度"、‘1'表*示“負(fù)溫度"),標(biāo)志位w(報(bào)警標(biāo)志位‘1’啟動(dòng)報(bào)警‘0’關(guān)閉報(bào)警).??*********************************************************************/#ifndef__ds18b20_h(yuǎn)__(dá) ? ?//定義頭文件#define__(dá)ds18b20_h(yuǎn)__#defineuintunsignedint?? #defineucharunsignedchar???sbitDQ=P2^3;?? ? ?//DS18B20接口sbitbeer=P1^0;?? ?//用beer表示P1。0sbitled=P1^1; ? ?//用led表示P1.1uchartemp=0;? ?//測(cè)量溫度的整數(shù)部分uchartemp_d=0; //測(cè)量溫度的小數(shù)部分bitf=0; ? ?//測(cè)量溫度的標(biāo)志位,0’表示“正溫度”‘1’表示“負(fù)溫度”)bitf_max=0;? ? //上限溫度的標(biāo)志位‘0’表示“正溫度"‘1'表示“負(fù)溫度")bitf_min=0; ? //下限溫度的標(biāo)志位‘0’表示“正溫度”、‘1'表示“負(fù)溫度”)bitw=0; ? ?? //報(bào)警標(biāo)志位‘1’啟動(dòng)報(bào)警‘0’關(guān)閉報(bào)警/******************************************************//* ??? ?? 延時(shí)子函數(shù)?? ? ?? ? ?//*****************************************************/voidds18b20_delayus(uintt)//延時(shí)幾μs{while(t——);}voidds18b20_delayms(uintt)? //延時(shí)1ms左右{ uinti,j; for(i=t;i〉0;i-—)?for(j=120;j>0;j--);}/******************************************************//*? ? ??DS18B20初始化函數(shù)? ? ????//*****************************************************/voidds18b20_init()?? ??{ ucharc=0; DQ=1; DQ=0;? ??? ?//控制器向DS18B20發(fā)低電平脈沖?ds18b20_delayus(80); ?//延時(shí)15-80μs?DQ=1;?? ?? ? ? //控制器拉高總線,?while(DQ);? ?? //等待DS18B20拉低總線,在60—240μs之間?ds18b20_delayus(150); ?//延時(shí),等待上拉電阻拉高總線 DQ=1; ? ?? ?? //拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;}/******************************************************//* ?? ?DS18B20字節(jié)讀函數(shù) ? ??? ?//*****************************************************/uchards18b20_read() ? ?{ uchari;?uchard=0;?DQ=1; ??? ?//準(zhǔn)備讀; for(i=8;i>0;i—-)?{ ?d>>=1;???//低位先發(fā); ?DQ=0; ?? ?? ? _nop_(); _nop_(); ? ?? DQ=1; ? ???//必須寫(xiě)1,否則讀出來(lái)的將是不預(yù)期的數(shù)據(jù); ?if(DQ) ? ??//在12us處讀取數(shù)據(jù);? d|=0x80; ds18b20_delayus(10); ? ?}?returnd;? ?? ?//返回讀取的值}/******************************************************//* ? ? ?DS18B20字節(jié)寫(xiě)函數(shù) ????//*****************************************************/voidds18b20_write(uchard) ?{uchari;for(i=8;i>0;i-—){ DQ=0;??DQ=d&0x01;? ds18b20_delayus(5);? DQ=1; ?d>>=1;}}/******************************************************//*?? ?????獲取溫度函數(shù)? ???? ??//*****************************************************/voidget_temperat(yī)ure(bitflag) { uchara=0,b=0,c=0,d=0;uinti; ds18b20_init(); ?ds18b20_write(0xcc);? //向DS18B20發(fā)跳過(guò)讀ROM命令?ds18b20_write(0x44); ??//寫(xiě)啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAM if(flag==1)?{ ??? ??? ?//首次啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換需要500ms,若轉(zhuǎn)換時(shí)間不夠就出錯(cuò),讀出的是85度的錯(cuò)誤值。 display1(1);? //用開(kāi)機(jī)動(dòng)畫(huà)耗時(shí) }?else ds18b20_delayms(1); ???ds18b20_init(); ? ?ds18b20_write(0xcc); ? ds18b20_write(0xbe);??? a=ds18b20_read(); ??? //讀內(nèi)部RAM(LSB) b=ds18b20_read();???? //讀內(nèi)部RAM(MSB)?if(flag==1)? ??? //局部位變量f=1時(shí)讀上下線報(bào)警溫度?{ max=ds18b20_read(); //讀內(nèi)部RAM(TH)?min=ds18b20_read(); //讀內(nèi)部RAM(Tl)? ?}?if((max&0x80)==0x80)? //若讀取的上限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度?{f_max=1;max=(max—0x80);}//將上限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將上限溫度裝換成無(wú)符號(hào)數(shù)。 if((min&0x80)==0x80)? //若讀取的下限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度 {f_min=1;min=(min—0x80);}//將下限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將下限溫度裝換成無(wú)符號(hào)數(shù)。?? i=b;?i>>=4;?if(i==0)??{f=0; ? ?//i為0,正溫度,設(shè)立正溫度標(biāo)記temp=((a〉>4)|(b<<4)); ?//整數(shù)部分?a=(a&0x0f); temp_d=a;? ?//小數(shù)部分? }?else? {?f=1; ?? //i為1,負(fù)溫度,設(shè)立負(fù)溫度標(biāo)記 a=~a+1; b=~b; temp=((a>〉4)|(b〈<4)); ? ??//整數(shù)部分 a=(a&0x0f); ???//小數(shù)部分?temp_d=a; }}/******************************************************//* ???? ???存儲(chǔ)極限溫度函數(shù)? ? ?//*****************************************************/voidstore_t(){ if(f_max==1)??? ?//若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)(最高位為1是負(fù),為0是正)?max=max+0x80;?if(f_min==1) ??//若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù) min=min+0x80; ds18b20_init();??? ds18b20_write(0xcc);????ds18b20_write(0x4e); //向DS18B20發(fā)寫(xiě)字節(jié)至?xí)捍嫫鳎埠停?TH和TL)命令 ds18b20_write(max);???//向暫存器TH(上限溫度暫存器)寫(xiě)溫度 ds18b20_write(min); ? //向暫存器TL(下限溫度暫存器)寫(xiě)溫度 ds18b20_write(0xff);?? //向配置寄存器寫(xiě)命令,進(jìn)行溫度值分辨率設(shè)置 ds18b20_init(); ?? ds18b20_write(0xcc);? ??ds18b20_write(0x48); //向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)容寫(xiě)入EEPROM}? ??? ??? ? //DS18B20上電后會(huì)自動(dòng)將EEPROM中的上下限溫度拷貝到TH、TL暫存器/******************************************************//*?????? ?溫度超限報(bào)警函數(shù) ? ???//*****************************************************/voidalarm(){ ?? ? ? //若上限值是正值 if(f_max==0)?{ if(f_min==0) ? //若下限值是正值? {?? if(f==0)? ?//若測(cè)量值是正值 ?{? ?if(temp<=min||temp〉=max) ???{w=1;TR1=1;}? //當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 ???if((temp<max)&&(temp>min))? {w=0;}? ?//當(dāng)測(cè)量值大于最小值且小于最大值時(shí)不報(bào)警???}? ?if(f==1){w=1;TR1=1;} //若測(cè)量值是負(fù)值時(shí)報(bào)警 ?}?if(f_min==1) ?? //若下限值是負(fù)值 { ? if(f==0) ?? //若測(cè)量值是正值 ?{ ??if(temp〉=max)//當(dāng)測(cè)量值大于最大值時(shí)報(bào)警 ? {w=1;TR1=1;} ? if(temp<max)//當(dāng)測(cè)量值小于最大值時(shí)不報(bào)警 ?? {w=0;}? }???if(f==1)??? //若測(cè)量值是負(fù)值 ?{? ??if(temp>=min)//當(dāng)測(cè)量值大于最小值時(shí)報(bào)警 {w=1;TR1=1;}? ? if(temp〈min)//當(dāng)測(cè)量值小于最小值時(shí)不報(bào)警?? {w=0;} } } }?if(f_max==1) ?? //若下限值是負(fù)值 {?if(f_min==1)? ?//若下限值是負(fù)值??{ ?if(f==1) ?? //若測(cè)量值是負(fù)值???{ ?if((temp<=max)||(temp〉=min)) ??{w=1;TR1=1;}??//當(dāng)測(cè)量值小于最大值或大于最小值時(shí)報(bào)警?? ?if((temp〈min)&&(temp>max))??? {w=0;} ?? //當(dāng)測(cè)量值小于最小值且大于最大值時(shí)不報(bào)警? }? ?if(f==0){w=1;TR1=1;} //若測(cè)量值是正值時(shí)報(bào)警??}?}?}#endif/***********************************************************************程序名;ds18b20keyscan函數(shù)*功能:通過(guò)鍵盤(pán)設(shè)定設(shè)定上下限報(bào)警溫度*編程者:彭明闖*編程時(shí)間:2014/5/30**********************************************************************/#ifndef__(dá)keyscan_H__ ??//定義頭文件#define__keyscan_H__??sbitkey1=P2^2;???? sbitkey2=P2^1;?? sbitkey3=P2^0;? sbitkey4=P3^3;? ? ?uchari=0;? ? ? //定義全局變量i用于不同功能模式的選擇,‘0’正常模式,‘1’上限調(diào)節(jié)模式,‘2’下限調(diào)節(jié)模式uchara=0;? ??? //定義全局變量a用于不同模式下數(shù)碼管顯示的選擇bit?k4=0;? ? ? //K4按鍵雙功能選擇位,k4=0時(shí)K4按鍵選擇消按鍵音的功能,k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能bitv=0; ? ? ??//K2、K3按鍵雙功能選擇位,v=0時(shí)選擇上下限查看功能,v=1時(shí)選擇上下限溫度加減功能bitv1=0; ?? ??//v1=1時(shí)定時(shí)1250ms時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能bitv2=0; ? //消按鍵音功能調(diào)整位,為‘0’時(shí)開(kāi)按鍵音,為‘1'時(shí)關(guān)按鍵音/******************************************************//*? ?? ? ?讀鍵盤(pán)延時(shí)子函數(shù) ? ?? ?//*****************************************************/voidkeyscan_delay(uintz)?? //延時(shí)1ms左右{uinti,j;for(i=z;i>0;i--)?for(j=120;j>0;j——);}/******************************************************//*???? ? ?? 溫度調(diào)節(jié)函數(shù)?? ??? //*****************************************************/inttemp_change(intcount,bitf)?//上下限溫度調(diào)整{if(key2==0) ??? ?//判斷K2是否按下?{ ? if(v2==0)bee(cuò)r=0;? ?//v2=0開(kāi)按鍵音,否則消按鍵音??keyscan_delay(10); ??//延時(shí)10ms ?if(key2==0) ? ?//再次判斷K2是否按下(實(shí)現(xiàn)按按鍵時(shí)消抖)??{ ? beer=1;? ? ?//K2按下關(guān)按鍵音? if(f==0) ?//若溫度為正 { ?count++; ?//每按一下K2溫度上調(diào)1? if(a==1){if(count〉125)count=125;}//當(dāng)溫度值大于125時(shí)不上調(diào) ? if(a==2){if(count>125)count=125;}??}??if(f?。?) ?? ?//若溫度為負(fù)??{? ?? count++;?? ?//每按一下K2溫度下調(diào)1 ?if(a==1){if(count>55)count=55;}//當(dāng)溫度值小于-55時(shí)不再下調(diào) ??if(a==2){if(count〉55)count=55;} ?} } while(key2==0);? ? //K2松開(kāi)按鍵時(shí)消抖 ?keyscan_delay(10); }?if(key3==0) {?if(v2==0)beer=0;? keyscan_delay(10);??if(key3==0) ? ?//K3按按鍵時(shí)消抖 { ?bee(cuò)r=1; count——;? ??//每按一下K3溫度為正時(shí)下調(diào)1,為負(fù)時(shí)上調(diào)1? if(a==1){if(count〈0)count=0;}//當(dāng)溫度值達(dá)到0時(shí)不再調(diào) ??if(a==2){if(count〈0)count=0;} ?} ?while(key3==0); keyscan_delay(10); ??//K3松開(kāi)按鍵時(shí)消抖 ?} returncount;}/******************************************************//*?? ? ? 讀鍵盤(pán)函數(shù) ? ?? ?//*****************************************************/voidkeyscan(){ ?if(key1==0)?{?if(v2==0)bee(cuò)r=0; ?keyscan_delay(10); ?if(key1==0)? ???//K1按按鍵時(shí)消抖 {??beer=1;??TR1=1; ??//開(kāi)定時(shí)器1,通過(guò)s標(biāo)志位的變化,實(shí)現(xiàn)在上下限溫度調(diào)整時(shí)溫度顯示時(shí)閃爍的功能 ?? k4=1; ?? //在上下溫度調(diào)節(jié)功能模式下選擇K4的調(diào)整上下限溫度正負(fù)的功能??v=1;? ? //在上下溫度調(diào)節(jié)功能模式下選擇K2、K3的溫度加減功能 i++; ?? ??//K1按一下i加1,i=‘0'進(jìn)入正常模式,i=‘1’進(jìn)入調(diào)上限模式,i=‘2’進(jìn)入調(diào)下限模式? if(i>2)? ?? //K1按下三次后退出調(diào)節(jié)模式 ?{??i=0;? ???//進(jìn)入正常模式 ??TR1=0; ?? //關(guān)定時(shí)器1???k4=0;? ? //在正常模式下選擇K4的消按鍵音功能???v=0;?? ??//在正常模式下選擇K2、K3的查看上下限報(bào)警溫度功能 ?store_t();? ?//存儲(chǔ)調(diào)整后的上下限報(bào)警溫度??}? switch(i)?? ?//顯示選擇 ?{ ?case0:a=0;break; //a=0選擇顯示測(cè)得的溫度 ?case1:a=1;break;//a=1選擇顯示上限溫度? case2:a=2;break;//a=2選擇顯示下限溫度 ???? default:break; ?}?? }? while(key1==0);? ?//K1松按鍵時(shí)消抖? keyscan_delay(10); ?} if(a==1&&v==1) ??? //a=1選擇顯示上限溫度且v=1時(shí)選擇上下限溫度加功能?{led=0;max=temp_change(max,f_max);}//顯示上限溫度 elseif(a==2&&v==1)?? //a=2選擇顯示下限溫度且v=1時(shí)選擇上下限溫度減功能?{led=1;min=temp_change(min,f_min);} else;?if(k4==1)?? ? ?//k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能 { if(key4==0)??{??if(v2==0)beer=0;? keyscan_delay(5); ??if(key4==0)? ?{? ?beer=1; if(a==1)?? {if(max>55)f_max=0;elsef_max=~f_max;}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度? ?if(a==2)?? {if(min〉55)f_max=0;elsef_min=~f_min;}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 ?? ?}? ?while(key4==0); keyscan_delay(10);??} } if(v==0)?? ???//v=0時(shí)選擇上下限查看功能 {??if(key2==0) {??if(v2==0)beer=0;? keyscan_delay(10); ? if(key2==0)? { ??bee(cuò)r=1; ? a=1;? ???//選擇上限顯示 ??TR1=1; ? //開(kāi)定時(shí)器1開(kāi)始定時(shí)一分鐘左右? s1=1;? ? //上限顯示不閃爍,顯示一分鐘左右自動(dòng)退出 ?} ? while(key2==0); ?keyscan_delay(10); ??? }? if(key3==0) {??if(v2==0)beer=0;? ?keyscan_delay(10); ? if(key3==0) ?{ ??beer=1;???a=2; ??//選擇下限顯示?? TR1=1; ?? //開(kāi)定時(shí)器1開(kāi)始定時(shí)1s?? s1=1;??? //下限顯示不閃爍,顯示1s自動(dòng)退出? ? ? }?? while(key3==0);? keyscan_delay(10); ? ?} ?if(v1==1) ? ?//v1=1時(shí)定時(shí)1s時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能??{a=0;v1=0;TR1=0;}??//a=0顯示實(shí)測(cè)溫度,v1清零,關(guān)定時(shí)器1??if(k4==0) ? //k4=0時(shí)K4按鍵選擇消按鍵音的功能? { ? ? if(key4==0) ??{ if(v2==0)beer=0; ???keyscan_delay(10);? ??if(key4==0) ? ?{??? bee(cuò)r=1; ? ?v2=~v2;? //為‘0’時(shí)開(kāi)按鍵音,為‘1'時(shí)關(guān)按鍵音? ? ? }? ? while(key4==0);??? keyscan_delay(10);? } ? ?}?}}#endif/***********************************************************************程序名;ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件*功能:通過(guò)定時(shí)器0延時(shí)是數(shù)碼管動(dòng)態(tài)顯示*編程者:彭明闖*編程時(shí)間:2014/5/30**********************************************************************/#ifndef__ds18b20_display_H__ #define__ds18b20_display_H__#defineuintunsignedint ?//變量類(lèi)型宏定義,用uint表示無(wú)符號(hào)整形(16位)#defineucharunsignedchar ? //變量類(lèi)型宏定義,用uchar表示無(wú)符號(hào)字符型(8位)sbitwei1=P2^4;?? ? //可位尋址變量定義,用wei1表示P2。4口sbitwei2=P2^5; ????//用wei2表示P2.5口sbitwei3=P2^6;?? ? ?//用wei3表示P2。6口sbitwei4=P2^7;?? ? ?//用wei4表示P2.7口ucharnum=0; ??? //定義num為全局無(wú)符號(hào)字符型變量,賦初值為‘0’ucharcodetemperat(yī)ure1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定義顯示碼表0~9ucharcodetemperature2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //帶小數(shù)點(diǎn)的0~9.ucharcodetemperature3[]={0x00,0x80,0x40,0x76,0x38}; //依次是‘不顯示’‘.'‘—’‘H’‘L’/******************************************************//*??? ? ? 延時(shí)子函數(shù)?? ? ?? //*****************************************************/voiddisplay_delay(uintt) //延時(shí)1ms左右{?uinti,j; for(i=t;i>0;i--)?for(j=120;j>0;j-—);}/******************************************************//* ? ? 定時(shí)器1初始化函數(shù) ? ? //*****************************************************/voidtimer1_init(bitt){TMOD=0x10;??????TH0=0x3c; ?????TL0=0xb0; ??? EA=1; ?? ?ET1=1; ??? ? TR1=t;?? ?? //局部變量t為1啟動(dòng)定時(shí)器1,為0關(guān)閉定時(shí)器1}/******************************************************//*? ? ? ??? 定時(shí)器1中斷函數(shù) ? ? ?//*****************************************************/voidtimer1()interrupt3{TH0=0x3c; ?? ?//重新賦初值,定時(shí)50msTL0=0xb0; num++;? ?? ?//每進(jìn)入一次定時(shí)器中斷num加1(每50ms加1一次)if(num<5)?{s=1;if(w==1){beer=1;led=1;}else{beer=1;led=1;}}? ????? else ?//進(jìn)入4次中斷,定時(shí)200ms時(shí)若報(bào)警標(biāo)志位w為‘1’則啟動(dòng)報(bào)警,不為‘1’不啟動(dòng)??? ?? ??? ?//實(shí)現(xiàn)間歇性報(bào)警功能?{s=0;if(w==1){beer=0;led=0;}else{beer=1;led=1;}} if(num>20)? ? ?//進(jìn)入20次中斷,定時(shí)1s{ num=0;???? //num歸0,重新定開(kāi)始定時(shí)1s s1=0; ? ???//定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限顯示功能?v1=1;??? ?//定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限查看功能}?}/******************************************************//* ? ? ? ?? 調(diào)整報(bào)警上下限選擇函數(shù)? ???//*****************************************************/voidselsct_1(ucharf,uchark)?//消除百位的0顯示,及正負(fù)溫度的顯示選擇{if(f==0) ?? ??? ?//若為正溫度,百位為0則不顯示百位,不為0則顯示?{ ?if(k/100==0)P0=temperature3[0]; ?elseP0=temperat(yī)ure1[k/100]; } if(f==1) ???? ? //若為負(fù)溫度,若十位為0,百位不顯示,否則百位顯示‘—’?{?if(k%100/10==0)P0=temperature3[0]; elseP0=temperature3[2]; }}voidselsct_2(bitf,uchark) ? //消除十位的0顯示,及正負(fù)溫度的顯示選擇{if(f==0)??? ?? //若為正溫度,百位十位均為0則不顯示十位,否則顯示十位?{ if((k/100==0)&&(k%100/10==0))??P0=temperature3[0];??elseP0=temperature1[k%100/10]; }?if(f==1)? ?? ? //若為負(fù)溫度,若十位為0,十位不顯示,否則十位顯示‘-’ { if(k%100/10==0)P0=temperature3[2]; ?elseP0=temperature1[k%100/10];?} ?}/******************************************************//*?? ?????? 主函數(shù)顯示 ?? ?? //*****************************************************/voiddisplay(uchart,uchart_d)?//用于實(shí)測(cè)溫度、上限溫度的顯示{uchari;for(i=0;i<4;i++)???//依次從左至右選通數(shù)碼管顯示,實(shí)現(xiàn)動(dòng)態(tài)顯示{? switch(i) {?case0: ?? //選通第一個(gè)數(shù)碼管 ?wei2=1;? //關(guān)第二個(gè)數(shù)碼管 wei3=1;?? //關(guān)第三個(gè)數(shù)碼管??wei4=1; ? //關(guān)第四個(gè)數(shù)碼管?wei1=0;??? //開(kāi)第一個(gè)數(shù)碼管?? if(a==0){selsct_1(f,t);}//若a=0則在第一個(gè)數(shù)碼管上顯示測(cè)量溫度的百位或‘-’ if(a==1)? { P0=temperature3[3];//若a=1則在第一個(gè)數(shù)碼管上顯示‘H’?? ?}? if(a==2) {????P0=temperat(yī)ure3[4];//若a=2則在第一個(gè)數(shù)碼管上顯示‘L’? } ?? break;?case1: ?? ?? //選通第二個(gè)數(shù)碼管 ?wei1=1; wei3=1;??wei4=1;? wei2=0; ?if(a==0){selsct_2(f,t);}//若a=0則在第二個(gè)數(shù)碼管上顯示測(cè)量溫度的十位或‘—’? if(a==1) ? ?//若a=1則在第二個(gè)數(shù)碼管上顯示上限報(bào)警溫度的百位或‘—’? { ?if(s==0)selsct_1(f_max,max);//若s=0則顯示第二個(gè)數(shù)碼管,否則不顯示 ?elseP0=temperature3[0];??//通過(guò)s標(biāo)志位的變化實(shí)現(xiàn)調(diào)節(jié)上下限報(bào)警溫度時(shí)數(shù)碼管的閃爍 ?if(s1==1)selsct_1(f_max,max);//若s1=1則顯示第二個(gè)數(shù)碼管(s1標(biāo)志位用于上下限查看時(shí)的顯示)??} ?if(a==2) ????????//若a=2則在第二個(gè)數(shù)碼管上顯示下限報(bào)警溫度的百位或‘—’? {? if(s==0)selsct_1(f_min,min); elseP0=temperature3[0];??if(s1==1)selsct_1(f_min,min); }?? ????? break;?case2: ??? //選通第三個(gè)數(shù)碼管 wei1=1;? wei2=1; ? ?wei4=1; ? wei3=0; ? if(a==0){P0=temperature2[t%10];}//若a=0則在第三個(gè)數(shù)碼管上顯示測(cè)量溫度的個(gè)位 ?if(a==1) ?? ? ? ? //若a=1則在第三個(gè)數(shù)碼管上顯示上限報(bào)警溫度的十位或‘—’ ?{ ?if(s==0)selsct_2(f_max,max);//若s=0則顯示第三個(gè)數(shù)碼管,否則不顯示 ??elseP0=temperature3[0]; if(s1==1)selsct_2(f_max,max);//若s1=1則顯示第三個(gè)數(shù)碼管? } if(a==2) ? ??//若a=2則在第三個(gè)數(shù)碼管上顯示下限報(bào)警溫度的十位或‘-' ?{? if(s==0)selsct_2(f_min,min); elseP0=temperature3[0];? if(s1==1)selsct_2(f_min,min); }? ?? ????? ?break;?case3: ? //選通第四個(gè)數(shù)碼管 ?wei1=1;?? ?wei2=1; ?? wei3=1;??wei4=0; ???if(a==0){P0=temperat(yī)ure1[t_d];}//若a=0則在第四個(gè)數(shù)碼管上顯示測(cè)量溫度的小數(shù)位??if(a==1)? ? ? //若a=1則在第四個(gè)數(shù)碼管上顯示上限報(bào)警溫度的個(gè)位 ?{? if(s==0)P0=temperature1[max%10];//若s=0則顯示第四個(gè)數(shù)碼管,否則不顯示 ??elseP0=temperat(yī)ure3[0];? if(s1==1)P0=temperature1[max%10];//若s1=1則顯示第四個(gè)數(shù)碼管 }? if(a==2)?? ? ? ?? ?//若a=2則在第四個(gè)數(shù)碼管上顯示下限報(bào)警溫度的個(gè)位? { ?if(s==0)P0=temperature1[min%10]; ? elseP0=temperature3[0]; ? if(s1==1)P0=temperat(yī)ure1[min%10];??}?? ? ??? ? ? ? break; ??} display_delay(10);???//每個(gè)數(shù)碼管顯示3ms左右 } }/******************************************************//*? ? ?? 開(kāi)機(jī)顯示函數(shù)? ? ??? //*****************************************************/voiddisplay1(uintz) ?//用于開(kāi)機(jī)動(dòng)畫(huà)的顯示{uchari,j;bitf=0;for(i=0;i〈z;i++) ? //‘z’是顯示遍數(shù)的設(shè)定{ for(j=0;j<4;j++) //依次從左至右顯示‘—' { switch(j)??{?? case0: ??wei2=1; ?wei3=1; ? wei4=1;? ? wei1=0;break;?? ?P0=temperature3[2];//第一個(gè)數(shù)碼管顯示 ??case1: ??wei1=1; wei3=1;? ?wei4=1; wei2=0;break; ? ?P0=temperature3[2];//第二個(gè)數(shù)碼管顯示? ?case2:? wei1=1;? ?wei2=1;? ?? wei4=1; ?wei3=0;break;? ? P0=temperat(yī)ure3[2];//第三個(gè)數(shù)碼管顯示 ?case3:? ?wei1=1;?? ?wei2=1;? ?? wei3=1; wei4=0;break;???? P0=temperature3[2];//第四個(gè)數(shù)碼管顯示 ?} display_delay(400);?//每個(gè)數(shù)碼管顯示200ms左右?}? ?}}#endif六、參考文獻(xiàn)(1).郭天祥.51單片機(jī)c語(yǔ)言教程.電子工業(yè)出版社。2009。12(2).李群芳.單片微型計(jì)算機(jī)與接口技術(shù).電子工業(yè)出版社.2012.12單片機(jī)原理課程設(shè)計(jì)論文班級(jí):電氣1136班學(xué)號(hào):201311631631姓名:朱焯華指導(dǎo)老師:張瑛目錄前言。。.。。。.。..。。.。.。。。。。。。.。。3選題要求。。.。。。..。.。。..。。。。。。。。。3三、硬件電路設(shè)計(jì)。。。。。。。....。。。.。。。。。。。43。1主控芯片。。。。。.。。。..。。。。。。。。。43.2矩陣鍵盤(pán)電路。..。.。..。。.。.。。。。。53。3數(shù)碼管電路。。.。。。。。。。。。。。.。.。。63。4138譯碼器位選電路。。。。。。。。。。。。。。。63.5晶振和復(fù)位電路。。。.。。。。。。..。。。。。73.6蜂鳴器電路。。.。.。。。..。.。。。。。.。8四、軟件設(shè)計(jì)。。.。.。。.。。。。.。。。。。。。。。。。8五、調(diào)試結(jié)果.。。。。。。.。。。。.。。。。。。。。。。。10六、總結(jié)。.。。..。...。。。。...。。。。。...。12前言隨著人們生活水平的提高,如何實(shí)現(xiàn)家庭防盜這一問(wèn)題也變得尤為突出.在科學(xué)技術(shù)不斷發(fā)展的今天,電子密碼防盜鎖作為防盜衛(wèi)士的作用顯得日趨重要。本文從經(jīng)濟(jì)實(shí)用的角度出發(fā),系統(tǒng)由STC89C51作為主控芯片與數(shù)據(jù)存儲(chǔ)器單元,結(jié)合外圍的鍵盤(pán)輸入、數(shù)碼管顯示、報(bào)警、開(kāi)鎖等電路模塊.它能完成以下功能:正確輸入密碼前提下,開(kāi)鎖,數(shù)碼管顯示“open”;錯(cuò)誤輸入密碼情況下,報(bào)警,數(shù)碼管顯示“err”;密碼可以根據(jù)用戶(hù)需要在程序中更改.用C語(yǔ)言編寫(xiě)的主控芯片控制程序,并用Keil4軟件進(jìn)行編譯,設(shè)計(jì)了一款可以更改密碼的系統(tǒng),本密碼鎖具有設(shè)計(jì)方法合理,簡(jiǎn)單易行,成本低,安全實(shí)用,保密性強(qiáng),靈活性高等特點(diǎn),具有一定的推廣價(jià)值。關(guān)鍵詞:電子密碼鎖、報(bào)警、數(shù)碼管顯示二、選題要求本文從經(jīng)濟(jì)實(shí)用的角度出發(fā),設(shè)計(jì)采用51單片機(jī)為主控芯片,結(jié)合外圍電路,組成電子密碼控制系統(tǒng),密碼鎖共4位密碼(可增加),每位的取值范圍為0~9,外加“確認(rèn)”鍵和“取消”鍵.用戶(hù)可以通過(guò)修改程序來(lái)修改密碼,想要打開(kāi)鎖,必先通過(guò)提供的鍵盤(pán)輸入正確的密碼才可以,密碼輸入錯(cuò)誤有提示并報(bào)警。4位密碼同時(shí)輸入正確,鎖才能打開(kāi)。保密性強(qiáng)、靈活性高.其特點(diǎn):1)保密性好,編碼量多,遠(yuǎn)遠(yuǎn)大于彈子鎖。隨機(jī)開(kāi)鎖成功率幾乎為零。2)密碼可變,用戶(hù)可以更改密碼,防止密碼被盜,同時(shí)也可以避免因人員的更替而使鎖的密級(jí)下降。3)當(dāng)輸入密碼錯(cuò)誤時(shí),報(bào)警系統(tǒng)自動(dòng)啟動(dòng)。4)無(wú)活動(dòng)零件,不會(huì)磨損,壽命長(zhǎng)。5)使用靈活性好,不像機(jī)械鎖必須佩帶鑰匙才能開(kāi)鎖。三、硬件電路設(shè)計(jì)下面是整個(gè)設(shè)計(jì)的流程圖:3.1主控芯片這次課程設(shè)計(jì)采用的主控芯片是51系列單片機(jī)AT89C51。其外部封裝如下:AT89C52單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32位。P0口(Pin39~Pin32):8位雙向I/O口線,名稱(chēng)為P0。0~P0.7;P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱(chēng)為P1.0~P1.7;P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱(chēng)為P2。0~P2.7;P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱(chēng)為P3。0~P3.7.3。2矩陣鍵盤(pán)電路本次課程設(shè)計(jì)采用的是行列鍵盤(pán),C語(yǔ)言程序中有相對(duì)應(yīng)的驅(qū)動(dòng)程序,其硬件電路圖和對(duì)應(yīng)數(shù)字功能鍵圖如下所示:注:這里的“取消”鍵就是電路中的“復(fù)位”鍵。3.3數(shù)碼管電路采用的是7SEG-MPX4-CA數(shù)碼管(采用兩個(gè)數(shù)碼管的目的為了拓展密碼位數(shù))。3。4138譯碼器位選電路通過(guò)138譯碼器的輸出來(lái)選擇需要顯示的數(shù)碼管,其電路圖和功能表如下:3.5晶振和復(fù)位電路電路圖如下:3.6蜂鳴器電路電路圖如下:四、軟件設(shè)計(jì)C語(yǔ)言代碼如下:五、調(diào)試結(jié)果輸入正確密碼“0123”按下“確認(rèn)"鍵后,顯示“open"輸入錯(cuò)誤密碼“0000”按下“確認(rèn)”鍵后,顯示“err”六、總結(jié)經(jīng)過(guò)一周的緊張?jiān)O(shè)計(jì),終于順利完成了設(shè)計(jì)任務(wù)。本次課程設(shè)計(jì)主要針對(duì)密碼鎖系統(tǒng)做了詳細(xì)介紹,一STC89C51為核心,并通過(guò)調(diào)試運(yùn)行可以實(shí)現(xiàn)數(shù)碼管顯示密碼輸入的相關(guān)信息,通過(guò)10數(shù)字鍵(0~9)設(shè)置成4位數(shù)字密碼,實(shí)現(xiàn)2位功能按鍵(“確認(rèn)"、“取消")和蜂鳴器報(bào)警等。通過(guò)課程設(shè)計(jì)讓我對(duì)單片機(jī)系統(tǒng)有了較詳細(xì)的了解,而且觸及到與其相關(guān)的很多新知識(shí),而且隨著電子技術(shù)的發(fā)展簡(jiǎn)易數(shù)字密碼表也會(huì)越來(lái)越完善,作為大學(xué)生的我們應(yīng)該跟上時(shí)代的步伐,時(shí)刻關(guān)注形勢(shì)變化,不斷充實(shí)更新自己的知識(shí)。在設(shè)計(jì)中既應(yīng)用到了基礎(chǔ)知識(shí),也用到了專(zhuān)業(yè)知識(shí),他是對(duì)三年來(lái)所學(xué)知識(shí)的綜合考察.最重要的是我通過(guò)親自設(shè)計(jì),親自繪制原理圖以及系統(tǒng)調(diào)試,培養(yǎng)了我的耐心和細(xì)心,這對(duì)我以后的工作和學(xué)習(xí)有很大的幫助.電子電路設(shè)計(jì)實(shí)驗(yàn)課程設(shè)計(jì)報(bào)告姓名:專(zhuān)業(yè):11電子信息工程2班學(xué)號(hào):日期2013年5月20日——2012年6學(xué)院信息科學(xué)與工程學(xué)院目錄封面--—-——----——---—--—-—-----—-—-----——-—---—--—-—----—-—----———---—-——--—-—--1目錄——-—--——-—---—-——-—--——--—--——--——--------—--————--—-——-—-—---—-—--————---—2實(shí)驗(yàn)任務(wù)書(shū)--------——----—--—----——---—-——-—----------—-—---—---—-——----—-———-—3摘要-------—-—-—-———-—-———--———-——-—---—----———————---—--------—-———-———-----——4正文---—---—--———-————-----—-—————--—-—--—---—---—--—--———---————-—------——-——-5一、系統(tǒng)設(shè)計(jì)設(shè)計(jì)要求系統(tǒng)設(shè)計(jì)方案2.1、系統(tǒng)整體設(shè)計(jì)2.2、系統(tǒng)各單元組成與功能—--—-—-———-——---—---—--—--—--—---———---——------——6二、系統(tǒng)各單元詳細(xì)分析與設(shè)計(jì)所使用芯片的功能簡(jiǎn)介CD45327419474857432、7304、74082、各單元電路分析與設(shè)計(jì) ?2。1、1位密碼輸入及比較單元2。2.開(kāi)鎖信號(hào)輸出單元2.3.控制單元? 2.4.顯示單元—----—--———---———-------—-—-—---—--—-——---—--—---—-——---—-—-—10三、仿真結(jié)果演示-------——---————-———-----—-—------——-——-——----—---—10總結(jié)與心得—-—-----—-—---—---—--—--—-————---—--—---——-—-—-——15五、附錄-——---——-—————--—--——-—--——
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人力外包招聘合同范本
- 2025年德州年貨運(yùn)從業(yè)資格證考試題庫(kù)
- 勞動(dòng)合同范本 股權(quán)
- 企業(yè)借貸合同質(zhì)押合同范本
- 代理分紅合同范本
- 買(mǎi)門(mén)頭房合同范本
- 動(dòng)遷協(xié)議合同范本
- 東莞擺攤餐飲轉(zhuǎn)讓合同范本
- 任意拆解合同范本
- 制作車(chē)輛抵押合同范本
- 中職對(duì)口升學(xué)養(yǎng)殖專(zhuān)業(yè)獸醫(yī)基礎(chǔ)習(xí)題集判斷題詳解
- 公園綠化養(yǎng)護(hù)景觀綠化維護(hù)項(xiàng)目迎接重大節(jié)會(huì)活動(dòng)的保障措施
- 初中物理各單元思維導(dǎo)圖
- 氧化還原反應(yīng)和氧化還原平衡--ppt課件
- 國(guó)內(nèi)外旅游公共服務(wù)研究的文獻(xiàn)綜述
- 2022年北京市專(zhuān)升本英語(yǔ)真題
- 鍺的提取方法
- 機(jī)車(chē)電測(cè)儀表使用及檢修
- PMS顏色對(duì)照表
- 有害物質(zhì)管控清單(歐盟)
- 七年級(jí)英語(yǔ)閱讀理解50篇(附答案)
評(píng)論
0/150
提交評(píng)論