




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGEPAGE44中國礦業大學徐海學院技能考核培訓姓名:學號:專業:題目:基于單片機的紅外解碼.溫度及液晶顯示專題:紅外解碼指導教師:設計地點:電工電子實驗室時間:月通信系統綜合設計訓練任務書學生姓名專業年級信息-2班學號設計日期:同組成員:設計題目:基于單片機的紅外無線控制設計專題題目:紅外解碼設計主要內容和要求:主要內容:單片機內部結構紅外遙控解碼C語言程序設Ds18b20的使用Lcd1602的使用2.功能擴展要求 環境溫度液晶顯示指導教師簽字:
目錄TOC\o"1-3"\h\u3635正文 5117711.概述 5226321.1功能描述 5127381.2單片機資源 5312312.1管腳圖 5189053.1.使用資源 5123622.原理篇 6194322.1紅外發送及接收 6228892.1.1紅外接收概述 6266932.1.2硬件及原理圖 7195272.1.3紅外中斷接收部分程序 826722.2溫度原理 9321552.2.1DS18B20的主要特性 957782.2.2原理圖與硬件 10168872.2.3DS18B20時序和程序 10132772.3QC1602A 12156442.3.11602外部結構及管腳說明 1248602.3.2寫命令/數據時序與部分程序 13207873.效果圖 15227754.軟件篇 15134734.1程序框圖 15230894.1.1Main函數 15193334.1.2中斷 16282724.1.360ms定時中斷 1625994.2完整程序 16117924.2.1Project.c文件 1640624.2.2onewire.c文件 23106955.參考文獻 26技能考核培訓摘要:利用單片機所學內容進行拓展,我們實現了基于單片機的紅外解碼.溫度及液晶顯示。Lcd液晶顯示實時環境溫度和接收顯示紅外遙控器的鍵值,在收到紅外信號時會用蜂鳴器作為反饋,以提醒紅外一體接收頭有接到信號。關鍵詞:單片機液晶顯示紅外解碼正文1.概述1.1功能描述Lcd液晶顯示實時環境溫度和接收顯示紅外遙控器的鍵值,在收到紅外信號時會用蜂鳴器作為反饋,以提醒紅外一體接收頭有接到信號。1.2單片機資源2.0資源 與MCS-51單片機產品兼容8K字節在系統可編程Flash存儲器1000次擦寫周期全靜態操作:0Hz~33Hz三級加密程序存儲器32個可編程I/O口線三個16位定時器/計數器八個中斷源全雙工UART串行通道低功耗空閑和掉電模式掉電后中斷可喚醒看門狗定時器雙數據指針掉電標識符2.1管腳圖3.1.使用資源 P1:用于連接LCD1602的數據線P3.5,P3.7:分別連接LCD1602的RS,R/W控制腳P3.2:使用第二功能,用于接收紅外信號P2.7:DS18B20數據腳P2.5:用于控制蜂鳴器2.原理篇2.1紅外發送及接收2.1.1紅外接收概述NEC標準:遙控載波的頻率為38KHz(占空比為1:3);當某個按鍵按下時,系統首先發射一個完整的全碼,如果鍵按下超過108ms仍未松開,接下來發射的代碼(連發代碼)將僅由起始碼(9ms)和結束碼(2.5ms)組成。一個完整的全碼=引導碼+用戶碼+用戶碼+數據碼+數據反碼。其中,引導碼高電平9ms,低電平4.5ms;系統碼8位,數據碼8位,共32位;其中前16位為用戶識別碼,能區別不同的紅外遙控設備,防止不同機種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼,用于核對數據是否接收準確。收端根據數據碼做出應該執行什么動作的判斷。連發代碼是在持續按鍵時發送的碼。它告知接收端,某鍵是在被連續地按著。NEC標準下的發射碼表示發射數據時0用“0.56ms高電平+0.565ms低電平=1.125ms”表示;數據1用“高電平0.56ms+低電平1.69ms=2.25ms”表示。
遙控器發射的信號:一體化接收頭接收到的信號:需要注意的是;一體化接收頭輸了的波形是與發射波形是反向的。我的遙控器使用的是NEC標準的WD6122芯片,遙控器編碼如下:2.1.2硬件及原理圖2.1.3紅外中斷接收部分程序voidIR_IN()interrupt0using0 //外部中斷0程序{unsignedcharj,k,n=0; //先定義變量,記住n=0EX0=0; //禁止中斷,以免再次進入中斷 delay(15); //延時0.14ms*15=2.1ms if(IRIN==1) //如果在這期間有高電平說明 { //信號不是來自遙控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循環,等待9ms前導低電平信號的結束//////////////////////////////////////////////////////for(j=0;j<4;j++) //一共有4組數據{ for(k=0;k<8;k++) //每組數據有8位 { while(IRIN){delay(1);} //死循環,等待4.5ms前導高電平的結束 while(!IRIN){delay(1);} //等待0.56ms低電平的結束,準備采集數據, while(IRIN) //開始采集數據 { delay(1); //延時0.14ms,每過0.14ms時n就加1 n++; //用n記錄一共有多少個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 //這樣這一們數據就被記錄為1了 /*想一下這里為什么是8呢,0.14ms*8=1.12ms,知道了吧*/ /*這樣反復執行8次,8位數據就存在IRCOM[j]中了*/ /*外層再循環4次,4*8=32位數據碼全都在IRCOM[0],IRCOM[1],IRCOM[2],IRCOM[3]中了*/ n=0; //n計數后一定要記得清0,否則下一次就不能準確計數了 }} //////////////////////////////////////////////////// if(IRCOM[2]!=~IRCOM[3]) //這里我們判斷數據碼和數據反碼是不是相反 { //因為相反才是正確的,否則就放棄 EX0=1; return;} beep(); EX0=1; //記得開中斷,你可以去掉這句話試一試}2.2溫度原理2.2.1DS18B20的主要特性(1)適應電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數據線供電。(2)獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。(3)DS18B20支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現組網多點測溫。(4)DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉換電路集成在形如一只三極管的集成電路內。(5)溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃。(6)可編程的分辨率為9~12位,對應的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現高精度測溫。(7)在9位分辨率時最多在93.75ms內把溫度轉換為數字,12位分辨率時最多在750ms內把溫度值轉換為數字,速度更快。(8)測量結果直接輸出數字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力。(9)負壓特性:電源極性接反時,芯片不會因發熱而燒毀,但不能正常工作。2.2.2原理圖與硬件2.2.3DS18B20時序和程序初始化時序及程序//DS18B20初始化bitinit_ds18b20(void){ bitinitflag=0; DQ=1; Delay_OneWire(12); DQ=0; Delay_OneWire(80);//延時大于480us DQ=1; Delay_OneWire(10);//14 initflag=DQ;//initflag等于1初始化失敗 Delay_OneWire(5); returninitflag;}寫/讀時序及寫/讀一字節程序//從DS18B20讀取一個字節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寫一個字節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外部結構及管腳說明RAM地址映射圖 控制器內部帶有80*8位的RAM緩沖區 2.3.2寫命令/數據時序與部分程序//寫命令voidwrite_com(ucharcom) //液晶寫命令{ lcdrs=0; P1=com; delay_lcd(10); lcden=1; delay_lcd(10); lcden=0;}//寫數據voidwrite_data(uchardate) //液晶寫數據{ lcdrs=1; P1=date; delay_lcd(10); lcden=1; delay_lcd(10); lcden=0;}3.效果圖4.軟件篇4.1程序框圖4.1.1Main函數4.1.2中斷4.1.360ms定時中斷4.2完整程序4.2.1Project.c文件#include<reg52.h>#include<absacc.h>#include"onewire.h"http://單總線函數庫#defineucharunsignedchar#defineuintunsignedintucharcodetable[]="temperature:"; //液晶ucharcodetable1[]="infraredvalue:"; //液晶unsignedcharIRCOM[7]; //定義數組,用來存儲紅外接收到的數據sbitlcden=P3^7; //液晶sbitlcdrs=P3^5; //液晶sbitIRIN=P3^2; //定義紅外接收頭的外部接口,即外部中斷0sbitBEEP=P2^5;//定義蜂鳴器接口,我的在P1^5ucharnum; //液晶charshow_clock; //顯示周期控制charnow_tem; //存得到的溫度charshinow,genow; //當前溫度的十個位charwendu_show_shi,wendu_show_ge; //溫度送入液晶的ASCALL碼charhongwai_jian_zhi; //紅外送入液晶的ASCALL碼voiddelay_lcd(uintz) //液晶延時{ 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;}//寫數據voidwrite_data(uchardate) //液晶寫數據{ 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; //開定時中斷 EX0=1;}/*voidinit_infrared() //紅外初始化{IE=0x81; TCON=0X01; BEEP=1; IRIN=1;}*//******************************************/ //紅外延時/*****************************************/voiddelay(unsignedcharx) { //延時子程序 unsignedchari; //延時約x*0.14ms while(x--) //不同遙控器應設置不同的參數 {for(i=0;i<13;i++){}} //參數的選擇咱們先不管,先看這個}/*******************************************************/ //蜂鳴器/*******************************************************/voidbeep() { unsignedchari; //蜂鳴器發聲子程序 for(i=0;i<100;i++) { delay(4); //這個得看你的蜂鳴器內部是否有振蕩源 BEEP=~BEEP; } //如果沒有振蕩源就應該輸入脈沖信號 BEEP=1;} /****************************************************/ //溫度服務程序/****************************************************/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; } }/****************************///顯示函數/*****************************/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); }/*************************************************/ //主函數/**************************************************/voidmain(){ TMOD=0X01; TH0=(65536-60000)/256; //定時 TL0=(65536-60000)%256; EA=1; //定時器0 BEEP=1; IRIN=1; EA=1;//開總中斷 //開外部中斷0 IT0=1;//邊沿觸發方式 TR0=1; /////// init_lcd();// init_infrared(); init_show(); while(1);}/***********************************************************/ //外部中斷0紅外鍵值獲取/***********************************************************/voidIR_IN()interrupt0using0 //外部中斷0程序{unsignedcharj,k,n=0; //先定義變量,記住n=0EX0=0; //禁止中斷,以免再次進入中斷 delay(15); //延時0.14ms*15=2.1ms if(IRIN==1) //如果在這期間有高電平說明 { //信號不是來自遙控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循環,等待9ms前導低電平信號的結束//////////////////////////////////////////////////////for(j=0;j<4;j++) //一共有4組數據{ for(k=0;k<8;k++) //每組數據有8位 { while(IRIN){delay(1);} //死循環,等待4.5ms前導高電平的結束 while(!IRIN){delay(1);} //等待0.56ms低電平的結束,準備采集數據, while(IRIN) //開始采集數據 { delay(1); //延時0.14ms,每過0.14ms時n就加1 n++; //用n記錄一共有多少個0.14ms if(n>=30) //如果超過0.14ms*30=4.2ms { //說明是亂碼,放棄不要 EX0=1; return; } } IRCOM[j]=IRCOM[j]>>1;//右移1位,xxxxxxxx變成0xxxxxx //我們先認為這一位數據是0,現在已經送入一位數據了 /*你肯定知道_cror_(x,1)和x>>1的區別吧*/ if(n>=8){IRCOM[j]=IRCOM[j]|0x80;}//但是如果不是0呢, //0xxxxxxx和0x80相或后變成了1xxxxxxx //這樣這一們數據就被記錄為1了 /*想一下這里為什么是8呢,0.14ms*8=1.12ms,知道了吧*/ /*這樣反復執行8次,8位數據就存在IRCOM[j]中了*/ /*外層再循環4次,4*8=32位數據碼全都在IRCOM[0],IRCOM[1],IRCOM[2],IRCOM[3]中了*/ n=0; //n計數后一定要記得清0,否則下一次就不能準確計數了 }} //////////////////////////////////////////////////// if(IRCOM[2]!=~IRCOM[3]) //這里我們判斷數據碼和數據反碼是不是相反 { //因為相反才是正確的,否則就放棄 EX0=1; return;} beep(); EX0=1; //記得開中斷,你可以去掉這句話試一試}/**********************************************************/ //定時中斷服務程序/**************************************************************/voidtimer0()interrupt1 //定時器0{ TH0=(65536-60000)/256; TL0=(65536-60000)%256; show_clock++;//第一個周期//獲得溫度 if(show_clock==1) now_tem=rd_temperature(); //得到當前溫度//第二個周期//顯示處理 if(show_clock==2) dis_work();//第三個周期//顯示 if(show_clock==3) { show(); show_clock=0; }}4.2.2onewire.c文件#include"reg52.h"sbitDQ=P2^7;//單總線延時函數#ifndefSTC12voidDelay_OneWire(unsignedintt){ while(t--);}#elsevoidDelay_OneWire
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025初三升高一數學暑假銜接講義25講含答案(必修一內容)3.5.4 恒成立和存在性問題含答案
- 2025年中考語文一模試卷
- 測評依據22課件
- 苯環親電取代的定位規律54課件
- 考研復習-風景園林基礎考研試題附參考答案詳解【完整版】
- 考研復習-風景園林基礎考研試題(真題匯編)附答案詳解
- 風景園林基礎考研資料試題及參考答案詳解【培優】
- 《風景園林招投標與概預算》試題A帶答案詳解ab卷
- 2023年上海市上海市松江區佘山鎮招聘社區工作者真題附詳細解析
- 2024年山東華興機械集團有限責任公司人員招聘筆試備考題庫及參考答案詳解一套
- 中控ECS-700系統簡介
- 重慶市九龍坡區2023-2024學年九年級上學期期末質量監測化學試題(含答案解析)
- 肝臟疾病病人麻醉
- 創新思維與創業實驗-東南大學中國大學mooc課后章節答案期末考試題庫2023年
- 第11課第2課時主動學習高效學習【中職專用】《心理健康與職業生涯》(高教版2023基礎模塊)
- 演示文稿2(演示文稿)
- YMO青少年數學思維28屆二年級全國總決賽試卷
- 俄烏沖突中無人機作戰運用及啟示
- 浙江省高等學校畢業生登記表
- 干部人事檔案轉遞單表樣
- 論我國跨境賭破違法犯罪的危害及對策
評論
0/150
提交評論