(整理)溫度檢測模塊_第1頁
(整理)溫度檢測模塊_第2頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.專業(yè)資料.石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院電子信息工程專業(yè)單片機(jī)課程設(shè)計(jì)報(bào)告題目溫度檢測模塊設(shè)計(jì)_姓名0000000_學(xué)號00000000000000000_班級00000000000_ 指導(dǎo)教師 000000000000.專業(yè)資料.2013 年 7 月 4 日要求:1 .指導(dǎo)教師按照課程設(shè)計(jì)大綱要求完成學(xué)生課程設(shè)計(jì)指導(dǎo)工 作。2.課程設(shè)計(jì)任務(wù)書由指導(dǎo)教師照大綱要求填寫,內(nèi)容要全面。3.課程設(shè)計(jì)報(bào)告由參加本學(xué)生填寫。課程設(shè)計(jì)結(jié)束時(shí)交指導(dǎo)教師。4.指導(dǎo)教師要根據(jù)每一位學(xué)生課程設(shè)計(jì)任務(wù)完成情況 ,認(rèn)真審 核設(shè)計(jì)報(bào)告,并在課程設(shè)計(jì)結(jié)束時(shí),給出客觀、準(zhǔn)確的評語和 成績。5.課程設(shè)計(jì)任務(wù)書和報(bào)告要語言流暢

2、,圖表正確規(guī)范。6.本表要用鋼筆、圓柱筆填寫或打印,字跡工整。.專業(yè)資料.班級 4101090102 姓名 0000000 學(xué)號 0000000000000000000課程設(shè)計(jì)題目_溫度檢測模塊設(shè)計(jì)_課程設(shè)計(jì)起止日期2013 年 6 月 17 日 至 2013 年 7 月 5 日實(shí)習(xí)地點(diǎn) 實(shí)驗(yàn)室 106課程設(shè)計(jì)內(nèi)容與要求(包括:設(shè)計(jì)任務(wù)及要求、設(shè)計(jì)原理、所需儀器設(shè)備、驗(yàn)收標(biāo)準(zhǔn))及格:矩陣式鍵盤設(shè)置 4 個(gè)按鍵,初始時(shí),4 位數(shù)碼管無顯示。當(dāng) 1 號鍵按下時(shí),第一位數(shù)碼管顯示 1,并閃爍兩次;當(dāng) 2 號鍵按下時(shí),第二位數(shù)碼管顯示 2,并閃爍兩 次;3號鍵、4 號鍵同樣功能。中:在完成及格任務(wù)的基

3、礎(chǔ)上,能對來自熱敏電阻傳感器上的信號進(jìn)行 A/D 轉(zhuǎn)換,并在數(shù)碼管上實(shí)時(shí)顯示采集的電壓值。設(shè)置開始、結(jié)束兩個(gè)按鍵控制采集過程。良:將顯示的電壓值轉(zhuǎn)換成顯示溫度值,并能夠通過按鍵設(shè)定校正值;優(yōu):將所有的按鍵功能通過紅外遙控器實(shí)現(xiàn)。(開始、結(jié)束和校正值設(shè)定).專業(yè)資料.指導(dǎo)教師:董建彬2013 年 6 月 17 日.專業(yè)資料.課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)原理與技術(shù)方法:(包括:電路工作原理分析與原理圖、元器件選擇、電路調(diào)試方法與結(jié)果說明;軟件設(shè)計(jì)說明書與流程圖、軟件源程序代碼、軟件調(diào)試方法與運(yùn)行結(jié)果說明。)fSiOEFt OP1?U(J20 Irq.=0 Oii+-F3J=L !t? 6-1J=L*0

4、Oipfeq*fka -q.0 P訶i -q.*q*5 CP)1鞏1PDBDQIPO.IMIPD卻利測利點(diǎn)卜PDiffli和訊E曲FD.W1P2WP1W9F31M0psiFIBIIF3.M3邑粗硼FifllfltPJ1WIPIOfEp儷PIJAEMjntDPI!帕釉PIJF3HFll皿0PI5PHUPitpjdJItptjF3.1Axraa五TTT10Hlj衛(wèi)丄圧1(衛(wèi)R? ikU3GL如ECRAMJUQ間麗Ala燦TSTlffi=08CMM.專業(yè)資料.1. 電路工作原理分析:89C52 芯片 P0 口,即 P0.0-P0.7 連接到鍵盤的 D0-D7 , P0 口既是 8 數(shù)據(jù)口,又是16

5、位地址口的低 8 位。同時(shí) P0 口連接八段數(shù)碼管作為段選信號。89C52 芯片 P2.7 與 PCF8951 的 SDA 相連做為位鎖存,P2.6 與 PCF8951 的 SCL 相連作為段選。89C52 芯片 P3.2 與紅外相連作為外部中斷。1.1 89C52 芯片說明:(1) 主電源引腳(2 根)VCC(Pin40):電源輸入,接+ 5V 電源GND(Pin20):接地線(2) 外接晶振引腳(2 根)XTAL1(Pin19):片內(nèi)振蕩電路的輸入端XTAL2(Pin20):片內(nèi)振蕩電路的輸出端(3) 控制引腳(4 根)RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn) 2 個(gè)機(jī)器周期的高電

