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

下載本文檔

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

文檔簡(jiǎn)介

1、 石家莊經(jīng)濟(jì)學(xué)院信息工程學(xué)院 電子信息工程專業(yè) 單片機(jī)課程設(shè)計(jì)報(bào)告題 目 溫度檢測(cè)模塊設(shè)計(jì) 姓 名 0000000 學(xué) 號(hào) 00000000000000000 班 級(jí) 指導(dǎo)教師 000000000000 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)確的評(píng)語和成績(jī)。5課程設(shè)計(jì)任務(wù)書和報(bào)告要語言流暢,圖表正確規(guī)范。6本表要用鋼筆、圓柱筆填寫或打印,

2、字跡工整。 班級(jí) 4101090102 姓名 0000000 學(xué)號(hào) 0000000000000000000 課程設(shè)計(jì)題目 溫度檢測(cè)模塊設(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號(hào)鍵按下時(shí),第一位數(shù)碼管顯示1,并閃爍兩次;當(dāng)2號(hào)鍵按下時(shí),第二位數(shù)碼管顯示2,并閃爍兩次;3號(hào)鍵、4號(hào)鍵同樣功能。中:在完成及格任務(wù)的基礎(chǔ)上,能對(duì)來自熱敏電阻傳感器上的信號(hào)進(jìn)行A/D轉(zhuǎn)換,并在數(shù)碼管上實(shí)時(shí)顯示采集的電壓值。設(shè)置開始、結(jié)

3、束兩個(gè)按鍵控制采集過程。良:將顯示的電壓值轉(zhuǎn)換成顯示溫度值,并能夠通過按鍵設(shè)定校正值; 優(yōu):將所有的按鍵功能通過紅外遙控器實(shí)現(xiàn)。(開始、結(jié)束和校正值設(shè)定) 指導(dǎo)教師: 董建彬 2013年 6 月 17 日課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)原理與技術(shù)方法:(包括:電路工作原理分析與原理圖、元器件選擇、電路調(diào)試方法與結(jié)果說明;軟件設(shè)計(jì)說明書與流程圖、軟件源程序代碼、軟件調(diào)試方法與運(yùn)行結(jié)果說明。)1. 電路工作原理分析:89C52芯片P0口,即P0.0-P0.7連接到鍵盤的D0-D7,P0口既是8數(shù)據(jù)口,又是16位地址口的低8位。同時(shí)P0口連接八段數(shù)碼管作為段選信號(hào)。89C52芯片P2.7與PCF8951的SD

4、A相連做為位鎖存,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ī)器周期的高電平將使單片機(jī)復(fù)位。ALE/PROG(Pin30):地址鎖存允許信號(hào)PSEN(Pin29):外部存儲(chǔ)器讀選通信號(hào)EA/VPP(Pin31):程序存儲(chǔ)器的內(nèi)外部選通,

5、接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令。(4)可編程輸入/輸出引腳(32根)STC89C52單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32根。PO口(Pin39Pin32):8位雙向I/O口線,名稱為P0.0P0.7P1口(Pin1Pin8):8位準(zhǔn)雙向I/O口線,名稱為P1.0P1.7 P2口(Pin21Pin28):8位準(zhǔn)雙向I/O口線,名稱為P2.0P2.7 P3口(Pin10Pin17):8位準(zhǔn)雙向I/O口線,名稱為P3.0P3.7STC89C52主要功能如表一所示。表1 STC89C52主要功能主要功能

6、特性兼容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級(jí)加密位低功耗空閑和掉電模式軟件設(shè)置睡眠和喚醒功能1.2 PCF8951芯片說明:PCF8591是一個(gè)單片集成、單獨(dú)供電、低功耗、8-bit CMOS數(shù)據(jù)獲取器件。PCF8591具有4個(gè)模擬輸入、1個(gè)模擬輸出和1個(gè)串行I2C總線接口。PCF8591的3個(gè)地址引腳A0, A1和A2可用于硬件地址編程,允許在同個(gè)I2C總線上接入8個(gè)PCF8591器件,而無需額外的硬件

