



版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1通過(guò)本實(shí)驗(yàn)掌握MLX90614的原理。2通過(guò)實(shí)驗(yàn)掌握數(shù)碼管基本原理3.通過(guò)實(shí)驗(yàn)掌握矩陣鍵盤(pán)的使用4通過(guò)實(shí)驗(yàn)掌握1602的使用二實(shí)驗(yàn)內(nèi)容通過(guò)MLX90614非接觸式測(cè)得物體溫度三實(shí)驗(yàn)器材1.主控屏+5V電源2.DCP-PRJ09紅外測(cè)溫儀四實(shí)驗(yàn)原理圖五實(shí)驗(yàn)步驟1. 接上電源2.運(yùn)行Keil u Vision軟件,新建一個(gè)工程,新建一個(gè)工程文件。將文件添加到工程中并編譯,如有錯(cuò),請(qǐng)更改直到編譯成功,如有錯(cuò),請(qǐng)更改直到編譯成功4.用編程器將生成的HEX文件燒寫(xiě)到單片機(jī)中,或用STC單片機(jī)專(zhuān)用的串口燒寫(xiě)軟件,通過(guò)MAX232串口燒寫(xiě)到單片機(jī)中(只能用于STC單片機(jī))?;蛴梅抡嫫鱽?lái)執(zhí)行程序,將程序下載
2、到仿真器中,具體方法請(qǐng)參考仿真器的使用一節(jié)。用編程器將生成的HEX文件燒寫(xiě)到單片機(jī)中。5.程序下完后可以看到液晶屏有溫度顯示,用手掌覆蓋紅外傳感器上方2cm處,看到此時(shí)液晶屏溫度即為手掌的表面溫度。6按下1鍵可以看到數(shù)碼管顯示,用手掌覆蓋紅外傳感器上方2cm處,看到此時(shí)數(shù)碼管溫度即為手掌的表面溫度。此時(shí)液晶屏溫度保持不變。7按下除1鍵其他鍵,此時(shí)液晶屏又重新顯示溫度。實(shí)驗(yàn)代碼如下:/-/說(shuō)明:顯示分為2部分:數(shù)碼管顯示,液晶屏顯示/按1鍵數(shù)碼管顯示,此時(shí)液晶屏保持靜止/復(fù)位時(shí)或按除1鍵外其他鍵時(shí),液晶屏顯示,數(shù)碼管熄滅/-#include<reg52.h>#include<i
3、ntrins.h>#define uint unsigned int#define uchar unsigned char#define Nack_number 10/*端口定義*uchar flag;/LCD控制線(xiàn)接口sbit RS=P06;/RS端sbit RW=P07;/讀寫(xiě)端sbit LCDE=P35;/使能端/mlx90614端口定義sbit SCK=P37;/時(shí)鐘線(xiàn)sbit SDA=P36;/數(shù)據(jù)線(xiàn)sbit DPY1=P32;/溫度顯示第1個(gè)數(shù)碼管段選sbit DPY2=P33;/溫度顯示第2個(gè)數(shù)碼管段選sbit DPY3=P34;/溫度顯示第3個(gè)數(shù)碼管段選sbit row1
4、=P03;/矩陣鍵盤(pán)第1列sbit row2=P04;/矩陣鍵盤(pán)第2列sbit row3=P05;/矩陣鍵盤(pán)第3列sbit cow1=P00;/矩陣鍵盤(pán)第1行sbit cow2=P01;/矩陣鍵盤(pán)第2行sbit cow3=P02;/矩陣鍵盤(pán)第3行/*數(shù)據(jù)定義*bdata uchar flag1;/可位尋址數(shù)據(jù)sbit bit_out=flag17;sbit bit_in=flag10;uchar temp H,temp L,err;void CALTEMP(uint TEMP);void Read Key(void);void init Int();void delay1(uint z);vo
5、id show();uchar key_num;uchar mah5;/*數(shù)碼管碼值定義*/uchar code LED01= /LED顯示代碼,0-9共陽(yáng)不帶小數(shù)點(diǎn)的0x C0,0x F9,0x A4,0x B0,0x99,0x92,0x82,0x F8,0x80,0x90;uchar code LED02= /LED顯示代碼,0-9共陽(yáng)帶小數(shù)點(diǎn)的0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/*全局變量定義*/bit b20ms,b100ms;/定時(shí)標(biāo)志位uchar c20ms,c100ms;/定時(shí)毫秒數(shù)/*LCD1602*/向LCD寫(xiě)
6、入命令或數(shù)據(jù)*#define LCD_COMMAND 0/命令#define LCD_DATA 1/數(shù)據(jù)#define LCD_CLEAR_SCREEN 0x01/清屏#define LCD_HOMING 0x02/光標(biāo)返回原點(diǎn)/設(shè)置顯示模式*0x08+*#define LCD_SHOW 0x04/顯示開(kāi)一實(shí)驗(yàn)?zāi)康?define LCD_HIDE 0x00/顯示關(guān)#define LCD_CURSOR 0x02/顯示光標(biāo)#define LCD_NO_CURSOR 0x00/無(wú)光標(biāo)#define LCD_FLASH 0x01/光標(biāo)閃動(dòng)#define LCD_NO_FLASH 0x00/光標(biāo)不閃動(dòng)/
7、設(shè)置輸入模式*0x04+*#define LCD_AC_UP 0x02/光標(biāo)右移AC+#define LCD_AC_DOWN 0x00/默認(rèn)光標(biāo)左移AC-#define LCD_MOVE 0x01/畫(huà)面可平移#define LCD_NO_MOVE 0x00/默認(rèn)畫(huà)面不移動(dòng)/*mlx90614*/command mode命令模式#define Ram Access 0x00/對(duì)RAM操作#define Eepom Access 0x20/對(duì)EEPRAM操作#define Mode 0x60/進(jìn)入命令模式#define Exit Mode 0x61/退出命令模式#define Read Flag
8、0xf0/讀標(biāo)志#define Enter Sleep 0xff/進(jìn)入睡眠模式/ram address read only RAM地址(只讀)#define Abmient Temp Addr 0x03/周?chē)鷾囟?define IR1Addr 0x04#define IR2Addr 0x05#define Line Abmient Temp Addr 0x06/環(huán)境溫度/*0x0000 0x4074 16500 0.01/單元 -40 125*/ #define Line Obj1Temp Addr 0x07 /目標(biāo)溫度,紅外溫度 /*0x27ad-0x7fff 0x3559 22610 0.
9、02/單元 -70.01-382.19 0.01 452.2*/ #define Line Obj2Temp Addr 0x08/eepom address EEPROM地址#define TObj Max Addr 0x00/測(cè)量范圍上限設(shè)定#define TObj Min Addr 0x01/測(cè)量范圍下限設(shè)定#define PWMCtrl Addr 0x02/PWM設(shè)定#define Ta Range Addr 0x03/環(huán)境溫度設(shè)定#define Ke Addr 0x04/頻率修正系數(shù)#define Config Addr 0x05/配置寄存器#define SMbus Addr 0x0
10、e/器件地址設(shè)定#define Reserverd1Addr 0x0f/保留#define Reserverd2Addr 0x19/保留#define ID1Addr 0x1c/ID地址1#define ID2Addr 0x1d/ID地址2#define ID3Addr 0x1e/ID地址3#define ID4Addr 0x1f/ID地址4/*函數(shù)聲明*void start();/MLX90614發(fā)起始位子程序void stop();/MLX90614發(fā)結(jié)束位子程序uchar Read Byte(void);/MLX90614接收字節(jié)子程序void send_bit(void);/MLX90
11、614發(fā)送位子程序void Send Byte(uchar number);/MLX90614接收字節(jié)子程序void read_bit(void);/MLX90614接收位子程序void delay(uint N);/延時(shí)程序uint readtemp(void);/讀溫度數(shù)據(jù)void init1602(void);/LCD初始化子程序void busy(void);/LCD判斷忙子程序void cmd_wrt(uchar cmd);/LCD寫(xiě)命令子程序void dat_wrt(uchar dat);/LCD寫(xiě)數(shù)據(jù)子程序void display(uint Tem);/顯示子程序void Pri
12、nt(uchar*str);/字符串顯示程序/*主函數(shù)*void main()uint Tem;/溫度變量init Int();SCK=1;SDA=1;delay(4);SCK=0;delay(1000);SCK=1;init1602();/初始化LCDwhile(1)while(b100ms)/每100ms掃描一次鍵盤(pán)b100ms=0;Read Key();if(key_num=1)/按下1鍵時(shí),進(jìn)行數(shù)碼管顯示Tem=readtemp();CALTEMP(Tem);show();if(key_num!=1)/液晶屏顯示Tem=readtemp();/讀取溫度cmd_wrt(0x01);/清屏
13、Print("Temperature:");/顯示字符串Temperature:且換行display(Tem);/顯示溫度Print("C");/顯示攝氏度delay(100000);/延時(shí)再讀取溫度顯示void Print(uchar *str) /字符串顯示程序 while(*str!='0') /直到字符串結(jié)束 dat_wrt(*str); /轉(zhuǎn)成 ASCII 碼str+; /指向下一個(gè)字符 /-輸入轉(zhuǎn)換并顯示(用于 LCD1602)-void display(uint Tem) uint T,a,b; T=Tem*2; if(T&
14、gt;=27315) /溫度為正 T=T-27315; / a=T/100; /溫度整數(shù)b=T-a*100; /溫度小數(shù)if(a>=100) /溫度超過(guò) 100 度 dat_wrt(0x30+a/100); /顯示溫度百位dat_wrt(0x30+a%100/10); /顯示溫度十位dat_wrt(0x30+a%10); /顯示溫度個(gè)位 else if(a>=10) /溫度超過(guò) 10 度 dat_wrt(0x30+a%100/10); /顯示溫度十位dat_wrt(0x30+a%10); /顯示溫度個(gè)位 else /溫度不超過(guò) 10 度 dat_wrt(0x30+a); /顯示溫度
15、個(gè)位 dat_wrt(0x2e); /顯示小數(shù)點(diǎn)if(b>=10) /溫度小數(shù)點(diǎn)后第 1 位數(shù)不等于 0 dat_wrt(0x30+b/10); /顯示溫度小數(shù)點(diǎn)后第 1 位數(shù)dat_wrt(0x30+b%10); /顯示溫度小數(shù)點(diǎn)后第 2 位數(shù) else /溫度小數(shù)點(diǎn)后第 1 位數(shù)等于 0 dat_wrt(0x30); /顯示溫度小數(shù)點(diǎn)后第 1 位數(shù) 0 dat_wrt(0x30+b); /顯示溫度小數(shù)點(diǎn)后第 2 位數(shù) else /溫度為負(fù) T=27315-T; a=T/100; b=T-a*100; dat_wrt(0x2d); /顯示負(fù)號(hào)if(a>=10) /溫度低于負(fù) 10
16、 度 dat_wrt(0x30+a/10); /顯示溫度十位dat_wrt(0x30+a%10); /顯示溫度個(gè)位 else /溫度高于負(fù) 10 度 dat_wrt(0x30+a); /顯示溫度個(gè)位 dat_wrt(0x2e); /顯示小數(shù)點(diǎn)if(b>=10) /溫度小數(shù)點(diǎn)后第 1 位數(shù)不等于 0 dat_wrt(0x30+b/10); /顯示溫度小數(shù)點(diǎn)后第 1 位數(shù)dat_wrt(0x30+b%10); /顯示溫度小數(shù)點(diǎn)后第 2 位數(shù) else /溫度小數(shù)點(diǎn)后第 1 位數(shù)等于 0 dat_wrt(0x30); /顯示溫度小數(shù)點(diǎn)后第 1 位數(shù) 0 dat_wrt(0x30+b); /顯示
17、溫度小數(shù)點(diǎn)后第 2 位數(shù) /-根據(jù)十六進(jìn)制計(jì)算溫度- void CALTEMP(uint TEMP) uint T; uint a,b; uchar A4,A5,A6,A7,A8; T=TEMP*2; if(T>=27315) T=T-27315; a=T/100; b=T-a*100; if(a>=100) A4=a/100; a=a%100; A5=a/10; a=a%10; A6=a; else if(a>=10) A4=0; A5=a/10; a=a%10; A6=a; else A4=0; A5=0; A6=a; if(b>=10) A7=b/10; b=b%
18、10; A8=b; else A7=0; A8=b; else T=27315-T; a=T/100; b=T-a*100; A4=9; if(a>=10) A5=a/10; a=a%10; A6=a; else A5=0; A6=a; if(b>=10) A7=b/10; b=b%10; A8=b; else A7=0; A8=b; mah4=A4; mah3=A5; mah2=A6; mah1=A7; mah0=A8; /- void start(void) /停止條件是SCK=1 時(shí),SDA 由 1 到 0 SDA=1; delay(4); SCK=1; delay(4);
19、SDA=0; delay(4); SCK=0; delay(4); /- void stop(void) /停止條件是SCK=1 時(shí),SDA 由 0 到 1 SCK=0; delay(4); SDA=0; delay(4); SCK=1; delay(4); SDA=1; /-發(fā)送一個(gè)字節(jié)- void Send Byte(uchar number) uchar i,n,dat; n=Nack_number; /可以重發(fā)次數(shù)Send_again: dat=number; for(i=0;i<8;i+) /8 位依次發(fā)送 if(dat&0x80) /取最高位 bit_out=1; /
20、發(fā) 1 else bit_out=0; /發(fā) 0 send_bit(); /發(fā)送一個(gè)位dat=dat<<1; /左移一位 read_bit(); /接收 1 位應(yīng)答信號(hào)if(bit_in=1) /無(wú)應(yīng)答時(shí)重發(fā) stop(); if(n!=0) n-; /可以重發(fā) Nack_number=10 次goto Repeat; /重發(fā) else goto exit; /退出 else goto exit; Repeat: start(); /重新開(kāi)始goto Send_again; /重發(fā)exit: ; /退出 /-發(fā)送一個(gè)位-void send_bit(void) if(bit_out=
21、1) SDA=1; /發(fā) 1 else SDA=0; /發(fā) 0 _nop_(); SCK=1; /上升沿delay(4);delay(4); SCK=0; delay(4);delay(4); /-接收一個(gè)字節(jié)- uchar Read Byte(void) uchar i,dat; dat=0; /初值為 0 for(i=0;i<8;i+) dat=dat<<1; /左移read_bit(); /接收一位if(bit_in=1) dat=dat+1; /為 1 時(shí)對(duì)應(yīng)位加 1 SDA=0; /發(fā)送應(yīng)答信號(hào) 0 send_bit(); return dat; /帶回接收數(shù)據(jù) /
22、-接收一個(gè)位- void read_bit(void) SDA=1; /數(shù)據(jù)端先置 1 bit_in=1; SCK=1; /上升沿delay(4);delay(4); bit_in=SDA; /讀數(shù)據(jù)_nop_(); SCK=0; delay(4);delay(4); /- uint readtemp(void) SCK=0; start(); /開(kāi)始條件Send Byte(0x00); /發(fā)送從地址 00 RS=0; /指向指令寄存器Send Byte(0x07); /發(fā)送命令start(); /開(kāi)始條件Send Byte(0x01); /讀從地址 00 bit_out=0; temp L=
23、Read Byte(); /讀數(shù)據(jù)低字節(jié)bit_out=0; temp H=Read Byte(); /讀數(shù)據(jù)高字節(jié)bit_out=1; err=Read Byte(); /讀錯(cuò)誤信息碼stop(); /停止條件return(temp H*256+temp L); /*LCD 顯示子函數(shù)* void init1602(void) /初始化 LCD cmd_wrt(0x01); /清屏cmd_wrt(0x0c); /開(kāi)顯示,不顯示光標(biāo),不閃爍cmd_wrt(0x06); /完成一個(gè)字符碼傳送后,光標(biāo)左移,顯示不發(fā)生移位cmd_wrt(0x38); /16×2 顯示,5×7 點(diǎn)
24、陣,8 位數(shù)據(jù)接口 void busy(void) /LCD 忙標(biāo)志判斷 flag=0x80; /賦初值高位為 1 禁止while(flag&0x80) /讀寫(xiě)操作使能位禁止時(shí)等待繼續(xù)檢測(cè)P1=0xff; RS=0; /指向地址計(jì)數(shù)器RW=1; /讀LCDE=1; /信號(hào)下降沿有效flag=P1; /讀狀態(tài)位高位為狀態(tài)LCDE=0; void cmd_wrt(uchar cmd) /寫(xiě)命令子函數(shù) LCDE=0; busy(); /檢測(cè)讀寫(xiě)操作使能嗎P1=cmd; /命令RS=0; /指向命令計(jì)數(shù)器RW=0; /寫(xiě)LCDE=1; /高電平有效LCDE=0; void dat_wrt(uc
25、har dat) /寫(xiě)數(shù)據(jù)子函數(shù) busy(); /檢測(cè)讀寫(xiě)操作使能嗎LCDE=0; if(flag=16) RS=0; /指向指令寄存器RW=0; /寫(xiě)P1=0XC0; /指向第二行LCDE=1; /高電平有效LCDE=0; RS=1; /指向數(shù)據(jù)寄存器RW=0; /寫(xiě)P1=dat; /寫(xiě)數(shù)據(jù)LCDE=1; /高電平有效LCDE=0; /-延時(shí)-void delay(uint n) uint j; for(j=0;j<n;j+) _nop_(); /-定時(shí)器初始化函數(shù)- void init Int() TMOD = 0x10; /定時(shí)器 1 方式 1 TH1=(65536-1000)/
26、256; /定時(shí)器 1 設(shè)置 1ms 定時(shí)TL1=(65536-1000)%256; EA=1; /開(kāi)總中斷ET1 = 1; /開(kāi)定時(shí)器 T1 中斷TR1 = 1; /啟動(dòng)定時(shí)器 T1 /-定時(shí)器中斷處理函數(shù)- void timer1handle() interrupt 3 /定時(shí)器 3 1ms 中斷 TH1=(65536-1000)/256; TL1=(65536-1000)%256; c20ms+; c100ms+; if(c20ms >= 20) /20ms 計(jì)時(shí)器 c20ms = 0; b20ms = 1; if(c100ms >= 50) /100ms 計(jì)時(shí)器 c100ms = 0; b100ms = 1; /-溫度顯示函數(shù)- void show() DPY1=0; P2=LED01mah3; /轉(zhuǎn)換 8 位數(shù)顯示,不帶小數(shù)點(diǎn)的delay1(2); P2=0x FF; DPY1=1; DPY2=0; P2=LED02mah2; /轉(zhuǎn)換 8 位數(shù)顯示,帶小數(shù)點(diǎn)的delay1(2); P2=0x FF; DPY2=1; DPY3=0; P2=LED01mah1; /轉(zhuǎn)換 8 位數(shù)顯示,不帶小數(shù)點(diǎn)的delay1(2); P2=0x FF; DPY3=1; void Read Key(void)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工安全與防護(hù)技術(shù)綜述試題及答案
- 2025年行業(yè)動(dòng)態(tài)對(duì)工程經(jīng)濟(jì)的影響試題及答案
- 2024水利水電工程考題歸納試題及答案
- 2024年新鄉(xiāng)市誠(chéng)城卓人學(xué)校招聘真題
- 工程項(xiàng)目管理信息共享試題及答案
- 2024年秦皇島市市級(jí)機(jī)關(guān)公開(kāi)選調(diào)考試真題
- 精準(zhǔn)備考經(jīng)濟(jì)師試題及答案攻略
- 中級(jí)經(jīng)濟(jì)師網(wǎng)絡(luò)課程試題及答案
- 2024年葫蘆島市市級(jí)機(jī)關(guān)公開(kāi)選調(diào)考試真題
- 2025年工程經(jīng)濟(jì)綜合應(yīng)用試題及答案
- 公司章程模板五篇
- OBE理念下生成式AI技術(shù)在高校財(cái)會(huì)教育中的應(yīng)用路徑研究
- 2024年云服務(wù)器運(yùn)維服務(wù)合同樣本
- 班級(jí)榮譽(yù)與成長(zhǎng)模板
- IATF16949-2016體系管理質(zhì)量手冊(cè)(壓鑄鋁合金)
- 創(chuàng)業(yè)人生學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 超職數(shù)配備干部整改方案
- 中藥材、中藥飲片分類(lèi)貯存常溫庫(kù)貨品名稱(chēng)目錄
- 中考模擬考試實(shí)施方案
- (部編版)統(tǒng)編版小學(xué)語(yǔ)文教材目錄(一至六年級(jí)上冊(cè)下冊(cè)齊全)
- 四川省南充市2023-2024學(xué)年六年級(jí)下學(xué)期期末英語(yǔ)試卷
評(píng)論
0/150
提交評(píng)論