6、平將使單片機(jī)復(fù)位。ALE/PROG(Pin30):地址鎖存允許信號PSEN(Pin29):外部存儲器讀選通信號EA/VPP(Pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令。.專業(yè)資料.(4)可編程輸入/輸出引腳(32 根)STC89C52 單片機(jī)有 4 組 8 位的可編程 I/O 口,分別位 PO、P1、P2、P3 口,每個(gè) 口有8 位(8 根引腳),共 32 根。PO 口( Pin39 Pin32): 8 位雙向 I/O 口線,名稱為 P0.0P0.7P1 口(Pin1Pin8): 8 位準(zhǔn)雙向 I/O 口線,名稱為 P1.0P1.

7、7P2 口(Pin21Pin28): 8 位準(zhǔn)雙向 I/O 口線,名稱為 P2.0P2.7P3 口(Pin10Pin17): 8 位準(zhǔn)雙向 I/O 口線,名稱為 P3.0P3.7STC89C52 主要功能如表一所示。表 1 STC89C52 主要功能主要功能特性兼容 MCS51 指令系統(tǒng)8K 可反復(fù)擦寫 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 級加密位低功耗空閑和掉電模式軟件設(shè)置睡眠和喚醒功能1.2 PCF8

8、951 芯片說明:PCF8591 是一個(gè)單片集成、單獨(dú)供電、低功耗、8-bit CMOS 數(shù)據(jù)獲取器件。PCF8591 具有 4 個(gè)模擬輸入、1 個(gè)模擬輸出和 1 個(gè)串行 I2C 總線接口。.專業(yè)資料.PCF8591 的 3 個(gè)地址引腳 A0, A1 和 A2 可用于硬件地址編程,允許在同個(gè) I2C.專業(yè)資料.總線上接入 8 個(gè) PCF8591 器件,而無需額外的硬件。在 PCF8591 器件上輸入輸 出的地址、控制和數(shù)據(jù)信號都是通過雙線雙向I2C 總線以串行的方式進(jìn)行傳輸 1.2.1 特性(1) 單獨(dú)供電(2) PCF8591 的操作電壓范圍 2.5V-6V(3) 低待機(jī)電流(4)通過 I2

9、C 總線串行輸入/輸出(5)PCF8591 通過 3 個(gè)硬件地址引腳尋址(6)PCF8591 的采樣率由 I2C 總線速率決定(7)4 個(gè)模擬輸入可編程為單端型或差分輸入(8)自動增量頻道選擇(9)PCF8591 的模擬電壓范圍從 VSS 到 VDD(10)PCF8591 內(nèi)置跟蹤保持電路(11)8-bit 逐次逼近 A/D 轉(zhuǎn)換器(12)通過 1 路模擬輸出實(shí)現(xiàn) DAC 增益紅外模塊說明:通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成。應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作,如圖 1 所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED 紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。.專業(yè)

10、資料.圖二紅外遙控系統(tǒng)圖接收電路可以使用一種集紅外線接收和放大于一體的一體化紅外線接收器 ,不需 要任何外接元件,就能完成從紅外線接收到輸出與 TTL 電平信號兼容的所有工作,而 體積和普通的塑圭寸三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸 。接收器對外只有 3 個(gè)引腳:Out、GND、Vcc 與單片機(jī)接口非常方便,如圖 2(1)脈沖信號輸出接,直接接單片機(jī)的 IO 口。(2)GND 接系統(tǒng)的地線(0V);(3)Vcc 接系統(tǒng)的電源正極(+5V);2. 程序設(shè)計(jì)思路及程序說明2.1 及格檔2.1.1 要求矩陣式鍵盤設(shè)置 4 個(gè)按鍵,初始時(shí),4 位數(shù)碼管無顯示。當(dāng) 1 號鍵按下時(shí),第

11、一位數(shù) 碼管顯示 1,并閃爍兩次;當(dāng) 2 號鍵按下時(shí),第二位數(shù)碼管顯示并閃爍兩次;3 號鍵、 4 號鍵同樣功能。2.1.2 設(shè)計(jì)思路.專業(yè)資料.對鍵盤掃描確定鍵值,可實(shí)現(xiàn)按下鍵數(shù)碼管顯示相應(yīng)的鍵值,并通過 for 循環(huán)控 制閃爍的次數(shù)。其中按鍵抖動問題可以通過延時(shí)程序解決。2.1.3 流程圖圖四及格檔流程圖2.1.4 程序代碼#include / 包含頭文件#defi ne uchar un sig ned char#defi ne uint un sig ned int/子函數(shù)聲明uint sca nkey();void delay( uint x);void display(key);vo

12、id display1(key);/全局變量聲明.專業(yè)資料.uchar code wei=0 xfe,0 xfd,0 xfb,0 xf7;uchar code dua n=0 xf9,0 xa4,0 xb0,0 x99;uint hang;uint lie;/延時(shí)子函數(shù)void delay( uint x)uint t;while(x-)for(t=0;t120;t+);/鍵盤掃描子函數(shù)uint sea nkey()P 仁 0 xfe; /只掃面一行switch(P1)case 0 xee: lie=1;break;case 0 xde: lie=2;break;case 0 xbe: lie

13、=3;break;case 0 x7e: lie=4;break;.專業(yè)資料.default: break;while(P1 &0 xf0)!=0 xf0); / 無鍵按下時(shí)return (lie);/顯示子函數(shù)void display(key)uint i,j;for(j=0;j2;j+) /for 循環(huán)控制閃爍次數(shù)for(i=0;i100;i+)/ 通過循環(huán)延時(shí)P0=duankey-1; / 發(fā)送段碼P2=weikey-1; 發(fā)送位碼delay(4);for(i=0;i100;i+)P2=0 xff; /關(guān)閉所有數(shù)碼管并延時(shí)delay(4);.專業(yè)資料./顯示子函數(shù)void dis