7、。在PCF8591器件上輸入輸出的地址、控制和數(shù)據(jù)信號(hào)都是通過雙線雙向I2C總線以串行的方式進(jìn)行傳輸。 特性 (1)單獨(dú)供電 (2)PCF8591的操作電壓范圍2.5V-6V (3)低待機(jī)電流 (4)通過I2C總線串行輸入/輸出 (5)PCF8591通過3個(gè)硬件地址引腳尋址 (6)PCF8591的采樣率由I2C總線速率決定 (7)4個(gè)模擬輸入可編程為單端型或差分輸入 (8)自動(dòng)增量頻道選擇 (9)PCF8591的模擬電壓范圍從VSS到VDD (10)PCF8591內(nèi)置跟蹤保持電路 (11)8-bit逐次逼近A/D轉(zhuǎn)換器 (12)通過1路模擬輸出實(shí)現(xiàn)DAC增益 紅外模塊說明:通用紅外遙控系統(tǒng)由發(fā)

8、射和接收兩大部分組成。應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。 圖二 紅外遙控系統(tǒng)圖接收電路可以使用一種集紅外線接收和放大于一體的一體化紅外線接收器,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。 接收器對(duì)外只有3個(gè)引腳:Out、GND、Vcc與單片機(jī)接口非常方便,如圖2 圖三 接收器引腳圖(1)脈沖信號(hào)輸出接,直接接單片機(jī)的IO 口。(2) GND接系統(tǒng)的地線(0V);(3)V

9、cc接系統(tǒng)的電源正極(+5V);2.程序設(shè)計(jì)思路及程序說明2.1及格檔要求矩陣式鍵盤設(shè)置4個(gè)按鍵,初始時(shí),4位數(shù)碼管無顯示。當(dāng)1號(hào)鍵按下時(shí),第一位數(shù)碼管顯示1,并閃爍兩次;當(dāng)2號(hào)鍵按下時(shí),第二位數(shù)碼管顯示并閃爍兩次;3號(hào)鍵、4號(hào)鍵同樣功能。設(shè)計(jì)思路對(duì)鍵盤掃描確定鍵值,可實(shí)現(xiàn)按下鍵數(shù)碼管顯示相應(yīng)的鍵值,并通過for循環(huán)控制閃爍的次數(shù)。其中按鍵抖動(dòng)問題可以通過延時(shí)程序解決。流程圖 圖四 及格檔流程圖程序代碼#include <reg52.h> /包含頭文件#define uchar unsigned char#define uint unsigned int/子函數(shù)聲明uint sca

10、nkey();void delay(uint x);void display(key);void display1(key);/全局變量聲明uchar code wei=0xfe,0xfd,0xfb,0xf7;uchar code duan=0xf9,0xa4,0xb0,0x99;uint hang;uint lie;/延時(shí)子函數(shù)void delay(uint x) uint t; while(x-) for(t=0;t<120;t+);/鍵盤掃描子函數(shù)uint scankey() P1=0xfe; /只掃面一行 switch(P1) case 0xee: lie=1;break; ca

11、se 0xde: lie=2;break; case 0xbe: lie=3;break; case 0x7e: lie=4;break; default: break; while(P1&0xf0)!=0xf0); /無鍵按下時(shí)return (lie);/顯示子函數(shù)void display(key) uint i,j; for(j=0;j<2;j+) /for循環(huán)控制閃爍次數(shù) for(i=0;i<100;i+)/通過循環(huán)延時(shí) P0=duankey-1; /發(fā)送段碼 P2=weikey-1;/發(fā)送位碼 delay(4); for(i=0;i<100;i+) P2=0x

12、ff; /關(guān)閉所有數(shù)碼管并延時(shí) delay(4); /顯示子函數(shù)void display1(key) if(key!=0) P2=weikey-1;/發(fā)送位碼delay(1); P0=duankey-1; /發(fā)送段碼 delay(2); else P2=0xff;/關(guān)數(shù)碼管/主函數(shù)void main() uint key=0; while(1) P1=0xfe; if(P1!=0xfe) /判斷是否有鍵按下 delay (100); /延時(shí)去抖 if(P1!=0xfe) /確實(shí)有鍵按下 key=scankey(); /調(diào)掃描程序 display(key); /調(diào)顯示程序 else displa

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

14、字量并聽過計(jì)算分別送入四個(gè)數(shù)碼管,即可實(shí)現(xiàn)數(shù)碼管顯示采集的電壓值。流程圖 圖五 中檔流程圖程序代碼/*- 內(nèi)容:溫度測(cè)量模塊-*/ #include <reg52.h> #include <intrins.h>#define AddWr 0x90 /寫數(shù)據(jù)地址 #define AddRd 0x91 /讀數(shù)據(jù)地址#define KeyPort P1#define _Nop() _nop_() /定義空指令sbit SDA=P27;sbit SCL=P26;/*- 全局變量聲明-*/ unsigned char code dofly_DuanMa=0xc0,0xf9,0xa

