




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
西安郵電學(xué)院畢業(yè)設(shè)計(jì)(論文)題目基于PIC單片機(jī)的多路溫度巡回檢測系統(tǒng)院(系):專業(yè):班級:學(xué)生姓名:導(dǎo)師姓名:職稱:摘要:本文介紹了一種基于PIC16F877A單片機(jī),利用DS18B20對多路溫度采集,并進(jìn)行溫度的控制與檢測,并通過12864液晶顯示出來。系統(tǒng)中通過控制按鈕實(shí)現(xiàn)了實(shí)時(shí)各路的報(bào)警溫度,并且實(shí)現(xiàn)多路與任一單路溫度顯示切換,從而既可以進(jìn)行多路的檢測又可以進(jìn)行任一單路的監(jiān)控,而且還有數(shù)字跟圖形兩種顯示方式更為直觀。在溫度超過設(shè)定溫度時(shí)溫度跟時(shí)間通過24C02存儲(chǔ)起來,以便查看,同時(shí)可以通過固定電話遠(yuǎn)程報(bào)警關(guān)鍵詞:溫度檢測;單片機(jī);串行通訊;DS18B20;目錄TOC\o"1-4"\h\z\u1 系統(tǒng)設(shè)計(jì) 72 主芯片:PIC16F877A單片機(jī)簡介 92.1PIC單片機(jī)的優(yōu)越之處: 92.2PIC16F877A引腳圖及主要性能 102.3最小系統(tǒng) 112.3.1復(fù)位功能 112.3.2系統(tǒng)時(shí)鐘 122.4設(shè)計(jì)心得總結(jié) 123 LCD12864液晶原理介紹及接口實(shí)現(xiàn) 123.1液晶顯示模塊概述 123.2液晶引腳說明 133.3接口時(shí)序 143.4具體指令介紹 153.5顯示坐標(biāo)關(guān)系 193.5.1、圖形顯示坐標(biāo) 193.5.2漢字顯示坐標(biāo) 203.6與單片機(jī)的接口實(shí)現(xiàn) 213.7 設(shè)計(jì)心得總結(jié) 224 DS18B20原理介紹及接口實(shí)現(xiàn) 224.1DS18B20簡介 224.2 DS18B20結(jié)構(gòu)及其工作原理 234.3 DS18B20的接口實(shí)現(xiàn) 294.3.1硬件設(shè)計(jì) 294.3.2軟件設(shè)計(jì) 304.4 設(shè)計(jì)心得總結(jié) 314.4.1焊接問題: 314.4.2軟件設(shè)計(jì): 314.4.3不足: 315 存儲(chǔ)芯片AT24C02簡單介紹及接口實(shí)現(xiàn) 325.1 AT24C02功能描述管腳定義 325.2 管腳定義及接口實(shí)現(xiàn) 325.3 設(shè)計(jì)心得 346實(shí)時(shí)時(shí)鐘DS1302簡單介紹及接口實(shí)現(xiàn) 346.1DS1302簡介 346.2DS1302結(jié)構(gòu)及工作原理 346.3 DS1302的接口實(shí)現(xiàn) 357 溫度上限報(bào)警功能 377.1設(shè)計(jì)原理 377.2設(shè)計(jì)心得體會(huì) 378 與PC串口通訊及VB上位機(jī)簡單介紹 388.1與PC串口通信 388.2上位機(jī)介紹 399總結(jié) 43附錄 44部分原理圖: 44參考文獻(xiàn) 45致謝 46基于PIC單片機(jī)的多路溫度監(jiān)控巡回系統(tǒng)系統(tǒng)設(shè)計(jì)在工業(yè)生產(chǎn)和日常生活中,經(jīng)常要對溫度進(jìn)行測量與控制,并且有時(shí)是對多個(gè)點(diǎn)進(jìn)行溫度測量,比如冷庫溫度監(jiān)控、環(huán)境溫度監(jiān)測、農(nóng)業(yè)溫室監(jiān)控、糧庫溫度監(jiān)控等。在這種情況下,多點(diǎn)溫度檢測系統(tǒng)應(yīng)運(yùn)而生。多點(diǎn)溫度檢測系統(tǒng)通常能夠?qū)Χ鄠€(gè)工作點(diǎn)的溫度進(jìn)行檢測,顯示當(dāng)前溫度,并能夠?qū)囟冗M(jìn)行存儲(chǔ)和報(bào)警,還能將溫度上傳至PC機(jī),進(jìn)行后續(xù)處理。傳統(tǒng)的測溫元件有熱電偶和熱電阻,需很多硬件支持并且電路復(fù)雜。本文將設(shè)計(jì)一款由新型的數(shù)字溫度傳感器DS18B20配合單片機(jī),具有溫度檢測、顯示、存儲(chǔ)、自動(dòng)統(tǒng)計(jì)分析及跟電腦通訊連接還利用固定電話遠(yuǎn)程報(bào)警等功能的多點(diǎn)溫度監(jiān)控系統(tǒng)。多路溫度多路溫度監(jiān)控系統(tǒng)30℃PC機(jī)通訊4*溫度傳感器固話報(bào)警圖1.1多路溫度監(jiān)控系統(tǒng)模擬應(yīng)用溫度監(jiān)控主系統(tǒng)構(gòu)架框圖如圖1.2所示:PIC16FPIC16F單片機(jī)12864液晶顯示實(shí)時(shí)時(shí)鐘上限報(bào)警接口按鍵控制PC機(jī)通訊AT24C02溫度儲(chǔ)存四路溫度采集圖1.2多路溫度監(jiān)控系統(tǒng)構(gòu)架框圖圖1.3手工焊接實(shí)物圖主要技術(shù)參數(shù)A溫度檢測范圍:-55℃~+B測量精度:0.0625℃C顯示方式:LCD12864顯示D報(bào)警方式:固話報(bào)警主芯片:PIC16F877A單片機(jī)簡介2.1PIC單片機(jī)的優(yōu)越之處:(1)哈佛總線結(jié)構(gòu):MCS-51單片機(jī)的總線結(jié)構(gòu)是馮-諾依曼型,計(jì)算機(jī)在同一個(gè)存儲(chǔ)空間取指令和數(shù)據(jù),兩者不能同時(shí)進(jìn)行;而PIC單片機(jī)的總線結(jié)構(gòu)是哈佛結(jié)構(gòu),指令和數(shù)據(jù)空間是完全分開的,一個(gè)用于指令,一個(gè)用于數(shù)據(jù),由于可以對程序和數(shù)據(jù)同時(shí)進(jìn)行訪問,所以提高了數(shù)據(jù)吞吐率。正因?yàn)樵赑IC單片機(jī)中采用了哈佛雙總線結(jié)構(gòu),所以與常見的微控制器不同的一點(diǎn)是:程序和數(shù)據(jù)總線可以采用不同的寬度。數(shù)據(jù)總線都是8位的,但指令總線位數(shù)分別位12、14、16位。
(2)流水線結(jié)構(gòu):MCS-51單片機(jī)的取指和執(zhí)行采用單指令流水線結(jié)構(gòu),即取一條指令,執(zhí)行完后再取下一條指令;而PIC的取指和執(zhí)行采用雙指令流水線結(jié)構(gòu),當(dāng)一條指令被執(zhí)行時(shí),允許下一條指令同時(shí)被取出,這樣就實(shí)現(xiàn)了單周期指令。
(3)寄存器組:PIC單片機(jī)的所有寄存器,包括I/O口,定時(shí)器和程序計(jì)數(shù)器等都采用RAM結(jié)構(gòu)形式,而且都只需要一個(gè)指令周期就可以完成訪問和操作;而MCS-51單片機(jī)需要兩個(gè)或兩個(gè)以上的周期才能改變寄存器的內(nèi)容。(4)運(yùn)行速度高:由于采用了哈佛總線結(jié)構(gòu),以及指令的讀取和執(zhí)行才用了流水作業(yè)方式,使得運(yùn)行速度大大提高。(5)功耗低:PIC單片機(jī)的功率消耗極低,是目前世界上最低的單片機(jī)品種之一。在4MHz時(shí)鐘下工作時(shí)耗電不超過2mA,在睡眠模式下耗電可以低到1uA以下。(6)驅(qū)動(dòng)能力強(qiáng):I/O端口驅(qū)動(dòng)負(fù)載的能力較強(qiáng),每個(gè)I/O引腳吸入和輸出電流的最大值可分別達(dá)到25mA和20mA,能夠直接驅(qū)動(dòng)發(fā)光二極管LED、光電耦合器或者輕微繼電器等。(7)外接電路簡潔PIC單片機(jī)片內(nèi)集成了上電復(fù)位電路、I/O引腳上拉電路、看門狗定時(shí)器等,可以最大程度減少或免用外接器件,以便實(shí)現(xiàn)“純單片機(jī)”應(yīng)用。這樣,不僅方便于開發(fā),而且還可節(jié)省用戶的電路空間和制作成本。(8)程序保密性強(qiáng)目前,尚無辦法對其直接進(jìn)行解密拷貝,可以最大限度的保護(hù)用戶的程序版權(quán)。2.2PIC16F877A引腳圖及主要性能PIC16F877A的詳細(xì)引腳如圖2.2圖2.2-1PIC16F877A引腳圖圖2.2-2PIC16F主要性能參數(shù)如下所示:具有高性能RISCCPU僅有35條單字指令100000次擦寫周期除程序分支指令為兩個(gè)周期外,其余均為單周期指令運(yùn)行速度:DC—20MHZ始終輸入DC—200ns指令周期8K*14個(gè)FLASH程序存儲(chǔ)器368*8個(gè)數(shù)據(jù)存儲(chǔ)器(RAM)字節(jié)256*8EEPRM數(shù)據(jù)存儲(chǔ)器字節(jié)提供14個(gè)中斷源功耗低在5V,4MHZ時(shí)鐘運(yùn)行時(shí)電流小于2mA在3V,32KHZ時(shí)鐘運(yùn)行時(shí)電流小于20Ua支持在線串行編程(ICSP)運(yùn)行電壓范圍廣,2.0V到5.5V輸入及輸出電流可達(dá)到25mATimer0:帶有預(yù)分頻器的8位定時(shí)器/計(jì)數(shù)器Timer1:帶有預(yù)分頻器的16位定時(shí)器/計(jì)數(shù)器,在使用外部晶振震蕩時(shí)鐘時(shí),在睡眠期間仍能工作Timer2:帶有8位周期寄存器,預(yù)分頻器和后分頻器的8位定時(shí)器/計(jì)數(shù)器。2個(gè)捕捉器,比較器,PWM模塊其中:捕捉器是16位,最大分辨率是12.5ns比較器是16位,最大分辨率是200nsPWM最大分辨率是10位10位多通道模數(shù)轉(zhuǎn)換器2.3最小系統(tǒng)2.3.1復(fù)位功能PIC16F877A這里簡單介紹一下人工復(fù)位人工復(fù)位:無論是單片機(jī)在正常運(yùn)行程序,還是處在睡眠狀態(tài)或出現(xiàn)死機(jī)狀態(tài),只要在人工復(fù)位端MCLR加入低點(diǎn)平信號(hào),就令其復(fù)位。本次設(shè)計(jì)的電路圖如圖2.3-1所示。圖2.3—1PIC最小系統(tǒng)電路圖圖2.3—2最小系統(tǒng)實(shí)物圖2.3.2系統(tǒng)時(shí)鐘數(shù)字電路的工作離不開時(shí)鐘信號(hào),每一步細(xì)微動(dòng)作都是在一個(gè)共同的時(shí)間基準(zhǔn)信號(hào)協(xié)調(diào)下完成的。作為時(shí)基發(fā)生器的時(shí)鐘震蕩電路,為整個(gè)單片機(jī)芯片的工作提供系統(tǒng)時(shí)鐘信號(hào),也為單片機(jī)與其他外接芯片之間的通訊提供可靠的同步時(shí)鐘信號(hào)。PIC16F877A的時(shí)鐘電路是由片內(nèi)的一個(gè)反相器和一個(gè)反饋電阻,與外接的1個(gè)石英晶體和2個(gè)電容,共同構(gòu)成的一個(gè)自激多諧振蕩器。電路如圖2.3-12.4設(shè)計(jì)心得總結(jié)PIC16F877ALCD12864液晶原理介紹及接口實(shí)現(xiàn)3.1液晶顯示模塊概述12864A主要技術(shù)參數(shù)和顯示特性:電源:VDD3.3V~+5V(內(nèi)置升壓電路,無需負(fù)壓);顯示內(nèi)容:128列×64行顯示顏色:黃綠顯示角度:6:00鐘直視LCD類型:STN與MCU接口:8位或4位并行/3位串行配置LED背光多種軟件功能:光標(biāo)顯示、畫面移位、自定義字符、睡眠模式等3.2液晶引腳說明引腳號(hào)引腳名稱方向功能說明1VSS-模塊的電源地2VDD-模塊的電源正端3V0-LCD驅(qū)動(dòng)電壓輸入端4RS(CS)H/L并行的指令/數(shù)據(jù)選擇信號(hào);串行的片選信號(hào)5R/W(SID)H/L并行的讀寫選擇信號(hào);串行的數(shù)據(jù)口6E(CLK)H/L并行的使能信號(hào);串行的同步時(shí)鐘7DB0H/L數(shù)據(jù)08DB1H/L數(shù)據(jù)19DB2H/L數(shù)據(jù)210DB3H/L數(shù)據(jù)311DB4H/L數(shù)據(jù)412DB5H/L數(shù)據(jù)513DB6H/L數(shù)據(jù)614DB7H/L數(shù)據(jù)715PSBH/L并/串行接口選擇:H-并行;L-串行16NC空腳17/RETH/L復(fù)位低電平有效18NC空腳19LED_A-背光源正極(LED+5V)20LED_K-背光源負(fù)極(LED-OV)邏輯工作電壓(VDD):4.5~5.5V電源地(GND):0V工作溫度(Ta):0~60℃(常溫)/-20~753.3接口時(shí)序模塊有并行和串行兩種連接方法,本文采用并行接法(時(shí)序如下):8位并行連接時(shí)序圖MPU寫資料到模塊程序?qū)崿F(xiàn)如下:/*********************************************************************名稱:send_i()*功能:寫一個(gè)字節(jié)命令到LCD*入口參數(shù):unsignedcharx字符*******************************************************************/voidsend_i(unsignedcharx){ chk_busy(); //檢測LCD是否工作繁忙 rs=0;//設(shè)置該字節(jié)數(shù)據(jù)為控制命令 rw=0;//設(shè)置此次操作為寫 PORTD=x;//送數(shù)據(jù)口PORTD e=1;//使能 nop(); nop(); nop(); e=0;//禁止}MPU從模塊讀出資料程序?qū)崿F(xiàn)如下:/*************************************************讀數(shù)據(jù)**************************************************/unsignedcharu8_Lcd12864ReadByte_f(void){unsignedcharbyReturnValue;chk_busy(); //檢測LCD是否工作繁忙 TRISD=0XFF;//設(shè)置PD口為輸入狀態(tài)PORTD=0xff;//PD初始化為高電平rs=1;//讀置高rw=1;//寫置高e=0;//使能置低e=1;//使能置高byReturnValue=PORTD;//讀數(shù)據(jù)e=0;//關(guān)使能 TRISD=0X00;//恢復(fù)PD口為輸出returnbyReturnValue;//返回讀到的數(shù)據(jù)}3.4具體指令介紹1、清除顯示CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLLH功能:清除顯示屏幕,把DDRAM位址計(jì)數(shù)器調(diào)整為“00H”2、位址歸位CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLHX功能:把DDRAM位址計(jì)數(shù)器調(diào)整為“00H”,游標(biāo)回原點(diǎn),該功能不影響顯示DDRAM3、位址歸位CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLHI/DS功能:把DDRAM位址計(jì)數(shù)器調(diào)整為“00H”,游標(biāo)回原點(diǎn),該功能不影響顯示DDRAM功能:執(zhí)行該命令后,所設(shè)置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計(jì)數(shù)器控制的,該命令自動(dòng)將A0-A5位地址送入Z地址計(jì)數(shù)器,起始地址可以是0-63范圍內(nèi)任意一行。Z地址計(jì)數(shù)器具有循環(huán)計(jì)數(shù)功能,用于顯示行掃描同步,當(dāng)掃描完一行后自動(dòng)加一。4、顯示狀態(tài)開/關(guān)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLHDCB功能:D=1;整體顯示ONC=1;游標(biāo)ONB=1;游標(biāo)位置ON5、游標(biāo)或顯示移位控制CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLHS/CR/LXX功能:設(shè)定游標(biāo)的移動(dòng)與顯示的移位控制位:這個(gè)指令并不改變DDRAM的內(nèi)容6、功能設(shè)定CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLHDLX0REXX功能:DL=1(必須設(shè)為1)RE=1;擴(kuò)充指令集動(dòng)作RE=0:基本指令集動(dòng)作7、設(shè)定CGRAM位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLHAC5AC4AC3AC2AC1AC0功能:設(shè)定CGRAM位址到位址計(jì)數(shù)器(AC)8、設(shè)定DDRAM位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLHAC6AC5AC4AC3AC2AC1AC0功能:設(shè)定DDRAM位址到位址計(jì)數(shù)器(AC)9、讀取忙碌狀態(tài)(BF)和位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LHBFAC6AC5AC4AC3AC2AC1AC0功能:讀取忙碌狀態(tài)(BF)可以確認(rèn)內(nèi)部動(dòng)作是否完成,同時(shí)可以讀出位址計(jì)數(shù)器(AC)的值10、寫資料到RAMCODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0HLD7D6D5D4D3D2D1D0功能:寫入資料到內(nèi)部的RAM(DDRAM/CGRAM/TRAM/GDRAM)11、讀出RAM的值CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0HHD7D6D5D4D3D2D1D0功能:從內(nèi)部RAM讀取資料(DDRAM/CGRAM/TRAM/GDRAM)12、 待命模式(12H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLLH功能:進(jìn)入待命模式,執(zhí)行其他命令都可終止待命模式13、卷動(dòng)位址或IRAM位址選擇(13H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLHSR功能:SR=1;允許輸入卷動(dòng)位址SR=0;允許輸入IRAM位址14、反白選擇(14H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLHR1R0功能:選擇4行中的任一行作反白顯示,并可決定反白的與否15、睡眠模式(015H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLHSLXX功能:SL=1;脫離睡眠模式SL=0;進(jìn)入睡眠模式16、擴(kuò)充功能設(shè)定(016H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLHHX1REGL功能:RE=1;擴(kuò)充指令集動(dòng)作RE=0;基本指令集動(dòng)作G=1;繪圖顯示ONG=0;繪圖顯示OFF17、設(shè)定IRAM位址或卷動(dòng)位址(017H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLHAC5AC4AC3AC2AC1AC0功能:SR=1;AC5~AC0為垂直卷動(dòng)位址SR=0;AC3~AC0寫ICONRAM位址18、設(shè)定繪圖RAM位址(018H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLHAC6AC5AC4AC3AC2AC1AC0功能:設(shè)定GDRAM位址到位址計(jì)數(shù)器(AC)備注、1、當(dāng)模塊在接受指令前,微處理順必須先確認(rèn)模塊內(nèi)部處于非忙碌狀態(tài),即讀取BF標(biāo)志時(shí)BF需為0,方可接受新的指令;如果在送出一個(gè)指令前并不檢查BF標(biāo)志,那么在前一個(gè)指令和這個(gè)指令中間必須延遲一段較長的時(shí)間,即是等待前一個(gè)指令確實(shí)執(zhí)行完成,指令執(zhí)行的時(shí)間請參考指令表中的個(gè)別指令說明。2、“RE”為基本指令集與擴(kuò)充指令集的選擇控制位元,當(dāng)變更“RE”位元后,往后的指令集將維持在最后的狀態(tài),除非再次變更“RE”位元,否則使用相同指令集時(shí),不需每次重設(shè)“RE”位元。本次設(shè)計(jì)液晶初始化如下:voidlcd_init(){ rst=0;//復(fù)位LCD delay(1);//保證復(fù)位所需要的時(shí)間(1ms) rst=1;//恢復(fù)LCD正常工作// nop();// psb=1;//設(shè)置LCD為8位并口通信 send_i(0x30);//基本指令操作 send_i(0x01);//清除顯示 send_i(0x06); //指定在寫入或讀取時(shí),光標(biāo)的移動(dòng)方向 send_i(0x0c);//開顯示,關(guān)光標(biāo),不閃爍}3.5顯示坐標(biāo)關(guān)系3.5.1、圖形顯示坐標(biāo)水平方向X—以字節(jié)單位垂直方向Y—以位為單位/*******************************************函數(shù)名稱:Draw_PM功能:在整個(gè)液晶屏幕上畫圖參數(shù):無返回值:無********************************************/voidDraw_PM(constuchar*ptr){uchari,j,k; send_i(0x34);//打開擴(kuò)展指令集 i=0x80; for(j=0;j<32;j++) {send_i(i++);send_i(0x80); for(k=0;k<16;k++) { send_d(*ptr++); } } i=0x80; for(j=0;j<32;j++) { send_i(i++);send_i(0x88); for(k=0;k<16;k++) { send_d(*ptr++); } }send_i(0x36);//打開繪圖顯示 send_i(0x30);//回到基本指令集}3.5.2漢字顯示坐標(biāo)X坐標(biāo)Line180H81H82H83H84H85H86H87HLine290H91H92H93H94H95H96H97HLine388H89H8AH8BH8CH8DH8EH8FHLine498H99H9AH9BH9CH9DH9EH9FH/*****************************************************************名稱:writelcd()*功能:在LCD上顯示字符串*入口參數(shù):constunsignedchar*pt字符串的首地址**************************************************************/voidwritelcd(constunsignedchar*pt){while(*pt) //檢測是否達(dá)到了字符串最后send_d(*pt++);//發(fā)送數(shù)據(jù)給lcd}//應(yīng)用如下constuchartable1[]={"基PIC單片機(jī)"};constuchartable2[]={"多路溫度"};constuchartable3[]={"巡回檢測系統(tǒng)"};constuchartable4[]={"2009年12月01日"}; send_i(0x80);//定位在第一行 writelcd(table1);//寫:基PIC單片機(jī) send_i(0x90);//定位在第二行 writelcd(table2);//寫:多路溫度 send_i(0x88);//定位在第三行 writelcd(table3);//寫:巡回檢測系統(tǒng) send_i(0x98);//定位在第四行 writelcd(table4);//寫:2009年12月01日3.6與單片機(jī)的接口實(shí)現(xiàn)12864液晶的電路連線圖如圖3.6-1所示,實(shí)物位置如圖3.6-2所示圖3.6-112864液晶電路連接圖圖3.6-212864液晶模塊實(shí)物圖設(shè)計(jì)心得總結(jié)LCD12864與1602相比需要較大的電流驅(qū)動(dòng),如果出現(xiàn)圖片模糊不清晰或者灰暗,除了檢查背光燈外應(yīng)考慮電源問題。最好采用大于5V的電源,經(jīng)7805穩(wěn)壓管穩(wěn)壓驅(qū)動(dòng),以保證電流?;掘?qū)動(dòng)跟1602相似難度不大。中文及圖像顯示是12864最大的特點(diǎn)也是難點(diǎn),主要是指令較多,還有就是圖像驅(qū)動(dòng)需要了解液晶內(nèi)部原理。整屏畫圖可以使用PCtoLCD2002把圖片轉(zhuǎn)換成16進(jìn)制數(shù),局部畫曲線、直線、圓等需要一些算法,比較復(fù)雜DS18B20原理介紹及接口實(shí)現(xiàn)4.1DS18B20簡介DS18B20是DALLAS半導(dǎo)體公司推出的第一片支持“一線總線”接口的溫度傳感器,他它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)供處理器處理。DS18B20具有以下優(yōu)點(diǎn):適應(yīng)電壓范圍寬,電壓范圍在3.0V~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。獨(dú)特的單線接口方式,與微處理器連接時(shí)只需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通信。支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。在使用中不需要任何外圍元件,全部傳感元件以及轉(zhuǎn)換電路集成在形如一直三極管的集成電路內(nèi)。測溫范圍-55℃~+125℃,在-10℃~+85可編程分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃負(fù)壓特性。電源極性接反時(shí),芯片不會(huì)因?yàn)檫^熱而燒毀,但不能正常工作。DS18B20結(jié)構(gòu)及其工作原理圖4.1DS18B20內(nèi)部結(jié)構(gòu)圖DS18B20的內(nèi)部結(jié)構(gòu)圖如圖4.1所示。由此我們可以看出DS18B20主要由4部分組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如圖4.2所示,其中DQ為數(shù)字信號(hào)輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端,在寄生電源接線方式時(shí)接地。圖4.2DS18B20引腳和封裝每顆DS18B20在出廠前都有一個(gè)64位光刻ROM,它可以看作該DS18B20的地址序列碼。其各位排列順序是:開始8位為產(chǎn)品類型標(biāo)號(hào),接下來48位是該DS18B20自身的序列號(hào),最后8位是前面56位的CRC循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一條總線掛接多個(gè)DS18B20的目的。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號(hào)的時(shí)序:復(fù)位時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。DS18B20的復(fù)位時(shí)序:圖4.3DS18B20復(fù)位時(shí)序圖程序?qū)崿F(xiàn)如下:/*********************************************************************名稱:reset()*功能:18b20復(fù)位********************************************************************/#defineDQRB7#defineDQ_HIGH()TRISB7=1#defineDQ_LOW()TRISB7=0;DQ=0voidreset(){ ucharst=1; DQ_HIGH();//先拉至高電平 NOP();NOP(); while(st) { DQ_LOW();//低電平 delayus(70,30);//延時(shí)503usDQ_HIGH();//釋放總線等電阻拉高總線delayus(4,4);//延時(shí)60us if(DQ==1)//沒有接收到應(yīng)答信號(hào),繼續(xù)復(fù)位 st=1; else//接收到應(yīng)答信號(hào) st=0; delayus(50,10);//延時(shí)430us }}DS18B20的讀時(shí)序:對于DS18B20的讀時(shí)序分為讀0時(shí)序和讀1時(shí)序兩個(gè)過程。對于DS18B20的讀時(shí)隙是從主機(jī)把單總線拉低之后,在15uS之內(nèi)釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個(gè)讀時(shí)序過程,至少需要60us才能完成。圖4.4DS18B20讀時(shí)序圖/*********************************************************************名稱:read_byte()*功能:18b20讀字節(jié)*出口參數(shù):讀出18B20的內(nèi)容********************************************************************/uchread_byte(){ uchi; uchvalue=0;//讀出溫度 staticbitj; for(i=8;i>0;i--) { value>>=1; DQ_LOW(); NOP();NOP();NOP();NOP();NOP();NOP(); //6us DQ_HIGH();//拉至高電平 NOP();NOP();NOP();NOP();NOP(); //4us j=DQ; if(j)value|=0x80; delay(2,7);//63us } return(value);}DS18B20的寫時(shí)序:對于DS18B20的寫時(shí)序仍然分為寫0時(shí)序和寫1時(shí)序兩個(gè)過程。對于DS18B20寫0時(shí)序和寫1時(shí)序的要求不同,當(dāng)要寫0時(shí)序時(shí),單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”圖4.5DS18B20寫時(shí)序圖/*********************************************************************名稱:write_byte()*功能:寫18b20寫字節(jié)*入口參數(shù):uchval待寫的數(shù)據(jù)*******************************************************************/voidwrite_byte(uchval){ uchi; uchtemp; for(i=8;i>0;i--) { temp=val&0x01;//最低位移出 DQ_LOW(); NOP();NOP();NOP();NOP();NOP(); //從高拉至低電平,產(chǎn)生寫時(shí)間隙 if(temp==1)DQ_HIGH();//如果寫1,拉高電平 delay(2,7);//延時(shí)63us DQ_HIGH(); NOP();NOP(); val=val>>1;//右移一位 }}DS18B20內(nèi)部帶有共9個(gè)字節(jié)的高速暫存器RAM和電可擦除EEPROM,起結(jié)構(gòu)如表2所示。表2DS18B20高速暫存器結(jié)構(gòu)寄存器內(nèi)容字節(jié)地址溫度值低位(LSB)0溫度值高位(MSB)1高溫限值(TH)2低溫限值(TL)3配置寄存器4保留5保留6保留7CRC校驗(yàn)值8DS18B20所包含的操作指令如表3所示。表3DS18B20操作指令ROM操作指令指令約定代碼功能讀ROM33H讀DS18B20溫度傳感器ROM中的編碼(即64位地址)匹配ROM55H發(fā)出命令后接著發(fā)出64位ROM編碼,訪問總線上與該編碼對應(yīng)的芯片搜索ROMF0H用于確定掛接在同一總線上DS18B20的個(gè)數(shù)跳過ROMCCH忽略64位ROM地址,直接向DS18B20發(fā)溫度變換命令告警搜索ECH執(zhí)行后只有問多超過上限或下限的芯片才響應(yīng)RAM操作指令指令約定代碼功能溫度轉(zhuǎn)換44H啟動(dòng)DS18B20溫度轉(zhuǎn)換。12位轉(zhuǎn)換時(shí)長典型值750ms讀暫存器BEH讀內(nèi)部RAM中9字節(jié)的數(shù)據(jù)。寫暫存器4EH向RAM第2、3字節(jié)寫上、下限溫度數(shù)據(jù),緊跟命令之后傳送2字節(jié)數(shù)據(jù)復(fù)制暫存器48H將RAM中第2、3字節(jié)的內(nèi)容復(fù)制到內(nèi)部EEPROM中重調(diào)EEPROMB8H將EEPROM中內(nèi)容恢復(fù)到RAM中第3、4字節(jié)溫度數(shù)據(jù)在高速暫存器RAM的第0和第1個(gè)字節(jié)中的存儲(chǔ)格式如下表4所示。表4DS18B20溫度數(shù)據(jù)存儲(chǔ)格式位7位6位5位4位3位2位1位0232221202-12-22-32-4位15位14位13位12位11位10位9位8SSSSS262524DS18B20在出廠是默認(rèn)配置為12位,其中最高位為符號(hào)位,即溫度值共11位,單片機(jī)在讀取數(shù)據(jù)時(shí),一次會(huì)讀2字節(jié)共16位,讀完后將低11位的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)后再乘以0.0625便為所測的實(shí)際溫度值。另外,還需要判斷溫度的正負(fù)。前5個(gè)數(shù)字為符號(hào)位,這5位同時(shí)變化,我們只需要判斷11位就可以了。前5位為1時(shí),讀取的溫度為負(fù)值,且測到的數(shù)值需要取反加1再乘以0.0625才可得到實(shí)際溫度值。前5位為0時(shí),讀取的溫度為正值,且溫度為正值時(shí),只要將測得的數(shù)值乘以0.0625即可得到實(shí)際溫度值??紤]到實(shí)際使用的需要,在這里我們只使用一個(gè)DS18B20,故每次操作前只需復(fù)位后發(fā)出SkipROM指令(即跳過ROM指令)再讀出溫度的正值、并精確到小數(shù)點(diǎn)后一位,即可滿足設(shè)計(jì)需求。/******************************************************************名稱:get_temp()*功能:啟動(dòng)溫度轉(zhuǎn)換*****************************************************************/voidget_tem(){ uchartem1,tem2,num; floataaa; reset();//復(fù)位 write_byte(0xCC);//跳過ROM write_byte(0x44);//溫度轉(zhuǎn)換 for(num=100;num>0;num--)//確保溫度轉(zhuǎn)換完成所需要的時(shí)間 reset();//再次復(fù)位,等待從機(jī)應(yīng)答 write_byte(0xCC);//忽略ROM匹配 write_byte(0xBE);//發(fā)送讀溫度命令 tem1=read_byte();//讀出溫度低8 tem2=read_byte();//讀出溫度高8位 shu=(tem2<<4|tem1>>4);//溫度整數(shù)部分 aaa=(tem2*256+tem1)*6.25;//溫度小數(shù)部分 temper=(int)aaa;//強(qiáng)制轉(zhuǎn)換成整型 a1=temper/1000;//取溫度十位 a2=temper%1000/100;//取個(gè)位 a3=temper%100/10;//小數(shù)點(diǎn)后個(gè)位 a4=temper%10;//小數(shù)點(diǎn)后十位}DS18B20的接口實(shí)現(xiàn)4.3.1硬件設(shè)計(jì)DS18B20在本次設(shè)計(jì)中接線圖如圖4.6所示,實(shí)驗(yàn)板硬件圖如圖4.7所示這次實(shí)驗(yàn)只焊了兩個(gè)溫度傳感器而已,其他兩個(gè)用法一樣,留作外接口,可以方便外用。圖4.6DS18B20原理圖圖4.7DSB18B20硬件連接實(shí)物圖4.3.2軟件設(shè)計(jì)根據(jù)DS18B20約定的通訊協(xié)議,每次使用DS18B20之前都必須經(jīng)過三個(gè)步驟,即先復(fù)位DS18B20,接著發(fā)出ROM操作指令,然后才可以發(fā)出RAM操作指令以進(jìn)行溫度轉(zhuǎn)換等命令。本系統(tǒng)將實(shí)現(xiàn)讀出DS18B20的溫度并實(shí)時(shí)顯示到LCD12864上,分辨率為0.0625℃。由于DS18B20對時(shí)序要求很嚴(yán)格,所以在程序設(shè)計(jì)時(shí),時(shí)序要多加注意一點(diǎn),不過數(shù)字不是死的,只要控制合理控制也不是掃描大問題。DS18B20首次初始化時(shí)開啟溫度轉(zhuǎn)換,之后每1s進(jìn)行一次DS18B20的溫度讀取和轉(zhuǎn)換,具體實(shí)現(xiàn)效果圖如圖4.8流程圖如圖圖4.8溫度采集效果實(shí)物圖芯片上電芯片上電復(fù)位DS18B20發(fā)出SkipROM指令啟動(dòng)溫度轉(zhuǎn)換1s到?YN復(fù)位DS18B20發(fā)出SkipROM指令讀取溫度圖4.9DS18B20讀取溫度流程圖設(shè)計(jì)心得總結(jié)4.4.1焊接問題:焊接DS18B20時(shí),速度要快,如果高溫的電烙鐵持續(xù)接觸傳感器很容易燒掉DS18B20,因?yàn)殡娎予F一般溫度為350~450度,而傳感器承受溫度為125度。我曾經(jīng)因此燒壞了兩個(gè)傳感器,得此痛訓(xùn)!4.4.2軟件設(shè)計(jì):DS18B20時(shí)序要求較為嚴(yán)格,這里的嚴(yán)格不是說一定要按手冊的時(shí)間一摸一樣而是說相對其他芯片來說嚴(yán)格了一點(diǎn)。如果讀取不到溫度應(yīng)該檢查一下時(shí)序時(shí)間設(shè)計(jì)問題。再有一個(gè)難點(diǎn)就是溫度轉(zhuǎn)換問題。溫度能顯示到小數(shù)點(diǎn)后4位,如果要將溫度全部讀出,應(yīng)該將整數(shù)部分乘以10000再加上小數(shù)部分,化浮點(diǎn)數(shù)為整數(shù),當(dāng)然也可以直接采用浮點(diǎn)數(shù)相乘。開機(jī)會(huì)出現(xiàn)85C那是18B20復(fù)位值4.4.3不足:此次設(shè)計(jì)沒有處理溫度負(fù)數(shù)情況,如果要處理應(yīng)該判斷最高位符號(hào)位,然后取反加一。18B20可單總線掛多個(gè),這里IO口有剩再加上為了程序設(shè)計(jì)簡單采用了并口方式。存儲(chǔ)芯片AT24C02簡單介紹及接口實(shí)現(xiàn)AT24C02功能描述管腳定義AT24C02是一個(gè)2K位串行CMOSE2PROM,內(nèi)部含有256個(gè)8位字節(jié),CATALYST公司的先進(jìn)CMOS技術(shù)實(shí)質(zhì)上減少了器件的功耗。AT24C02有一個(gè)16字節(jié)頁寫緩沖器。該器件通過IC總線接口進(jìn)行操作,有一個(gè)專門的寫保護(hù)功能。AT24C02支持IC,總線數(shù)據(jù)傳送協(xié)議IC,總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器。任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產(chǎn)生串行時(shí)鐘和所有起始停止信號(hào)的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)(發(fā)送或接收)的模式,通過器件地址輸入端A0、A1和A2可以實(shí)現(xiàn)將最多8個(gè)AT24C02器件連接到總線上。本次設(shè)計(jì)采用4個(gè)AT24C02用來儲(chǔ)存4個(gè)溫度傳感器采集到的溫度,用以回顯。只要有溫度較大變化都會(huì)被儲(chǔ)存,隨時(shí)可以通過功能按鍵切換功能查看,也可以將溫度傳回PC機(jī)統(tǒng)計(jì)分析。圖5.1是硬件實(shí)現(xiàn)的效果圖。圖5.1溫度儲(chǔ)存之后統(tǒng)計(jì)分析通過液晶顯示出來管腳定義及接口實(shí)現(xiàn)AT24C02管腳圖及硬件連接電路圖如圖5.2所示。個(gè)引腳功能如下:SCL串行時(shí)鐘AT24C02串行時(shí)鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時(shí)鐘,這是一個(gè)輸入管腳。SDA串行數(shù)據(jù)/地址AT24C02雙向串行數(shù)據(jù)/地址管腳用于器件所有數(shù)據(jù)的發(fā)送或接收,SDA是一個(gè)開漏輸出管腳,可與其它開漏輸出或集電極開路輸出進(jìn)行線或(wire-OR)。A0、A1、A2器件地址輸入端這些輸入腳用于多個(gè)器件級聯(lián)時(shí)設(shè)置器件地址,當(dāng)這些腳懸空時(shí)默認(rèn)值為0。當(dāng)使用AT24C02時(shí)最大可級聯(lián)8個(gè)器件。如果只有一個(gè)AT24C02被總線尋址,這三個(gè)地址輸入腳(A0、A1、A2)可懸空或連接到Vss,如果只有一個(gè)AT24C02被總線尋址這三個(gè)地址輸入腳(A0、A1、A2)必須連接到Vss。WP寫保護(hù)如果WP管腳連接到Vcc,所有的內(nèi)容都被寫保護(hù)只能讀。當(dāng)WP管腳連接到Vss或懸空允許器件進(jìn)行正常的讀/寫操作圖5.2AT24C02硬件連接圖設(shè)計(jì)思想如下:NNY溫度有較大變化?啟動(dòng)24c02監(jiān)控溫度儲(chǔ)存溫度儲(chǔ)存時(shí)間設(shè)計(jì)心得A0、A1、A2器件地址輸入端,應(yīng)該設(shè)計(jì)不一樣以區(qū)分各個(gè)存儲(chǔ)器,一個(gè)24C02對應(yīng)一個(gè)傳感器。上拉電阻4.7K不可以省,不然會(huì)出現(xiàn)問題。6實(shí)時(shí)時(shí)鐘DS1302簡單介紹及接口實(shí)現(xiàn)6.1DS1302簡介DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時(shí)提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。6.2DS1302結(jié)構(gòu)及工作原理DS1302的引腳排列如圖2.1所示,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),SCLK始終是輸入端。圖6.1DS1302引腳圖DS1302的控制字如圖2.2所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。圖6.2DS1302控制字DS1302的數(shù)據(jù)輸入輸出方式(I/O),在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。DS1302一共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見圖2.3。圖6.3DS1302日歷、時(shí)間寄存器此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)(Burst)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。DS1302的接口實(shí)現(xiàn)DS1302的初始化過程非常簡單,在DS1302上電之后先關(guān)閉DS1302的寫保護(hù),接著依據(jù)不同的寄存器地址分別寫入年份、月份、日期,以及需要設(shè)定的時(shí)間,然后啟動(dòng)DS1302的時(shí)鐘振蕩,打開寫保護(hù),這樣DS1302就能正常走時(shí)了,并且不會(huì)因?yàn)檎`操作而干擾到DS1302。當(dāng)DS1302上電后,為了防止系統(tǒng)掉電后重新上電,接著調(diào)用DS1302初始化程序造成時(shí)間丟失,我們在初始化DS1302的時(shí)候先把DS1302當(dāng)前的秒走時(shí)讀出,放如臨時(shí)變量,接著判斷時(shí)間的正確性,如果時(shí)間正確,則把秒走時(shí)回送DS1302,重新啟動(dòng)時(shí)鐘振蕩后關(guān)閉保護(hù);如果時(shí)間不正確,則重新調(diào)用時(shí)間設(shè)置程序。關(guān)閉寫保護(hù)關(guān)閉寫保護(hù)讀出秒數(shù)據(jù)時(shí)間正確?YN回送秒數(shù)據(jù)打開寫保護(hù)芯片上電結(jié)束調(diào)用時(shí)間設(shè)置打開寫保護(hù)結(jié)束圖6.4DS1302初始化此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)(Burst)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。DS1302與單片機(jī)的連接電路圖如圖6.5所示:圖6.5DS1302硬件連接圖備用電池可用來斷電保護(hù),當(dāng)主電源斷開之后,備用電池開始工作,起到備用作用,繼續(xù)保持時(shí)鐘的準(zhǔn)確性溫度上限報(bào)警功能7.1設(shè)計(jì)原理固話報(bào)警的設(shè)計(jì)原理非常簡單,把電話外殼拆出來之后,里面的按鍵其實(shí)就是一個(gè)矩陣鍵盤,為了簡化設(shè)計(jì),這里只說明重?fù)馨存I,因?yàn)橹恍枰負(fù)馨存I就可以工作完全滿足我們功能了。拆出來后下一步就是找出重?fù)苕I對應(yīng)的引腳,先找到重?fù)苕I位置然后通過萬用表就可以測出重?fù)苕I對應(yīng)的兩個(gè)引腳線,這個(gè)過程相當(dāng)簡單,通過肉眼也能很快找出來。其他按鍵找出方法相同,不過本次設(shè)計(jì)無需用到不再闡述。圖7.1固話內(nèi)部電路圖7.2改裝后的固話找出重?fù)苕I引腳之后通過外線引出來,中間通過一個(gè)繼電器連接單片機(jī)既可工作。如圖7.3所示。RC0RC0改裝后的固話溫度監(jiān)控系統(tǒng)繼電器圖7.3固話報(bào)警連接圖上限溫度通過軟件設(shè)計(jì)設(shè)定也可以通過功能按鍵設(shè)定,當(dāng)滿足條件達(dá)到上限溫度,單片機(jī)引腳觸發(fā)高電平引發(fā)繼電器工作既可實(shí)現(xiàn)自動(dòng)重?fù)?。固話的重?fù)芴?hào)碼要事先先設(shè)定好。7.2設(shè)計(jì)心得體會(huì)沒有做不到,只有想不到,一個(gè)非常簡單的小小改裝就可以實(shí)現(xiàn)一個(gè)遠(yuǎn)程報(bào)警功能,其實(shí)生活就是缺少發(fā)現(xiàn)。與PC串口通訊及VB上位機(jī)簡單介紹8.1與PC串口通信目前較為常用的串口有9針串口(DB9)和25針串口(DB25)。最為簡單且常用的是三線制接地法,即地、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)三腳相連,本文只涉及到最為基本的接法,且直接用RS232相連,電路圖如圖8.1所示圖8.1串口通信電路圖本系統(tǒng)串行通信采用異步通信方式。協(xié)議如下:1.一幀數(shù)據(jù)由1位起始位、8位數(shù)據(jù)位、無奇偶校驗(yàn)位、1位停止位共10位組成。
2.波特率設(shè)為119200bps。單片機(jī)串行口按方式1工作,波特率由定時(shí)器T1控制,
PC機(jī)串口波特率通過VB通訊控件的Settings屬性設(shè)置,為保證數(shù)據(jù)傳送的準(zhǔn)確性,兩者的波特率必須一致。單片機(jī)串口初始化:TRISC=0XFF;//設(shè)置C口方向全為輸出SPBRG=0XC;//設(shè)置波特率為119200BPSTXSTA=0X24;//使能串口發(fā)送,選擇高速波特率RCSTA=0X90;//使能串口工作,連續(xù)接收RCIE=0X1;//使能接收中斷GIE=0X1;//開放全局中斷PEIE=0X1;//使能外部中斷8.2上位機(jī)介紹
上位機(jī)利用VisualBasic6.0編程。用VB6.0開發(fā)串行通信程序有兩種法,一種是利用Windows的API函數(shù);另一種是采用VB6.0的通信控件MSComm。利用API函數(shù)編寫串行通信程序較為復(fù)雜,需要掌握大量的通信知識(shí),其優(yōu)點(diǎn)是可實(shí)現(xiàn)的功能更豐富、應(yīng)用面更廣泛,適合于編寫較為復(fù)雜的低層次通信程序。而VB6.0的MSComm通信控件提供了標(biāo)準(zhǔn)的事件處理函數(shù)、事件、方法,并通過控件屬性對串口參數(shù)進(jìn)行設(shè)置,比較容易地解決了串口通信問題。
MSComm是VB6.0提供的ActiveX控件,使用前需將該控件添加到VB工具欄。MSComm控件具有功能完善的串口數(shù)據(jù)發(fā)送和接受功能,有兩種處理通信的方式,即事件驅(qū)動(dòng)方式和查詢方式,事件驅(qū)動(dòng)方式是利用MSComm控件的OnComm事件捕獲并處理通信錯(cuò)誤事件,是處理串行端口交互作用的一種非常有效的方法;查詢方式是通過檢查CommEvent屬性的值來判斷事件和錯(cuò)誤。圖8.2上位機(jī)監(jiān)控界面
下面VB上位機(jī)完整程序:DeclareFunctionGetTickCountLib"kernel32"()AsLongSubTimeDelay(tAsLong)'時(shí)間延遲子程序,單位是毫秒(ms)DimTT&TT=GetTickCount()DoDoEventsLoopUntilGetTickCount()-TT>=tEndSub'等待RS字符串返回,或是時(shí)間到達(dá)'Comm是通信控件名稱'RS是欲等待的字符'DT是最長的等待時(shí)間'正常時(shí)返回值是所得的完整字符串,不正常時(shí)返回值是空字符串FunctionWaitRS(CommAsMSComm,RSAsString,DTAsLong)AsStringDimBuf$,TTAsLongBuf=""TT=GetTickCountDoBuf=Buf&Comm.InputLoopUntilInStr(1,Buf,RS)>0OrGetTickCount-TT>=DTIfInStr(1,Buf,RS)>0ThenWaitRS=BufElseWaitRS=""EndIfEndFunctionOptionExplicitDimNowXAsInteger'現(xiàn)在的X軸位置DimMaxPlotNoAsLong'最長的X軸范圍DimPreValueAsSingle'前一個(gè)測量值''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''當(dāng)選擇通信端口的Combo控件被選中后激活此事件'若用戶改變通信端口時(shí),關(guān)閉通信端口''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''PrivateSubcmbCOM_Click()'若通信端口號(hào)碼和現(xiàn)在的選擇一樣時(shí)就不必理會(huì),直接跳出此子程序IfcmbCOM.ListIndex+1=MSComm1.CommPortThenExitSubTimer1.Enabled=False'關(guān)閉定時(shí)器TimeDelay100IfMSComm1.PortOpenThenMSComm1.PortOpen=False'關(guān)閉通信端口EndIflblMsg.Caption="已停止檢測并關(guān)閉通訊端口"cmdOpenCOM.Enabled=True'允許使用【打開通信端口】按鈕EndSub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''單擊【結(jié)束】按鈕后激活此事件'使用End命令將系統(tǒng)結(jié)束''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''PrivateSubcmdEnd_Click()MSComm1.PortOpen=False'關(guān)閉通信端口EndEndSub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''單擊【打開通信端口】按鈕后激活此事件'將MSComm控件的參數(shù)設(shè)置好,并打開'激活【開始檢測】按鈕''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''PrivateSubcmdOpenCOM_Click()'判斷端口號(hào)碼是否落在1--16之間IfcmbCOM.ListIndex>=0AndcmbCOM.ListIndex<=16ThenMSComm1.CommPort=cmbCOM.ListIndex+1ElseMsgBox"指定通信端口時(shí)發(fā)生錯(cuò)誤!",vbCritical+vbOKOnly,"系統(tǒng)信息"ExitSubEndIf'激活錯(cuò)誤檢測機(jī)制OnErrorGoTocomErrMSComm1.Settings="119200,n,8,1"'設(shè)定通信參數(shù)MSComm1.PortOpen=True'打開通信端口cmdOpenCOM.Enabled=False'將此按鈕設(shè)為禁用狀態(tài)cmdStart.Enabled=True'激活【開始檢測】按鈕lblMsg.Caption="可單擊【開始檢測】按鈕,執(zhí)行檢測的工作。"ExitSubcomErr:MsgBox"打開通信端口時(shí)發(fā)生錯(cuò)誤!請確定通信端口存在且正常。",vbCritical+vbOKOnly,"系統(tǒng)信息"EndSub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''單擊【開始檢測】按鈕后激活此事件'將定時(shí)器激活或關(guān)閉,并顯示對應(yīng)的文字在按鈕上,以指示用戶操作''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''PrivateSubcmdStart_Click()Timer1.Enabled=NotTimer1.EnabledIfTimer1.EnabledThencmdStart.Caption="停止檢測"ElsecmdStart.Caption="開始檢測"lblMsg.Caption="已停止檢測"EndIfEndSub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''窗體的Load事件'輸入圖形暫時(shí)設(shè)為灰色,表示無狀態(tài)信息進(jìn)入'將通訊端口號(hào)碼及站號(hào)填入Combo控件;并默認(rèn)二者的選項(xiàng)是第一個(gè)''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''PrivateSubForm_Load()Dimi%MaxPlotNo=100cmbCOM.ClearcmbCOM.AddItem"COM1"cmbCOM.AddItem"COM2"cmbCOM.AddItem"COM3(USB)"cmbCOM.AddItem"COM4(USB)"cmbCOM.AddItem"COM5"cmbCOM.AddItem"COM6"cmbCOM.AddItem"COM7"cmbCOM.AddItem
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)工程師的職業(yè)發(fā)展路徑與試題及答案
- 現(xiàn)代網(wǎng)絡(luò)工程技術(shù)應(yīng)用試題及答案
- 網(wǎng)絡(luò)安全防護(hù)試題及答案總結(jié)
- 備考過程中的自我反思與提升試題及答案
- 手機(jī)備考的軟件設(shè)計(jì)師考試試題與答案
- 軟件設(shè)計(jì)師考試回顧與試題及答案
- 網(wǎng)絡(luò)應(yīng)用性能調(diào)優(yōu)試題及答案
- 機(jī)電工程多元化發(fā)展策略的試題及答案
- 敏捷開發(fā)環(huán)境中的測試解決方案試題及答案
- 機(jī)電工程項(xiàng)目管理重要知識(shí)點(diǎn)試題及答案
- 開封中學(xué)教師招聘2022年考試真題及答案解析二2
- 客戶溝通與交流課件
- 國家電網(wǎng)招投標(biāo)培訓(xùn)課件
- BVI公司法全文(英文版)
- 社會(huì)責(zé)任手冊-完整版
- 移動(dòng)基站物業(yè)協(xié)調(diào)方案
- 技術(shù)服務(wù)合同(中國科技部范本)
- 城市軌道交通客運(yùn)組織電子教案(全)完整版課件整套教學(xué)課件
- GB∕T 33917-2017 精油 手性毛細(xì)管柱氣相色譜分析 通用法
- 高壓氧治療操作規(guī)程以及護(hù)理常規(guī)
- 高中人教物理選擇性必修二專題05 單雙桿模型-學(xué)生版
評論
0/150
提交評論