14、playl(key)if(key!=O)P2=weikey-1; 發(fā)送位碼delay(1);P0=duankey-1; / 發(fā)送段碼delay(2);else P2=0 xff;/ 關(guān)數(shù)碼管/主函數(shù)void mai n()uint key=0;while(1)P 仁 0 xfe;if(P1!=0 xfe)/判斷是否有鍵按下.專業(yè)資料.delay (100);/ 延時(shí)去抖if(P1!=0 xfe)/確實(shí)有鍵按下key=sca nkey();/ 調(diào)掃描程序display(key); /調(diào)顯示程序else displayl(key); /無鍵按下時(shí)調(diào)顯示 1 程序 2.2 中檔2.2.1 要求矩陣式

15、鍵盤設(shè)置 4 個(gè)按鍵,初始時(shí),4 位數(shù)碼管無顯示。當(dāng) 1 號鍵按下時(shí),第一 位數(shù)碼管顯示 1,并閃爍兩次;當(dāng) 2 號鍵按下時(shí),第二位數(shù)碼管顯示并閃爍兩次;3 號鍵、4 號鍵同樣功能。并能對來自熱敏電阻傳感器上的信號進(jìn)行A/D 轉(zhuǎn)換,并在數(shù)碼管上實(shí)時(shí)顯示采集的電壓值。設(shè)置開始、結(jié)束兩個(gè)按鍵控制采集過程。2.2.2 設(shè)計(jì)思路對鍵盤掃描確定鍵值,可實(shí)現(xiàn)按下鍵數(shù)碼管顯示相應(yīng)的鍵值,并通過 for 循環(huán)控 制閃爍.專業(yè)資料.的次數(shù)。其中按鍵抖動問題可以通過延時(shí)程序解決 。PCF8591 將模擬量轉(zhuǎn)換 為數(shù)字量,即可將輸入模擬電壓 0 5V 轉(zhuǎn)換為 8 位的數(shù)字量,共28,所以每份為5=0.02V,將模擬