15、4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/ 顯示段碼值09unsigned char code dofly_WeiMa4=0xfe,0xfd,0xfb,0xf7;/分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsigned char TempData4=0xff,0xff,0xff,0xff; /存儲(chǔ)顯示值的全局變量unsigned char j,hang,lie;bit ack;bit ReadADFlag;/*- 子函數(shù)聲明-*/void DelayUs2x(unsigned char t);void Display(unsigned char First

16、Bit,unsigned char Num);void Init_Timer0(void);void Timer0_isr(void);void Start_I2c();void Stop_I2c();void NoAck_I2c(void);void SendByte(unsigned char c);unsigned char RcvByte();unsigned char ReadADC(unsigned char Chl);/*- 延時(shí)子程序-*/void DelayUs2x(unsigned char t) while(-t);void DelayMs(unsigned char t

17、) while(t-) /大致延時(shí)1mS DelayUs2x(245); DelayUs2x(245); /*- 鍵盤掃描子程序-*/ unsigned char keyscan() /鍵盤掃描函數(shù),使用行列逐級(jí)掃描法 KeyPort=0x0f; if(KeyPort!=0x0f) DelayMs(10); if(KeyPort!=0x0f) KeyPort=0x0f; switch(KeyPort) case 0x0e: hang=1;break; case 0x0d: hang=2;break; case 0x0b: hang=3;break; case 0x07: hang=4;brea

18、k; default: break; DelayMs(5); KeyPort=0xf0; switch(KeyPort) case 0xe0: lie=1;break; case 0xd0: lie=2;break; case 0xb0: lie=3;break; case 0x70: lie=4;break; default: break; while(KeyPort&0xf0)!=0xf0);return (hang-1)*4+lie-1); return (17);void Display(unsigned char FirstBit,unsigned char Num) sta

19、tic unsigned char i=0; P0=0xff; /清空數(shù)據(jù),防止有交替重影 P2=dofly_WeiMai+FirstBit; /取位碼 P0=TempDatai; /取顯示數(shù)據(jù),段碼 i+; if(i=Num) i=0;/*- 定時(shí)器初始化子程序-*/ void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 /TH0=0x00; /給定初值 /TL0=0x00; EA=1; /總中斷打開 ET0=1; /定時(shí)器中斷打開 TR0=1; /定時(shí)器開關(guān)打開/*- 定時(shí)器中

20、斷子程序-*/void Timer0_isr(void) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /重新賦值 2ms TL0=(65536-2000)%256; Display(0,4); / 調(diào)用數(shù)碼管掃描 num+; if(num=50) /大致100ms num=0; ReadADFlag=1; /讀標(biāo)志位置1/*- 啟動(dòng)總線-*/void Start_I2c() SDA=1; /發(fā)送起始條件的數(shù)據(jù)信號(hào) _Nop(); SCL=1; _Nop(); /起始條件建立時(shí)間大于4.7us,延時(shí) _Nop(); _No

21、p(); _Nop(); _Nop(); SDA=0; /發(fā)送起始信號(hào) _Nop(); /起始條件鎖定時(shí)間大于4 _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) _Nop(); _Nop();/*- 結(jié)束總線-*/void Stop_I2c() SDA=0; /發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào) _Nop(); /發(fā)送結(jié)束條件的時(shí)鐘信號(hào) SCL=1; /結(jié)束條件建立時(shí)間大于4 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /發(fā)送I2C總線結(jié)束信號(hào) _Nop(); _Nop(); _Nop()

22、; _Nop();/*- 寫入一個(gè)字節(jié)到指定地址 -*/void SendByte(unsigned char c) unsigned char BitCnt; for(BitCnt=0;BitCnt<8;BitCnt+) /要傳送的數(shù)據(jù)長(zhǎng)度為8位 if(c<<BitCnt)&0x80)SDA=1; /判斷發(fā)送位 else SDA=0; _Nop(); SCL=1; /置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位 _Nop(); _Nop(); /保證時(shí)鐘高電平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); SDA=

