版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE44中國礦業(yè)大學(xué)徐海學(xué)院技能考核培訓(xùn)姓名:學(xué)號:專業(yè):題目:基于單片機(jī)的紅外解碼.溫度及液晶顯示專題:紅外解碼指導(dǎo)教師:設(shè)計(jì)地點(diǎn):電工電子實(shí)驗(yàn)室時(shí)間:月通信系統(tǒng)綜合設(shè)計(jì)訓(xùn)練任務(wù)書學(xué)生姓名專業(yè)年級信息-2班學(xué)號設(shè)計(jì)日期:同組成員:設(shè)計(jì)題目:基于單片機(jī)的紅外無線控制設(shè)計(jì)專題題目:紅外解碼設(shè)計(jì)主要內(nèi)容和要求:主要內(nèi)容:單片機(jī)內(nèi)部結(jié)構(gòu)紅外遙控解碼C語言程序設(shè)Ds18b20的使用Lcd1602的使用2.功能擴(kuò)展要求 環(huán)境溫度液晶顯示指導(dǎo)教師簽字:
目錄TOC\o"1-3"\h\u3635正文 5117711.概述 5226321.1功能描述 5127381.2單片機(jī)資源 5312312.1管腳圖 5189053.1.使用資源 5123622.原理篇 6194322.1紅外發(fā)送及接收 6228892.1.1紅外接收概述 6266932.1.2硬件及原理圖 7195272.1.3紅外中斷接收部分程序 826722.2溫度原理 9321552.2.1DS18B20的主要特性 957782.2.2原理圖與硬件 10168872.2.3DS18B20時(shí)序和程序 10132772.3QC1602A 12156442.3.11602外部結(jié)構(gòu)及管腳說明 1248602.3.2寫命令/數(shù)據(jù)時(shí)序與部分程序 13207873.效果圖 15227754.軟件篇 15134734.1程序框圖 15230894.1.1Main函數(shù) 15193334.1.2中斷 16282724.1.360ms定時(shí)中斷 1625994.2完整程序 16117924.2.1Project.c文件 1640624.2.2onewire.c文件 23106955.參考文獻(xiàn) 26技能考核培訓(xùn)摘要:利用單片機(jī)所學(xué)內(nèi)容進(jìn)行拓展,我們實(shí)現(xiàn)了基于單片機(jī)的紅外解碼.溫度及液晶顯示。Lcd液晶顯示實(shí)時(shí)環(huán)境溫度和接收顯示紅外遙控器的鍵值,在收到紅外信號時(shí)會(huì)用蜂鳴器作為反饋,以提醒紅外一體接收頭有接到信號。關(guān)鍵詞:單片機(jī)液晶顯示紅外解碼正文1.概述1.1功能描述Lcd液晶顯示實(shí)時(shí)環(huán)境溫度和接收顯示紅外遙控器的鍵值,在收到紅外信號時(shí)會(huì)用蜂鳴器作為反饋,以提醒紅外一體接收頭有接到信號。1.2單片機(jī)資源2.0資源 與MCS-51單片機(jī)產(chǎn)品兼容8K字節(jié)在系統(tǒng)可編程Flash存儲器1000次擦寫周期全靜態(tài)操作:0Hz~33Hz三級加密程序存儲器32個(gè)可編程I/O口線三個(gè)16位定時(shí)器/計(jì)數(shù)器八個(gè)中斷源全雙工UART串行通道低功耗空閑和掉電模式掉電后中斷可喚醒看門狗定時(shí)器雙數(shù)據(jù)指針掉電標(biāo)識符2.1管腳圖3.1.使用資源 P1:用于連接LCD1602的數(shù)據(jù)線P3.5,P3.7:分別連接LCD1602的RS,R/W控制腳P3.2:使用第二功能,用于接收紅外信號P2.7:DS18B20數(shù)據(jù)腳P2.5:用于控制蜂鳴器2.原理篇2.1紅外發(fā)送及接收2.1.1紅外接收概述NEC標(biāo)準(zhǔn):遙控載波的頻率為38KHz(占空比為1:3);當(dāng)某個(gè)按鍵按下時(shí),系統(tǒng)首先發(fā)射一個(gè)完整的全碼,如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成。一個(gè)完整的全碼=引導(dǎo)碼+用戶碼+用戶碼+數(shù)據(jù)碼+數(shù)據(jù)反碼。其中,引導(dǎo)碼高電平9ms,低電平4.5ms;系統(tǒng)碼8位,數(shù)據(jù)碼8位,共32位;其中前16位為用戶識別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼,用于核對數(shù)據(jù)是否接收準(zhǔn)確。收端根據(jù)數(shù)據(jù)碼做出應(yīng)該執(zhí)行什么動(dòng)作的判斷。連發(fā)代碼是在持續(xù)按鍵時(shí)發(fā)送的碼。它告知接收端,某鍵是在被連續(xù)地按著。NEC標(biāo)準(zhǔn)下的發(fā)射碼表示發(fā)射數(shù)據(jù)時(shí)0用“0.56ms高電平+0.565ms低電平=1.125ms”表示;數(shù)據(jù)1用“高電平0.56ms+低電平1.69ms=2.25ms”表示。
遙控器發(fā)射的信號:一體化接收頭接收到的信號:需要注意的是;一體化接收頭輸了的波形是與發(fā)射波形是反向的。我的遙控器使用的是NEC標(biāo)準(zhǔn)的WD6122芯片,遙控器編碼如下:2.1.2硬件及原理圖2.1.3紅外中斷接收部分程序voidIR_IN()interrupt0using0 //外部中斷0程序{unsignedcharj,k,n=0; //先定義變量,記住n=0EX0=0; //禁止中斷,以免再次進(jìn)入中斷 delay(15); //延時(shí)0.14ms*15=2.1ms if(IRIN==1) //如果在這期間有高電平說明 { //信號不是來自遙控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循環(huán),等待9ms前導(dǎo)低電平信號的結(jié)束//////////////////////////////////////////////////////for(j=0;j<4;j++) //一共有4組數(shù)據(jù){ for(k=0;k<8;k++) //每組數(shù)據(jù)有8位 { while(IRIN){delay(1);} //死循環(huán),等待4.5ms前導(dǎo)高電平的結(jié)束 while(!IRIN){delay(1);} //等待0.56ms低電平的結(jié)束,準(zhǔn)備采集數(shù)據(jù), while(IRIN) //開始采集數(shù)據(jù) { delay(1); //延時(shí)0.14ms,每過0.14ms時(shí)n就加1 n++; //用n記錄一共有多少個(gè)0.14ms if(n>=30) //如果超過0.14ms*30=4.2ms { //說明是亂碼,放棄不要 EX0=1; return; } } IRCOM[j]=IRCOM[j]>>1;//右移1位,xxxxxxxx變成0xxxxxx if(n>=8){IRCOM[j]=IRCOM[j]|0x80;}//但是如果不是0呢, //0xxxxxxx和0x80相或后變成了1xxxxxxx //這樣這一們數(shù)據(jù)就被記錄為1了 /*想一下這里為什么是8呢,0.14ms*8=1.12ms,知道了吧*/ /*這樣反復(fù)執(zhí)行8次,8位數(shù)據(jù)就存在IRCOM[j]中了*/ /*外層再循環(huán)4次,4*8=32位數(shù)據(jù)碼全都在IRCOM[0],IRCOM[1],IRCOM[2],IRCOM[3]中了*/ n=0; //n計(jì)數(shù)后一定要記得清0,否則下一次就不能準(zhǔn)確計(jì)數(shù)了 }} //////////////////////////////////////////////////// if(IRCOM[2]!=~IRCOM[3]) //這里我們判斷數(shù)據(jù)碼和數(shù)據(jù)反碼是不是相反 { //因?yàn)橄喾床攀钦_的,否則就放棄 EX0=1; return;} beep(); EX0=1; //記得開中斷,你可以去掉這句話試一試}2.2溫度原理2.2.1DS18B20的主要特性(1)適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。(2)獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。(3)DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。(4)DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。(5)溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃。(6)可編程的分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測溫。(7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。(8)測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。(9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。2.2.2原理圖與硬件2.2.3DS18B20時(shí)序和程序初始化時(shí)序及程序//DS18B20初始化bitinit_ds18b20(void){ bitinitflag=0; DQ=1; Delay_OneWire(12); DQ=0; Delay_OneWire(80);//延時(shí)大于480us DQ=1; Delay_OneWire(10);//14 initflag=DQ;//initflag等于1初始化失敗 Delay_OneWire(5); returninitflag;}寫/讀時(shí)序及寫/讀一字節(jié)程序//從DS18B20讀取一個(gè)字節(jié)unsignedcharRead_DS18B20(void){ unsignedchari; unsignedchardat; for(i=0;i<8;i++) { DQ=0; dat>>=1; DQ=1; if(DQ) { dat|=0x80; } Delay_OneWire(5); } returndat;}//通過單總線向DS18B20寫一個(gè)字節(jié)voidWrite_DS18B20(unsignedchardat){ unsignedchari; for(i=0;i<8;i++) { DQ=0; DQ=dat&0x01; Delay_OneWire(5); DQ=1; dat>>=1; } Delay_OneWire(5);}2.3QC1602A2.3.11602外部結(jié)構(gòu)及管腳說明RAM地址映射圖 控制器內(nèi)部帶有80*8位的RAM緩沖區(qū) 2.3.2寫命令/數(shù)據(jù)時(shí)序與部分程序//寫命令voidwrite_com(ucharcom) //液晶寫命令{ lcdrs=0; P1=com; delay_lcd(10); lcden=1; delay_lcd(10); lcden=0;}//寫數(shù)據(jù)voidwrite_data(uchardate) //液晶寫數(shù)據(jù){ lcdrs=1; P1=date; delay_lcd(10); lcden=1; delay_lcd(10); lcden=0;}3.效果圖4.軟件篇4.1程序框圖4.1.1Main函數(shù)4.1.2中斷4.1.360ms定時(shí)中斷4.2完整程序4.2.1Project.c文件#include<reg52.h>#include<absacc.h>#include"onewire.h"http://單總線函數(shù)庫#defineucharunsignedchar#defineuintunsignedintucharcodetable[]="temperature:"; //液晶ucharcodetable1[]="infraredvalue:"; //液晶unsignedcharIRCOM[7]; //定義數(shù)組,用來存儲紅外接收到的數(shù)據(jù)sbitlcden=P3^7; //液晶sbitlcdrs=P3^5; //液晶sbitIRIN=P3^2; //定義紅外接收頭的外部接口,即外部中斷0sbitBEEP=P2^5;//定義蜂鳴器接口,我的在P1^5ucharnum; //液晶charshow_clock; //顯示周期控制charnow_tem; //存得到的溫度charshinow,genow; //當(dāng)前溫度的十個(gè)位charwendu_show_shi,wendu_show_ge; //溫度送入液晶的ASCALL碼charhongwai_jian_zhi; //紅外送入液晶的ASCALL碼voiddelay_lcd(uintz) //液晶延時(shí){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}//寫命令voidwrite_com(ucharcom) //液晶寫命令{ lcdrs=0; P1=com; delay_lcd(10); lcden=1; delay_lcd(10); lcden=0;}//寫數(shù)據(jù)voidwrite_data(uchardate) //液晶寫數(shù)據(jù){ lcdrs=1; P1=date; delay_lcd(10); lcden=1; delay_lcd(10); lcden=0;}voidinit_lcd() //液晶初始化{ lcden=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x10); write_com(0x80+0x00);}voidinit_show() //液晶初始顯示{ for(num=0;num<12;num++) { write_data(table[num]); delay_lcd(5); } write_com(0x80+0x40); for(num=0;num<15;num++) { write_data(table1[num]); delay_lcd(5); } ET0=1; //開定時(shí)中斷 EX0=1;}/*voidinit_infrared() //紅外初始化{IE=0x81; TCON=0X01; BEEP=1; IRIN=1;}*//******************************************/ //紅外延時(shí)/*****************************************/voiddelay(unsignedcharx) { //延時(shí)子程序 unsignedchari; //延時(shí)約x*0.14ms while(x--) //不同遙控器應(yīng)設(shè)置不同的參數(shù) {for(i=0;i<13;i++){}} //參數(shù)的選擇咱們先不管,先看這個(gè)}/*******************************************************/ //蜂鳴器/*******************************************************/voidbeep() { unsignedchari; //蜂鳴器發(fā)聲子程序 for(i=0;i<100;i++) { delay(4); //這個(gè)得看你的蜂鳴器內(nèi)部是否有振蕩源 BEEP=~BEEP; } //如果沒有振蕩源就應(yīng)該輸入脈沖信號 BEEP=1;} /****************************************************/ //溫度服務(wù)程序/****************************************************/voiddis_work() //溫度顯示處理{ shinow=now_tem/10; genow=now_tem%10;//溫度 switch(shinow) { case0:wendu_show_shi=0x30;break; case1:wendu_show_shi=0x31;break; case2:wendu_show_shi=0x32;break; case3:wendu_show_shi=0x33;break; case4:wendu_show_shi=0x34;break; case5:wendu_show_shi=0x35;break; case6:wendu_show_shi=0x36;break; case7:wendu_show_shi=0x37;break; case8:wendu_show_shi=0x38;break; case9:wendu_show_shi=0x39;break; } switch(genow) { case0:wendu_show_ge=0x30;break; case1:wendu_show_ge=0x31;break; case2:wendu_show_ge=0x32;break; case3:wendu_show_ge=0x33;break; case4:wendu_show_ge=0x34;break; case5:wendu_show_ge=0x35;break; case6:wendu_show_ge=0x36;break; case7:wendu_show_ge=0x37;break; case8:wendu_show_ge=0x38;break; case9:wendu_show_ge=0x39;break; }//紅外 switch(IRCOM[2]) { case0x16:hongwai_jian_zhi=0x30;break; case0x0c:hongwai_jian_zhi=0x31;break; case0x18:hongwai_jian_zhi=0x32;break; case0x5e:hongwai_jian_zhi=0x33;break; case0x08:hongwai_jian_zhi=0x34;break; case0x1c:hongwai_jian_zhi=0x35;break; case0x5a:hongwai_jian_zhi=0x36;break; case0x42:hongwai_jian_zhi=0x37;break; case0x52:hongwai_jian_zhi=0x38;break; case0x4a:hongwai_jian_zhi=0x39;break; default:hongwai_jian_zhi=0x21;break; } }/****************************///顯示函數(shù)/*****************************/voidshow(){ write_com(0x80+0x0d); write_data(wendu_show_shi); write_com(0x80+0x0e); write_data(wendu_show_ge); write_com(0x80+0x4F); write_data(hongwai_jian_zhi); }/*************************************************/ //主函數(shù)/**************************************************/voidmain(){ TMOD=0X01; TH0=(65536-60000)/256; //定時(shí) TL0=(65536-60000)%256; EA=1; //定時(shí)器0 BEEP=1; IRIN=1; EA=1;//開總中斷 //開外部中斷0 IT0=1;//邊沿觸發(fā)方式 TR0=1; /////// init_lcd();// init_infrared(); init_show(); while(1);}/***********************************************************/ //外部中斷0紅外鍵值獲取/***********************************************************/voidIR_IN()interrupt0using0 //外部中斷0程序{unsignedcharj,k,n=0; //先定義變量,記住n=0EX0=0; //禁止中斷,以免再次進(jìn)入中斷 delay(15); //延時(shí)0.14ms*15=2.1ms if(IRIN==1) //如果在這期間有高電平說明 { //信號不是來自遙控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循環(huán),等待9ms前導(dǎo)低電平信號的結(jié)束//////////////////////////////////////////////////////for(j=0;j<4;j++) //一共有4組數(shù)據(jù){ for(k=0;k<8;k++) //每組數(shù)據(jù)有8位 { while(IRIN){delay(1);} //死循環(huán),等待4.5ms前導(dǎo)高電平的結(jié)束 while(!IRIN){delay(1);} //等待0.56ms低電平的結(jié)束,準(zhǔn)備采集數(shù)據(jù), while(IRIN) //開始采集數(shù)據(jù) { delay(1); //延時(shí)0.14ms,每過0.14ms時(shí)n就加1 n++; //用n記錄一共有多少個(gè)0.14ms if(n>=30) //如果超過0.14ms*30=4.2ms { //說明是亂碼,放棄不要 EX0=1; return; } } IRCOM[j]=IRCOM[j]>>1;//右移1位,xxxxxxxx變成0xxxxxx //我們先認(rèn)為這一位數(shù)據(jù)是0,現(xiàn)在已經(jīng)送入一位數(shù)據(jù)了 /*你肯定知道_cror_(x,1)和x>>1的區(qū)別吧*/ if(n>=8){IRCOM[j]=IRCOM[j]|0x80;}//但是如果不是0呢, //0xxxxxxx和0x80相或后變成了1xxxxxxx //這樣這一們數(shù)據(jù)就被記錄為1了 /*想一下這里為什么是8呢,0.14ms*8=1.12ms,知道了吧*/ /*這樣反復(fù)執(zhí)行8次,8位數(shù)據(jù)就存在IRCOM[j]中了*/ /*外層再循環(huán)4次,4*8=32位數(shù)據(jù)碼全都在IRCOM[0],IRCOM[1],IRCOM[2],IRCOM[3]中了*/ n=0; //n計(jì)數(shù)后一定要記得清0,否則下一次就不能準(zhǔn)確計(jì)數(shù)了 }} //////////////////////////////////////////////////// if(IRCOM[2]!=~IRCOM[3]) //這里我們判斷數(shù)據(jù)碼和數(shù)據(jù)反碼是不是相反 { //因?yàn)橄喾床攀钦_的,否則就放棄 EX0=1; return;} beep(); EX0=1; //記得開中斷,你可以去掉這句話試一試}/**********************************************************/ //定時(shí)中斷服務(wù)程序/**************************************************************/voidtimer0()interrupt1 //定時(shí)器0{ TH0=(65536-60000)/256; TL0=(65536-60000)%256; show_clock++;//第一個(gè)周期//獲得溫度 if(show_clock==1) now_tem=rd_temperature(); //得到當(dāng)前溫度//第二個(gè)周期//顯示處理 if(show_clock==2) dis_work();//第三個(gè)周期//顯示 if(show_clock==3) { show(); show_clock=0; }}4.2.2onewire.c文件#include"reg52.h"sbitDQ=P2^7;//單總線延時(shí)函數(shù)#ifndefSTC12voidDelay_OneWire(unsignedintt){ while(t--);}#elsevoidDelay_OneWire
溫馨提示
- 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 27728.3-2024濕巾及類似用途產(chǎn)品第3部分:消毒濕巾專用要求
- 大學(xué)生兼職勞動(dòng)合同書2
- 聯(lián)機(jī)手環(huán)測量儀器項(xiàng)目運(yùn)營指導(dǎo)方案
- 電動(dòng)鋸商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 沖床金屬加工用產(chǎn)品供應(yīng)鏈分析
- 電動(dòng)指甲刀商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 眉刷商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 自動(dòng)電話交換機(jī)商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 粉餅盒用粉芯項(xiàng)目運(yùn)營指導(dǎo)方案
- 空手道用護(hù)腿板項(xiàng)目運(yùn)營指導(dǎo)方案
- 移動(dòng)通信網(wǎng)絡(luò)運(yùn)行維護(hù)管理規(guī)程
- 龍頭股戰(zhàn)法優(yōu)質(zhì)獲獎(jiǎng)?wù)n件
- 小班幼兒語言活動(dòng)教案100篇
- 中廣國際總公司-CR2010衛(wèi)星接收解碼器
- 社會(huì)保險(xiǎn)業(yè)務(wù)申報(bào)表(填表說明)
- 簡單電路實(shí)驗(yàn)報(bào)告單
- 02S701磚砌化糞池標(biāo)準(zhǔn)圖集
- 醫(yī)療設(shè)備售后服務(wù)方案
- 三重一大決策管理細(xì)則
- 問題研究 能否淡化海水解決環(huán)渤海地區(qū)淡水短缺問題
- GB/T 3354-1999定向纖維增強(qiáng)塑料拉伸性能試驗(yàn)方法
評論
0/150
提交評論