16、量轉(zhuǎn)化成數(shù)字量并聽過計(jì)算分別送入四個(gè)數(shù)碼管,即可實(shí)現(xiàn)數(shù)碼255管顯示采集的電壓值。.專業(yè)資料.223 流程圖圖五中檔流程圖2.2.4 程序代碼/*-內(nèi)容:溫度測量模塊-*/#in elude #i nclude vintrin s.h#define AddWr 0 x90/ 寫數(shù)據(jù)地址#define AddRd 0 x91/ 讀數(shù)據(jù)地址#defi ne KeyPort P1.專業(yè)資料.#defi ne_Nop() _nop_() / 定義空指令sbit SDA=P2A7;sbit SCL=P2A6;/*-全局變量聲明- */un sig ned char codedofly_Dua nMa=0

17、 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff; 顯示段碼值 09un sig ned char code dofly_WeiMa4=0 xfe,0 xfd,0 xfb,0 xf7;分別對應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼un sig ned char TempData4=0 xff,0 xff,0 xff,0 xff; /存儲顯示值的全局變量un sig ned char j,ha ng,lie;bit ack;bit ReadADFlag;/*-子函數(shù)聲明- */void DelayUs2x( un sig ned

18、char t);void Display (un sig ned char FirstBit,u nsig ned char Num);void Ini t_Timer0(void);.專業(yè)資料.void TimerO_isr(void);void Start_l2c();void Stop_l2c();void NoAck_l2c(void);voidSen dByte( un sig ned char c);un sig ned char RcvByte();un sig ned char ReadADC( un sig ned char Chi);/*-延時(shí)子程序- */void Del

19、ayUs2x( un sig ned char t)while(-t);void DelayMs( un sig ned char t)while(t-)/大致延時(shí) 1mSDelayUs2x(245);DelayUs2x(245);.專業(yè)資料./*-鍵盤掃描子程序- */unsigned char keyscan()/ 鍵盤掃描函數(shù),KeyPort=OxOf;if(KeyPort!=OxOf) DelayMs(10);if(KeyPort!=0 x0f)KeyPort=0 x0f;switch(KeyPort)case 0 x0e: han g=1;break;case 0 x0d: han

20、g=2;break;case 0 x0b: han g=3;break;case 0 x07: han g=4;break;default: break;DelayMs(5);KeyPort=0 xf0;使用行列逐級掃描法.專業(yè)資料.switch(KeyPort)case OxeO: lie=1;break;case OxdO: lie=2;break;case 0 xb0: lie=3;break;case 0 x70: lie=4;break;default: break;while(KeyPort&0 xf0)!=0 xf0);return (ha ng-1)*4+lie-1);

21、 return (17);void Display (un sig ned char FirstBit, un sig ned char Num)static un sig ned char i=0;P0=0 xff; /清空數(shù)據(jù),防止有交替重影P2=dofly_WeiMai+FirstBit; / 取位碼.專業(yè)資料.PO=TempDatai; /取顯示數(shù)據(jù),段碼i+;if(i=Num)i=0;/*-定時(shí)器初始化子程序- */void Ini t_Timer0(void)TMOD |= 0 x01;/使用模式 1, 16 位定時(shí)器,使用|符號可以在使用多個(gè)定時(shí)器時(shí)不受影響/TH0=0 x00;