23、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)答信號(hào) SCL=0; _Nop(); _Nop();/*- 從指定地址讀取一個(gè)字節(jié)數(shù)據(jù) -*/unsigned char RcvByte() unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; /置數(shù)據(jù)線為輸入方式 for(BitCnt=0;BitCnt<8;BitCnt+) _Nop(); SCL=0; /置時(shí)鐘

24、線為低,準(zhǔn)備接收數(shù)據(jù)位 _Nop(); _Nop(); /時(shí)鐘低電平周期大于4.7us _Nop(); _Nop(); _Nop(); SCL=1; /置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效 _Nop(); _Nop(); retc=retc<<1; if(SDA=1)retc=retc+1; /讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc);/*- 發(fā)送非應(yīng)答-*/void NoAck_I2c(void) SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop();

25、 _Nop(); /時(shí)鐘低電平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; /清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收 _Nop(); _Nop(); /*- 主程序-*/main() unsigned char num=0,num1=0,num2=17,k,i; int num3=0,num4=0; Init_Timer0(); DelayMs(20);while (1) /主循環(huán) num2=keyscan(); saomiao: if(num2=0) for(j=0;j<2;j+) /閃爍兩次 TempData0=0xff; /關(guān)閉數(shù)碼管 TempData1=

26、0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); TempData0=dofly_DuanMa1; 將段碼1送入第一個(gè)數(shù)碼管 TempData1=0xff; TempData2=0xff; TempData3=0xff; DelayMs(500); if(num2=1) for(j=0;j<2;j+) /閃爍兩次 TempData0=0xff; /關(guān)閉數(shù)碼管 TempData1=0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); Tem

27、pData0=0xff; TempData1=dofly_DuanMa2; /將段碼2送入第二個(gè)數(shù)碼管 TempData2=0xff; TempData3=0xff; DelayMs(500); if(num2=2) for(j=0;j<2;j+) /閃爍兩次 TempData0=0xff; /關(guān)閉數(shù)碼管 TempData1=0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); TempData0=0xff; TempData1=0xff; TempData2=dofly_DuanMa3; /將段碼3送入第三個(gè)數(shù)碼

28、管 TempData3=0xff; DelayMs(500); if(num2=3) for(j=0;j<2;j+) /閃爍兩次 TempData0=0xff; /關(guān)閉數(shù)碼管 TempData1=0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); TempData0=0xff; TempData1=0xff; TempData2=0xff; TempData3=dofly_DuanMa4; /將段碼4送入第四個(gè)數(shù)碼管 DelayMs(500); if(num2=4) k=1; while(k) num2=keys

29、can(); /調(diào)鍵掃子程序 if(ReadADFlag) ReadADFlag=0; /讀標(biāo)志位為零 EA=0;num=ReadADC(1);EA=1;/A/D采樣前關(guān)中斷,采樣結(jié)束后開中斷 num1=num*5*100/255%10; /計(jì)算第一個(gè)數(shù)碼管的段碼 num=num*5*10/255; /模擬量轉(zhuǎn)化成數(shù)字量 TempData0=0xff; /數(shù)碼管關(guān) TempData1=dofly_DuanMa(num-(num/100)*100)/10&0x7f;/計(jì)算第三個(gè)數(shù)碼管段碼,顯示小數(shù)點(diǎn) TempData2=dofly_DuanManum%10;/計(jì)算第二個(gè)數(shù)碼管段碼 Tem

30、pData3=dofly_DuanManum1; if(num2=0|num2=1|num2=2|num2=3|num2=5|num2=6) goto saomiao;/跳出循環(huán) if(num2=5) /實(shí)現(xiàn)電壓保持 TempData0=0xff; TempData1=dofly_DuanMa(num-(num/100)*100)/10&0x7f; TempData2=dofly_DuanManum%10; TempData3=dofly_DuanManum1; if(num2=6) TempData0=0xff; /關(guān)閉所有數(shù)碼管 TempData1=0xff; TempData2=

31、0xff; TempData3=0xff; /*- 讀AD轉(zhuǎn)值程序-*/unsigned char ReadADC(unsigned char Chl) unsigned char Val; Start_I2c(); /啟動(dòng)總線 SendByte(AddWr); /發(fā)送器件地址 if(ack=0)return(0); SendByte(Chl); /發(fā)送器件子地址 if(ack=0)return(0); Start_I2c(); SendByte(AddRd); if(ack=0)return(0); Val=RcvByte(); NoAck_I2c(); /發(fā)送非應(yīng)位 Stop_I2c();