22、/給定初值/TL0=0 x00;EA=1;/總中斷打開ET0=1;/定時(shí)器中斷打開TR0=1;/定時(shí)器開關(guān)打開/*-定時(shí)器中斷子程序.專業(yè)資料.- */void TimerO_isr(void) interrupt 1static un sig ned int num;TH0=(65536-2000)/256;/ 重新賦值 2msTL0=(65536-2000)%256;Display(0,4);/調(diào)用數(shù)碼管掃描nu m+;if(num=50)/ 大致 100msnum=0;ReadADFIag=1; / 讀標(biāo)志位置 1/*-啟動總線- */void Start_l2c()SDA=1;/發(fā)送起

23、始條件的數(shù)據(jù)信號_Nop();SCL=1;.專業(yè)資料._Nop(); II 起始條件建立時(shí)間大于 4.7us,延時(shí)_Nop();_Nop();_Nop();_Nop();SDA=O;II 發(fā)送起始信號_Nop(); II 起始條件鎖定時(shí)間大于 4 卩_Nop();_Nop();_Nop();_Nop();SCL=O; II 鉗住 I2C 總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)_Nop();_Nop();I*-結(jié)束總線- *Ivoid Stop_l2c()SDA=0; II 發(fā)送結(jié)束條件的數(shù)據(jù)信號.專業(yè)資料.Nop();/發(fā)送結(jié)束條件的時(shí)鐘信號SCL=1;/結(jié)束條件建立時(shí)間大于 4 卩_Nop();_Nop(

24、);_Nop();_Nop();_Nop();SDA=1;/發(fā)送 I2C 總線結(jié)束信號_Nop();_Nop();_Nop();_Nop();/*-寫入一個(gè)字節(jié)到指定地址- */void Sen dByte( un sig ned char c)un sig ned char BitC nt;for(BitCnt=O;BitCnt8;BitCnt+)/ 要傳送的數(shù)據(jù)長度為 8 位.專業(yè)資料.專業(yè)資料.if(cBitC nt)&0 x80)SDA=1;/ 判斷發(fā)送位else SDA=0;_Nop();SCL=1;/置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位_Nop();_Nop();/保證時(shí)

25、鐘高電平周期大于 4 卩_Nop();_Nop();_Nop();SCL=0;_Nop();_Nop();SDA=1;8 位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA=1)ack=0;else ack=1;/判斷是否接收到應(yīng)答信號.專業(yè)資料.SCL=O;_Nop();_Nop();/*-從指定地址讀取一個(gè)字節(jié)數(shù)據(jù)-*/un sig ned char RcvByte()un sig ned char retc;un sig ned char BitC nt;retc=0;SDA=1;/置數(shù)據(jù)線為輸入方式for(

26、BitC nt=0;BitC nt8;BitC nt+)_Nop();SCL=0;/置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位_Nop();_Nop();/時(shí)鐘低電平周期大于 4.7us_Nop();_Nop();.專業(yè)資料._Nop();SCL=1;/置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效_Nop();_Nop();retc=retc1;if(SDA=1)retc=retc+1; / 讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入 retc 中_Nop();_Nop();SCL=0;_Nop();_Nop();return(retc);/*-發(fā)送非應(yīng)答- */void NoAck_l2c(void)SDA=1;_Nop();.專業(yè)資

27、料._Nop();_Nop();SCL=1;_Nop();_Nop();/時(shí)鐘低電平周期大于 4 卩_Nop();_Nop();_Nop();SCL=0;/清時(shí)鐘線,鉗住 I2C 總線以便繼續(xù)接收_Nop();_Nop();/*-主程序- */mai n()un sig ned char num=O,nu m 仁 O,nu m2=17,k,i;int nu m3=0,num4=0;Ini t_Timer0();DelayMs(20);while (1)/ 主循環(huán).專業(yè)資料.nu m2=keysca n();saomiao:if(nu m2=0)for(j=0;j2;j+)閃爍兩次TempDat

28、a0=0 xff;/ 關(guān)閉數(shù)碼管TempData1=0 xff;TempData2=0 xff;TempData3=0 xff;DelayMs(500);DelayMs(500);TempData0=dofly_Dua nMa1;將段碼 1 送入第一個(gè)數(shù)碼管TempData1=0 xff;TempData2=0 xff;TempData3=0 xff;DelayMs(500);if(nu m2=1).專業(yè)資料.for(j=0;j2;j+)閃爍兩次TempData0=0 xff;/ 關(guān)閉數(shù)碼管TempData1=0 xff;TempData2=0 xff;TempData3=0 xff;Dela

29、yMs(500);DelayMs(500);TempData0=0 xff;TempData1=dofly_DuanMa2;/ 將段碼 2 送入第二個(gè)數(shù)碼管TempData2=0 xff;TempData3=0 xff;DelayMs(500);if(nu m2=2)for(j=0;j2;j+)閃爍兩次TempDataO=Oxff; / 關(guān)閉數(shù)碼管.專業(yè)資料.TempData1=0 xff;TempData2=0 xff;TempData3=0 xff;DelayMs(500);DelayMs(500);TempData0=0 xff;TempData1=0 xff;TempData2=dof

30、ly_DuanMa3;/將段碼 3 送入第三個(gè)數(shù)碼管TempData3=0 xff;DelayMs(500);if(nu m2=3)for(j=0;j2;j+)閃爍兩次TempData0=0 xff; / 關(guān)閉數(shù)碼管TempData1=0 xff;TempData2=0 xff;TempData3=0 xff;DelayMs(500);.專業(yè)資料.DelayMs(500);TempData0=0 xff;TempData1=0 xff;TempData2=0 xff;TempData3=dofly_DuanMa4; / 將段碼 4 送入第四個(gè)數(shù)碼管DelayMs(500);if(nu m2=4

31、)k=1;while(k)num2=keysca n();/調(diào)鍵掃子程序if(ReadADFIag)ReadADFlag=0;/讀標(biāo)志位為零EA=0;num=ReadADC(1);EA=1;/A/D 采樣前關(guān)中斷,采樣結(jié)束后開中斷.專業(yè)資料.num 仁 n um*5*100/255%10;/計(jì)算第一個(gè)數(shù)碼管的段碼num=num*5*10/255;/模擬量轉(zhuǎn)化成數(shù)字量TempData0=0 xff;/ 數(shù)碼管關(guān)TempData1=dofly_Dua nM a( nu m-( num/100)*100)/10&0 x7f;/管段碼,顯示小數(shù)點(diǎn)TempData2=dofly_Dua nMan

32、 um%10; 計(jì)算第二個(gè)數(shù)碼管段碼TempData3=dofly_Dua nManu m1;if(nu m2=0| nu m2=1| nu m2=2| nu m2=3| nu m2=5| nu m2=6)goto saomiao;/ 跳出循環(huán)if(num2=5)/實(shí)現(xiàn)電壓保持TempData0=0 xff;TempData1=dofly_Dua nM a( nu m-( nu m/100)*100)/10&0 x7f;TempData2=dofly_Dua nManu m%10;TempData3=dofly_Dua nM a num1;if(nu m2=6)計(jì)算第三個(gè)數(shù)碼.專業(yè)資料

33、.TempDataO=Oxff;/關(guān)閉所有數(shù)碼管TempData1=0 xff;TempData2=0 xff;TempData3=0 xff;/*-讀 AD 轉(zhuǎn)值程序- */un sig ned char ReadADC( un sig ned char Chi)un sig ned char Vai;Start_l2c();Sen dByte(AddWr);if(ack=O)return(O);Sen dByte(Chi);if(ack=O)return(O);Start_I2c();Sen dByte(AddRd);/啟動總線/發(fā)送器件地址/發(fā)送器件子地址.專業(yè)資料.if(ack=O)r