32、 /結(jié)束總線 return(Val); 2.3良檔要求矩陣式鍵盤設(shè)置4個(gè)按鍵,初始時(shí),4位數(shù)碼管無顯示。當(dāng)1號(hào)鍵按下時(shí),第一位數(shù)碼管顯示1,并閃爍兩次;當(dāng)2號(hào)鍵按下時(shí),第二位數(shù)碼管顯示2,并閃爍兩次;3號(hào)鍵、4號(hào)鍵同樣功能。能對(duì)來自熱敏電阻傳感器上的信號(hào)進(jìn)行A/D轉(zhuǎn)換,并在數(shù)碼管上實(shí)時(shí)顯示采集的電壓值。設(shè)置開始、結(jié)束兩個(gè)按鍵控制采集過程。將顯示的電壓值轉(zhuǎn)換成顯示溫度值,并能夠通過按鍵設(shè)定校正值。設(shè)計(jì)思路 對(duì)鍵盤掃描確定鍵值,可實(shí)現(xiàn)按下鍵數(shù)碼管顯示相應(yīng)的鍵值,并通過for循環(huán)控制閃爍的次數(shù)。其中按鍵抖動(dòng)問題可以通過延時(shí)程序解決。PCF8591將模擬量轉(zhuǎn)換為數(shù)字量,即可將輸入模擬電壓05V轉(zhuǎn)換為8

33、位的數(shù)字量,共,所以每份為=0.02V將模擬量轉(zhuǎn)化成數(shù)字量并聽過計(jì)算分別送入四個(gè)數(shù)碼管,即可實(shí)現(xiàn)數(shù)碼管顯示采集的電壓值。通過溫度電阻的關(guān)系,電阻電壓的關(guān)系制作溫度電壓表,用查表的的方法實(shí)現(xiàn)電壓溫度的轉(zhuǎn)化顯示溫度。并設(shè)定加減鍵對(duì)溫度進(jìn)行矯正。.流程圖圖六 中檔流程圖程序代碼/*- 內(nèi)容:溫度測(cè)量模塊-*/ #include <reg52.h> #include <intrins.h>#define KeyPort P1#define AddWr 0x90 /寫數(shù)據(jù)地址 #define AddRd 0x91 /讀數(shù)據(jù)地址#define _Nop() _nop_() /定義空

34、指令sbit SDA=P27;/定義鎖存使能端口 位鎖存sbit SCL=P26;/定義鎖存使能端口 段鎖存bit ack;bit ReadADFlag;/*- 全局變量聲明-*/ unsigned char j,hang,lie;unsigned char code dofly_DuanMa=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/ 顯示段碼值09unsigned char code dofly_WeiMa4=0xfe,0xfd,0xfb,0xf7;/分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsigned char TempD

35、ata4=0xff,0xff,0xff,0xff; /存儲(chǔ)顯示值的全局變量unsigned int code wendu=6067,6043,6019,5995,5971,5947,5923,5899,5875,5851,5827,5803,5778,5755,5731,5706,5682,5658,5634,5609,5585,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

36、,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,4079,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

37、,3444,3417,3390,3363,3336,3309,3282,3255,3227,3200,3173,3145,3117,3089,3061,3032,3004,2976,2947,2918,2888,2859,2829,2799,2769,2738,2707,2676,2644,2612,2579,2546,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

38、;/*- 子函數(shù)聲明-*/void DelayUs2x(unsigned char t);void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);void Timer0_isr(void);void Start_I2c();void Stop_I2c();void NoAck_I2c(void);void SendByte(unsigned char c);unsigned char RcvByte();unsigned char ReadADC(unsigned char Chl);/*- 延

39、時(shí)子程序-*/void DelayUs2x(unsigned char t) while(-t);void DelayMs(unsigned char t) while(t-) /大致延時(shí)1mS DelayUs2x(245); DelayUs2x(245); /*- 鍵盤掃描子程序-*/ unsigned char keyscan() /鍵盤掃描函數(shù),使用行列逐級(jí)掃描法 KeyPort=0x0f; if(KeyPort!=0x0f) DelayMs(10); if(KeyPort!=0x0f) KeyPort=0x0f; switch(KeyPort) case 0x0e: hang=1;bre

溫馨提示

  • 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. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論