34、eturn(O);Val=RcvByte();NoAck_l2c();/發(fā)送非應(yīng)位Stop_l2c();/結(jié)束總線return(Val);2.3 良檔2.3.1 要求矩陣式鍵盤設(shè)置 4 個(gè)按鍵,初始時(shí),4 位數(shù)碼管無顯示。當(dāng) 1 號鍵按下時(shí),第一 位數(shù)碼管顯示 1,并閃爍兩次;當(dāng) 2 號鍵按下時(shí),第二位數(shù)碼管顯示 2,并閃爍兩次; 3 號鍵、4 號鍵同樣功能。能對來自熱敏電阻傳感器上的信號進(jìn)行 A/D 轉(zhuǎn)換,并在數(shù) 碼管上實(shí)時(shí)顯示采集的電壓值。設(shè)置開始、結(jié)束兩個(gè)按鍵控制采集過程。將顯示的電 壓值轉(zhuǎn)換成顯示溫度值,并能夠通過按鍵設(shè)定校正值。2.3.2 設(shè)計(jì)思路對鍵盤掃描確定鍵值, 可實(shí)現(xiàn)按下鍵數(shù)

35、碼管顯示相應(yīng)的鍵值, 并通過 for 循環(huán)控制閃 爍的次數(shù)。其中按鍵抖動問題可以通過延時(shí)程序解決。PCF8591 將模擬量轉(zhuǎn)換為數(shù)字量,即可將輸入模擬電壓0 -=0.02V-5V 轉(zhuǎn)換為 8 位的數(shù)字量,共28,所以每份為255將模擬量轉(zhuǎn)化成數(shù)字量并聽過計(jì)算分別送入四個(gè)數(shù)碼管,即可實(shí)現(xiàn)數(shù)碼管顯示采集的 電壓值。.專業(yè)資料.通過溫度電阻的關(guān)系,電阻電壓的關(guān)系制作溫度電壓表,用查表的的方法實(shí) 現(xiàn)電壓溫度的轉(zhuǎn)化顯示溫度。并設(shè)定加減鍵對溫度進(jìn)行矯正。.專業(yè)資料.233.流程圖2.3.4 程序代碼 /*內(nèi)容:溫度測量模塊- */ #in elude #i nclude vintrin s.h#defi

36、ne KeyPort P1#defi ne AddWr 0 x90#defi ne AddRd 0 x91#define _Nop() _nop_()/ 定義空指令/寫數(shù)據(jù)地址/讀數(shù)據(jù)地址圖六中檔流程圖.專業(yè)資料.sbit SDA=P2A7;/定義鎖存使能端口 位鎖存sbit SCL=P2A6;定義鎖存使能端口 段鎖存bit ack;bit ReadADFlag;/*-全局變量聲明- */un sig ned char j,ha ng,lie;un sig ned char code dofly_Dua nM a=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x8

37、2,0 xf8,0 x80,0 x90,0 xff;顯示段碼值 09un sig ned char code dofly_WeiMa4=0 xfe,0 xfd,0 xfb,0 xf7;分別對應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼un sig ned char TempData4=0 xff,0 xff,0 xff,0 xff; /存儲顯示值的全局變量un sig ned int code wen du=6067,6043,6019,5995,5971,5947,5923,5899,5875,5851,5827,5803,5778,5755,5731,5706,5682,5658,5634,5609,558

38、5,5561,5536,5512,5487,5463,5438,5414,5389,5365,5341,5316,5292,5267,5242,5218,5193,5169,5144,5119,5095,5070,5045,5020,4996,4971,4946,4921,4896,4872,4847,4822,4797,4772,4747,4722,4697,4672,4647,4622,4597,4571,4546,4521,4495,4470,4445,4419,4393,4368,4342,4316,4290,4264,4238,4212,4186,4159,4133,4106,407

39、9,4052,4025,3997,4081,4054,4028,4012,3975,3949,3922,3896,3869,3843,3817,3791,3764,3738,3711,3684,3658,3631,3605,3578,3551,3525,3498,3471,3444,3417,3390,3363,3336,3309,3282,3255,3227,3200,3173,3145,.專業(yè)資料.3117,3089,3061,3032,3004,2976,2947,2918,2888,2859,2829,2799,2769,2738,2707,2676,2644,2612,2579,25

40、46,2513,2479,2444,2410,2374,2339,2302,2266,2229,2192,2154,2118,2080,2043,2007,1971,1936,1903,1871,1842,1817,1795,1779,1768,1766,1773,1792,1825;/*-子函數(shù)聲明- */void DelayUs2x( un sig ned char t);void Display (un sig ned char FirstBit,u nsig ned char Num);void Ini t_Timer0(void);void Timer0_isr(void);void

41、 Start_I2c();void Stop_l2c();void NoAck_l2c(void);voidSen dByte( un sig ned char c);un sig ned char RcvByte();un sig ned char ReadADC( un sig ned char Chl);/*-延時(shí)子程序.專業(yè)資料.- */void DelayUs2x( un sig ned char t)while(-t);void DelayMs( un sig ned char t)while(t-)/大致延時(shí) 1mSDelayUs2x(245);DelayUs2x(245);/*

42、-鍵盤掃描子程序- */unsigned char keyscan()/ 鍵盤掃描函數(shù)KeyPort=0 x0f;if(KeyPort!=OxOf) DelayMs(10);使用行列逐級掃描法.專業(yè)資料.if(KeyPort!=OxOf)KeyPort=0 x0f;switch(KeyPort)case OxOe: han g=1;break;case 0 x0d: han g=2;break;case 0 x0b: han g=3;break;case 0 x07: han g=4;break; default: break;DelayMs(5);KeyPort=0 xf0;switch(K

43、eyPort)case 0 xe0: lie=1;break;case 0 xd0: lie=2;break;case 0 xb0: lie=3;break;case 0 x70: lie=4;break; default: break;while(KeyPort&0 xfO)!=OxfO);return (ha ng-1)*4+lie-1);.專業(yè)資料. return (17);/*-顯示子程序- */void Display (un sig ned char FirstBit, un sig ned char Num) static un sig ned char i=0;P0=0

44、 xff;/清空數(shù)據(jù),防止有交替重影P2=dofly_WeiMai+FirstBit; / 取位碼P0=TempDatai; /取顯示數(shù)據(jù),段碼i+;if(i=Num)i=0;.專業(yè)資料./*-定時(shí)器初始化子程序- */void Ini t_TimerO(void)TMOD |= 0 x01;/使用模式 1 ,16 位定時(shí)器,使用|符器時(shí)不受影響/TH0=0 x00;/給定初值/TL0=0 x00;EA=1;/總中斷打開ET0=1;/定時(shí)器中斷打開TR0=1;/定時(shí)器開關(guān)打開/*-定時(shí)器中斷子程序- */ void Timer0_isr(void) interrupt 1 static un

45、sig ned int num;TH0=(65536-2000)/256;/ 重新賦值 2msTL0=(65536-2000)%256;Display(0,4);/調(diào)用數(shù)碼管掃描可以在使用多個(gè)定時(shí).專業(yè)資料.nu m+;if(num=50)/ 大致 100msnum=0;ReadADFIag=1; / 讀標(biāo)志位置 1/*-啟動總線- */void Start_l2c()SDA=1;/發(fā)送起始條件的數(shù)據(jù)信號_Nop();SCL=1;_Nop();/起始條件建立時(shí)間大于 4.7us,延時(shí)_Nop();_Nop();_Nop();_Nop();SDA=O;/發(fā)送起始信號_Nop();/起始條件鎖定時(shí)

46、間大于 4 卩.專業(yè)資料._Nop();_Nop();_Nop();_Nop();SCL=O; /鉗住 I2C 總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)_Nop();_Nop();/*-結(jié)束總線- */void Stop_l2c()SDA=0;/發(fā)送結(jié)束條件的數(shù)據(jù)信號_Nop();/發(fā)送結(jié)束條件的時(shí)鐘信號SCL=1;/結(jié)束條件建立時(shí)間大于 4 卩_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1; /發(fā)送 I2C 總線結(jié)束信號.專業(yè)資料._Nop();_Nop();_Nop();_Nop();/*-寫入一個(gè)字節(jié)到指定地址-*/void Sen dByte( un sig ned char c)un sig ned char BitC nt;for(BitCnt=O;BitCnt8;BitCnt+)/ 要傳

溫馨提示

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

評論

0/150

提交評論