基于ARM7的電子萬年歷設(shè)計及基于ARM的溫度數(shù)據(jù)無線傳輸系統(tǒng)_第1頁
基于ARM7的電子萬年歷設(shè)計及基于ARM的溫度數(shù)據(jù)無線傳輸系統(tǒng)_第2頁
基于ARM7的電子萬年歷設(shè)計及基于ARM的溫度數(shù)據(jù)無線傳輸系統(tǒng)_第3頁
基于ARM7的電子萬年歷設(shè)計及基于ARM的溫度數(shù)據(jù)無線傳輸系統(tǒng)_第4頁
基于ARM7的電子萬年歷設(shè)計及基于ARM的溫度數(shù)據(jù)無線傳輸系統(tǒng)_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

成績評定表學(xué)生姓名班級學(xué)號專業(yè)通信工程課程設(shè)計題目基于ARM7的電子萬年歷設(shè)計評語組長簽字:成績?nèi)掌?0**年7月19日課程設(shè)計任務(wù)書學(xué)院信息科學(xué)與工程學(xué)院專業(yè)通信工程學(xué)生姓名班級學(xué)號課程設(shè)計題目基于ARM7的電子萬年歷設(shè)計實踐教學(xué)要求與任務(wù):學(xué)習(xí)ARM7的虛擬儀器原理、設(shè)計方法和實現(xiàn)技巧;掌握簡單ARM7程序的編程實現(xiàn);學(xué)會使用Proteus和Keil連接電路圖和關(guān)聯(lián)源代碼;采用ARM7語言,實現(xiàn)電子萬年歷設(shè)計;(1)通過檢索、查資料、調(diào)查研究、確定方案、畫出組成系統(tǒng)結(jié)構(gòu)方框圖;(2)采用ARM7實現(xiàn)電子萬年歷;(3)系統(tǒng)調(diào)試與改進,調(diào)整系統(tǒng)參數(shù),分析系統(tǒng)運行結(jié)果;(4)寫出設(shè)計總結(jié)報告。工作計劃與進度安排:20周(上):學(xué)習(xí)ARM7虛擬儀器原理、設(shè)計方法和實現(xiàn)技巧,掌握簡單ARM7程序的編程實現(xiàn),掌握簡單通信系統(tǒng)設(shè)計和分析方法。20周(下):采用ARM7語言,實現(xiàn)電子萬年歷設(shè)計,并對萬年歷進行評估。指導(dǎo)教師:20**年7月13日專業(yè)負(fù)責(zé)人:20**年7月13日學(xué)院教學(xué)副院長:20**年7月13日

目錄1系統(tǒng)設(shè)計 11.1電子顯示屏特性 11.2按鍵控制 11.3 LCD顯示端 11.4萬年歷調(diào)控電路 21.5萬年歷的實現(xiàn) 31.6LCD調(diào)試電路圖 32軟件的具體功能和要求 42.1基本要求 42.2軟件設(shè)計平臺的介紹及實現(xiàn)方法 42.3程序設(shè)計流程圖 43設(shè)計總結(jié) 63.1proteus仿真電路圖 63.2Keil源代碼 73.3性能分析 23[參考文獻] 241系統(tǒng)設(shè)計1.1電子顯示屏特性1>LED由計算機專用設(shè)備、顯示屏幕、視頻輸入端口和系統(tǒng)軟件等組成。2>計算機及專用設(shè)備直接決定了系統(tǒng)的功能,可根據(jù)用戶對系統(tǒng)的不同要求選擇不同的類型3>提供視頻輸入端口。1.2按鍵控制1>用于年月日的調(diào)控,復(fù)位。2>用于時分秒的置換,清屏。1.3 LCD顯示端LCD顯示端如圖1所示。圖1LCD顯示端1.4萬年歷調(diào)控電路萬年歷調(diào)控電路如圖2所示。圖2萬年歷調(diào)控電路1.5萬年歷的實現(xiàn)使用調(diào)試功能,經(jīng)過反復(fù)的調(diào)試終于實現(xiàn)了計時功能,然后通過查詢資料,實現(xiàn)了計時過程中時鐘實時更新功能及實現(xiàn)LED燈跟節(jié)奏閃爍。再經(jīng)過程序的改進,實現(xiàn)了實時時鐘和鬧鐘調(diào)整功能。添加了LED燈指示調(diào)整時間點(秒、分、時、星期、日、月、年)功能。1.6LCD調(diào)試電路圖調(diào)試電路圖如圖3所示。圖3調(diào)試電路圖2軟件的具體功能和要求2.1基本要求本課題所設(shè)計的系統(tǒng)要求:在理解基本實驗代碼的基礎(chǔ)上,掌握萬年歷的工作原理,基于程序控制方式的驅(qū)動設(shè)計。在proteus中使用ARM7的LPC2106芯片并且結(jié)合Keil的源代碼,實現(xiàn)萬年歷功能。編寫基于萬年歷程序,實現(xiàn)代碼編譯。2.2軟件設(shè)計平臺的介紹及實現(xiàn)方法本設(shè)計中采用可編程邏輯設(shè)計環(huán)境ARM7進行設(shè)計,KeiluVsion5采用C語言進行編程。2.3程序設(shè)計流程圖萬年歷程序流程圖如圖4所示。開始開始初始化讀日期、時間寫日期、時間顯示子程序時間修改子程序日期修改子程序顯示結(jié)果返回開關(guān)控制子程序圖4萬年歷程序流程圖3設(shè)計總結(jié)3.1proteus仿真電路圖仿真結(jié)果如圖5所示。圖5仿真電路圖3.2Keil源代碼/*****************************************************功能:LCD12864液晶顯示驅(qū)動程序****************************************************/#include"config.h"#defineLCD12864_DIRIO0DIR//端口方向#defineLCD12864_CLRIO0CLR//數(shù)據(jù)清零#defineLCD12864_SETIO0SET//數(shù)據(jù)置一#defineLCD12864_PINIO0PIN//端口狀態(tài)#defineLCD12864_BUSY(1<<26)//BUSY#defineLCD12864_CTL_NO11//控制線起始端口#defineLCD12864_DAT_NO16//數(shù)據(jù)線起始端口#defineLCD12864_RS(1<<(LCD12864_CTL_NO+2))//命令/數(shù)據(jù)#defineLCD12864_RW(1<<(LCD12864_CTL_NO+3))//讀/寫#defineLCD12864_EN(1<<(LCD12864_CTL_NO+4))//使能位#defineLCD_DispOn0x3F//開顯示命令#defineLCD_STARTROW0xC0//設(shè)置起始行指令,0xC0為第0行#defineLCD_PAGE0xB8//設(shè)置頁指令。10111000#defineLCD_COL0x40//設(shè)置列指令。#defineLCD_LINE0x40//設(shè)置列指令#defineSINGLE_SCREEN_COL64//左右屏,每屏64列#defineLCD12864_CSA(1<<(LCD12864_CTL_NO))//控制線端口定義,選中左部屏幕#defineLCD12864_CSB(1<<(LCD12864_CTL_NO+1))//選中右部屏幕#defineLCD12864_WIDTH128//寬度#defineLCD12864_HIGH64//高度#defineLCD12864_PAGE8//頁數(shù)//引用外部字模externuint8sytx[8][32];externuint8snum[][16];externuint8hytx[8][32];externuint8Nums[10][16];externuint8week[][16];externuint8menu1[];externuint8menu0[];externuint8degree[];//externuint8dianqiguan[];externuint8menu2[];externuint8menu3[];externuint8menu4[];uint8tm[6];//獲取時間存在數(shù)組中uint8year[6];//獲取日期存在數(shù)組中uint8day;//獲取星期號uint8dis_buf[22];//數(shù)據(jù)緩沖區(qū)//uint8dayoder;//延時函數(shù)voidDelay(uint32x);//初始化函數(shù)voidRTCInit(void);voidLCDInit2(void);voidvCheckBusy(void);voidvWriteCMD2(uint8ucCMD);voidWriteData2(uint8ucData);voidClearAll2(void);//顯示字符函數(shù)voidDisplayByte(uint8ucPage,uint8ucCol,uint8ucData);//顯示字符voidvDisplayByte(uint8ucPage,uint8ucCol,uint8ucData);//反選顯示字符//顯示數(shù)字函數(shù)voidDisplaynum(uint8ucPage,uint8ucCol,uint8*pDisTable);//顯示數(shù)字//顯示漢字、字符串函數(shù)voidDispOneChinese(uint8ucPage,uint8ucCol,uint8*pDisTable,uint8Col);//一個漢字voidDispChinese(uint8ucPage,uint8ucCol,uint8pDisTable[][32],uint8Num,uint8Col);//多個漢字//全屏顯示圖片voidDisPicture(uint8*pDisTable);voidvDisPicture(uint8*pDisTable,uint8sur);//刷新屏幕函數(shù)只刷新其中一部分voidDateupdated(uint8numcode[]);voidWeekupdated(uint8oder);voidTimeupdated(uint8numcode[]);voidSetTimeRtc(void);//填充時間變量//刷新屏幕函數(shù)voidfresh(void);//定時器中斷處理函數(shù),其中調(diào)用屏幕刷新函數(shù)freshvoid__irqRTC_Int(void);//主函數(shù)入口intmain(){LCDInit2();//初始化后清屏RTCInit();//初始化實時時鐘DispChinese(0,0,hytx,8,16);//顯示"歡迎同學(xué)止步的風(fēng)"VICIntSelect=0x00;//設(shè)置所有中斷連接IRQ中斷VICVectCntl0=0x20|13;//分配通道0VICVectAddr0=(int)RTC_Int;//設(shè)置中斷服務(wù)程序地址VICIntEnable=(1<<13);//使能RTC中斷SetTimeRtc();Timeupdated(tm);Dateupdated(year);Weekupdated(day);while(1){while(0==(ILR&0x01));//等待RTC增量中斷ILR=0x01;//清除中斷標(biāo)志}//WriteData2(0xff);//DispChinese(1,0,Nums,10,8);//顯示"0123456789"http://ClearAll2();//Displaynum(6,2+8*2,*(snum+10));//DispChinese(1,0,Nums,10,8);//顯示"0123456789"http://DispOneChinese(6,96,*(week+6),16);//每次循環(huán),顯示一個漢字//ClearAll2();//Displaynum(2,32+8*4,*(snum+year[4]));//Displaynum(0,0,*(snum+year[4]));//Displaynum(0,0,*(snum));//vDisPicture(menu4,0);//反選8塊中的一塊區(qū)域//DisPicture(menu4);}//*******************************************************************************//*名稱:Delay()//*功能:延時函數(shù)//*******************************************************************************/voidDelay(uint32x){unsignedinti1,j1;for(j1=0;j1<100;j1++){for(i1=0;i1<x;i1++);}}//****************************************************************************//*名稱:vCheckBusy//*功能:檢查LCD是否忙//****************************************************************************voidvCheckBusy(void){LCD12864_DIR&=0xF9FFFF03;//數(shù)據(jù)線為輸入while(1){LCD12864_CLR=LCD12864_RS;LCD12864_SET=LCD12864_RW;LCD12864_SET=LCD12864_EN;LCD12864_CLR=LCD12864_EN;if(!(LCD12864_PIN&LCD12864_BUSY))break;}LCD12864_DIR|=0x060000FC;//數(shù)據(jù)線為輸出*/}//****************************************************************************//*名稱:vWriteCMD2//*功能:寫命令//****************************************************************************voidvWriteCMD2(uint8ucCMD){vCheckBusy();LCD12864_CLR=LCD12864_RS;//RS置L,數(shù)據(jù)格式為:命令LCD12864_CLR=LCD12864_RW;//RW置L,為寫操作LCD12864_CLR=0xFF<<LCD12864_DAT_NO;//清零數(shù)據(jù)端口LCD12864_SET=ucCMD<<LCD12864_DAT_NO;//傳遞命令LCD12864_SET=LCD12864_EN;//給EN一個高脈沖,發(fā)送數(shù)據(jù)LCD12864_CLR=LCD12864_EN;//發(fā)送完成后,使能位置L,供以后繼續(xù)使用}//****************************************************************************//*名稱:WriteData2//*功能:寫數(shù)據(jù)//****************************************************************************voidWriteData2(uint8ucData){vCheckBusy();LCD12864_SET=LCD12864_RS;//寫數(shù)據(jù)時,RS為H,RW為LLCD12864_CLR=LCD12864_RW;LCD12864_CLR=0xFF<<LCD12864_DAT_NO;//清零8位數(shù)據(jù)端口LCD12864_SET=ucData<<LCD12864_DAT_NO;//傳遞命令LCD12864_SET=LCD12864_EN;//給EN一個高脈沖,發(fā)送數(shù)據(jù)LCD12864_CLR=LCD12864_EN;//發(fā)送完成后,使能位置L,供以后繼續(xù)使用}//****************************************************************************//*名稱:CleanAll2//*功能:清屏//****************************************************************************voidClearAll2(void){uint8ucPage,ucCol;//頁號,列號LCD12864_SET=LCD12864_CSA;//左右兩屏都選中LCD12864_SET=LCD12864_CSB;for(ucPage=0;ucPage<8;ucPage++){vWriteCMD2(LCD_PAGE+ucPage);//設(shè)置頁號,從0行開始,光標(biāo)位置vWriteCMD2(LCD_COL);//設(shè)置列號,定位在第0列for(ucCol=0;ucCol<64;ucCol++)//左右半屏都是64列,所以循環(huán)64次就可以啦,兩邊同時清屏{vWriteCMD2(LCD_PAGE+ucPage);//設(shè)置頁號,從0行開始,光標(biāo)位置vWriteCMD2(LCD_COL+ucCol);//設(shè)置列號,從0列開始,到63列結(jié)束WriteData2(0x00);//寫零,表示清空當(dāng)前列}}}//****************************************************************************//*名稱:LCDInit2//*功能:初始化//****************************************************************************voidLCDInit2(void){LCD12864_DIR|=0x00FFF800;//11-23為輸出LCD12864_CLR|=0x00FFF800;//清零11-23vWriteCMD2(LCD_DispOn);//開顯示vWriteCMD2(LCD_STARTROW);//設(shè)置起始行地址,列地址和頁地址是變化的ClearAll2();}//**************************************************************************************************//*FunctionName:DisplayByte//Date:*//*Parameter:ucPage//ucDatavoidDisplayByte(uint8ucPage,uint8ucCol,uint8ucData){//先選擇顯示屏幕(左or右)if(ucCol/SINGLE_SCREEN_COL==0)//為0說明ucCol小于64。,在左半屏幕{LCD12864_SET=LCD12864_CSA;//左開LCD12864_CLR=LCD12864_CSB;//右關(guān)}elseif(ucCol/SINGLE_SCREEN_COL==1)//為1說明ucCol大于64。,在右半屏幕{LCD12864_CLR=LCD12864_CSA;//左關(guān)LCD12864_SET=LCD12864_CSB;//右開}//設(shè)置坐標(biāo)vWriteCMD2(LCD_PAGE+ucPage);//設(shè)置開始的頁號vWriteCMD2(LCD_COL+ucCol%SINGLE_SCREEN_COL);//設(shè)置開始的列號//顯示數(shù)據(jù)WriteData2(ucData);}//***************************************************************************************//*名稱vDisplayByte//*功能反顯一個字符//*參數(shù)解釋ucPage顯示的起始頁數(shù)ucCol顯示的起始列數(shù)ucData要顯示的數(shù)據(jù)//***************************************************************************************/voidvDisplayByte(uint8ucPage,uint8ucCol,uint8ucData){if(ucCol/LCD12864_HIGH==0){LCD12864_SET=LCD12864_CSA;LCD12864_CLR=LCD12864_CSB;}else{LCD12864_CLR=LCD12864_CSA;LCD12864_SET=LCD12864_CSB;}vWriteCMD2(LCD_PAGE+ucPage);vWriteCMD2(LCD_LINE+ucCol%LCD12864_HIGH);WriteData2(~ucData);}//**************************************************************************//*名稱vDisPicture//*功能顯示一個被選中一部分的界面//*參數(shù)解釋*pDisTable圖像數(shù)據(jù)的指針//*sur值作用01234567分別為選中八塊中的一塊12243648分別為選中01頁23頁45頁67頁//*****************************************************************************/voidvDisPicture(uint8*pDisTable,uint8sur){uint8ucPage=0;//起始頁uint8ucCol=0;//起始列uint8width=128;//lcd寬度uint8hight=64;//lcd高度uint8i,j;//臨時變量if(sur>=0&sur<=7)//輸入數(shù)據(jù)sur在0-7之間{for(i=ucPage;i<ucPage+hight/8;i++)//頁數(shù)遞增{for(j=ucCol;j<ucCol+width;j++)//列數(shù)遞增{if((i>=(sur/2)*2)&&(i<=(sur/2)*2+1)){if(j>=64*(sur%2)&&j<=64*(sur%2)+63){vDisplayByte(i,j,*(pDisTable+i*128+j));}else{DisplayByte(i,j,*(pDisTable+i*128+j));}}else{DisplayByte(i,j,*(pDisTable+i*128+j));}}}}else//如果參數(shù)不為0-7之間即為12243648其中之一{for(i=ucPage;i<ucPage+hight/8;i++)//頁遞增{for(j=ucCol;j<ucCol+width;j++)//列遞增{if(i>=((sur-12)/12)*2&&i<=((sur-12)/12)*2+1){vDisplayByte(i,j,*(pDisTable+i*128+j));}else{DisplayByte(i,j,*(pDisTable+i*128+j));}}}}}//*******************************************************************************//**函數(shù)名稱:Displaynum()//**函數(shù)功能:顯示一個數(shù)字//**入口參數(shù):ucPage顯示的起始頁數(shù)ucCol顯示的起始列數(shù)*pDisTable要顯示的數(shù)據(jù)的指針//**出口參數(shù):無//*******************************************************************************/voidDisplaynum(uint8ucPage,uint8ucCol,uint8*pDisTable){uint8i;for(i=0;i<8;i++)//數(shù)字上半部分{DisplayByte(ucPage,ucCol+i,*(pDisTable+i));}for(i=0;i<8;i++)//數(shù)字下半部分{DisplayByte(ucPage+1,ucCol+i,*(pDisTable+8+i));}pDisTable++;}//*******************************************************************************//**函數(shù)名稱:Dateupdated()//**函數(shù)功能:在待機界面刷新日期//**入口參數(shù):numcode[]要顯示的數(shù)據(jù)組成的數(shù)組長度為六數(shù)字范圍0-9pDisTable[][16]數(shù)字和溫度標(biāo)示橫線字符//**出口參數(shù):無//*******************************************************************************/voidDateupdated(uint8numcode[]){uint8count=6;uint8ucPage=2;uint8ucCol=32;uint8i=0;for(i=0;i<count;i++){if(i==2||i==4){Displaynum(ucPage,ucCol+8*i,*(snum+10));ucCol+=8;Displaynum(ucPage,ucCol+8*i,*(snum+numcode[i]));}else{Displaynum(ucPage,ucCol+8*i,*(snum+numcode[i]));}}}//*******************************************************************************//**函數(shù)名稱:SetTimeRtc()//**函數(shù)功能:獲取時間的各種數(shù)據(jù)//**入口參數(shù):無//**出口參數(shù):無//*******************************************************************************/voidSetTimeRtc(void){uint32datas;uint32times;uint32bak;//uint8MESSAGE[]="--北京時間:--";times=CTIME0;//讀取完整的時鐘寄存器datas=CTIME1;bak=(datas>>16)&0xfff;//獲取年dis_buf[0]=bak/1000+'0';bak=bak%1000;dis_buf[1]=bak/100+'0';bak=bak%100;dis_buf[2]=bak/10;dis_buf[3]=bak%10;dis_buf[4]='-';bak=(datas>>8)&0x0f;//獲取月dis_buf[5]=bak/10;dis_buf[6]=bak%10;dis_buf[7]='-';bak=datas&0x1f;//獲取日dis_buf[8]=bak/10;dis_buf[9]=bak%10;dis_buf[10]='';bak=(times>>24)&0x07;//獲取星期dis_buf[11]=bak%10;dis_buf[12]='';bak=(times>>16)&0x1f;//獲取小時dis_buf[13]=bak/10;dis_buf[14]=bak%10;dis_buf[15]=':';bak=(times>>8)&0x3f;//獲取分鐘dis_buf[16]=bak/10;dis_buf[17]=bak%10;dis_buf[18]=':';bak=times&0x3f;//獲取秒鐘dis_buf[19]=bak/10;dis_buf[20]=bak%10;tm[0]=dis_buf[13];tm[1]=dis_buf[14];tm[2]=dis_buf[16];tm[3]=dis_buf[17];tm[4]=dis_buf[19];tm[5]=dis_buf[20];year[0]=dis_buf[2];year[1]=dis_buf[3];year[2]=dis_buf[5];year[3]=dis_buf[6];year[4]=dis_buf[8];year[5]=dis_buf[9];day=dis_buf[11];//dayoder=dis_buf[9];}//****************************************************************************//*名稱:Weekupdated()//*功能:更新星期//****************************************************************************voidWeekupdated(uint8oder){//DispOneChinese(6,96,*(week+oder),16);DispOneChinese(6,96,*(week+oder),16);//每次循環(huán),顯示一個漢字}//*************************************************************************************************//*名稱:Timeupdated//*作用:在待機界面刷新時間//*參數(shù)解釋:numcode[]要顯示的數(shù)據(jù)組成數(shù)組pDisTable[][16]//*************************************************************************************************/voidTimeupdated(uint8numcode[]){uint8ucPage=4;uint8ucCol=32;uint8count=6;uint8i=0;for(i=0;i<count;i++){if(i==2||i==4){Displaynum(ucPage,ucCol+8*i,*(snum+12));ucCol+=8;Displaynum(ucPage,ucCol+8*i,*(snum+numcode[i]));}else{Displaynum(ucPage,ucCol+8*i,*(snum+numcode[i]));}}}//****************************************************************************//*名稱:DispOneChinese//*功能:顯示一個漢字//一個漢字需要兩頁*16列//*注意:頁,列有改變//****************************************************************************voidDispOneChinese(uint8ucPage,uint8ucCol,uint8*pDisTable,uint8Col)//頁號,列號,指向字模數(shù)組的指針,Col表示列數(shù),為8,則是字符數(shù)組,為16則是漢字{uint8i=0;for(i=0;i<Col;i++)//漢字上半部分{DisplayByte(ucPage,ucCol+i,*(pDisTable+i));}for(i=0;i<Col;i++)//漢字下半部分{DisplayByte(ucPage+1,ucCol+i,*(pDisTable+16+i));//漢字時用//DisplayByte(ucPage+1,ucCol+i,*(pDisTable+8+i));}}//*******************************************************************************//**函數(shù)名稱:RTCInit()//**函數(shù)功能:初始化實時時鐘//**入口參數(shù):無//**出口參數(shù):無//*******************************************************************************/voidRTCInit(void){PREINT=Fpclk/32768-1;//設(shè)置基準(zhǔn)時鐘分頻器PREFRAC=Fpclk-(Fpclk/32768)*32768;CCR=0x00;//禁止時間計數(shù)器YEAR=2009;MONTH=6;DOM=18;DOW=6;HOUR=23;MIN=59;SEC=55;CIIR=0x01;//設(shè)置秒值的增量產(chǎn)生1次中斷CCR=0x01;//啟動RTC}//****************************************************************************//*名稱:DispChinese//*功能:顯示n個漢字//一個漢字需要兩頁*16列//*注意:按照這種寫法要每個漢字單獨取模//**************************************************voidDispChinese(uint8ucPage,uint8ucCol,uint8pDisTable[][32],uint8Num,uint8Col)//漢字時用//voidDispChinese(uint8ucPage,uint8ucCol,uint8pDisTable[][16],uint8Num,uint8Col)//Col表示列數(shù),為8,則是字符數(shù)組,為16則是漢字{uint8i=0;for(i=0;i<Num;i++){//漢字時用DispOneChinese(ucPage,ucCol+16*i,*(pDisTable+i),Col);//每次循環(huán),顯示一個漢字//DispOneChinese(ucPage,ucCol+8*i,*(pDisTable+i),Col);//每次循環(huán),顯示一個字符數(shù)字}}//*******************************************************************************//**函數(shù)名稱:fresh()//**函數(shù)功能:刷新屏幕//**入口參數(shù):無//**出口參數(shù):無//*******************************************************************************/voidfresh(){SetTimeRtc();Timeupdated(tm);Dateupdated(year);Weekupdated(day);}//*******************************************************************************//**函數(shù)名稱:DisPicture()//**函數(shù)功能:顯示一幅圖//**入口參數(shù):最大128*64點陣,要提供圖形的高度和寬度//**出口參數(shù):*pDisTable要顯示的數(shù)據(jù)的指針//*******************************************************************************/voidDisPicture(uint8*pDisTable){uint8ucPage=0;uint8ucCol=0;uint8width=128;uint8hight=64;uint8i,j;for(i=ucPage;i<ucPage+hight/8;i++)for(j=ucCol;j<ucCol+width;j++)DisplayByte(i,j,*(pDisTable+i*128+j));}//*******************************************************************************//**函數(shù)名稱:RTC_Int()//**函數(shù)功能:每一秒中斷一次,刷新一次//**入口參數(shù):無//**出口參數(shù):無//*******************************************************************************/void__irqRTC_Int(void){fresh();//刷新ILR=0x01;//清除RTC增量中斷標(biāo)志VICVectAddr=0;//向量中斷結(jié)束}3.3性能分析在測試中遇到LCD液晶顯示屏為不顯示時,首先對電路的芯片進行測試,觀察是否選擇正確以及是否有編譯程序文件,按動按鈕調(diào)好:查看編譯的程序是否正確無誤,對程序進行認(rèn)真修改。經(jīng)過多次的反復(fù)測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設(shè)計能力與及對電路的分析能力。同時在軟件的編程方面得到更到的提高,對編程能力得到加強,對所學(xué)的知識得到很大的提高與鞏固。實現(xiàn)了電子萬年歷的基本功能。[參考文獻][1]劉勇編數(shù)字電路電子工業(yè)出版社2004[2]陳正振編電子電路設(shè)計與制作廣西交通職業(yè)技術(shù)學(xué)院2007[3]楊子文編ARM原理及應(yīng)用西安電子科技大學(xué)出版社2006[4]王法能編ARM原理及應(yīng)用科學(xué)出版社2004密級:學(xué)士學(xué)位論文THESISOFBACHELOR(年)題目:溫度數(shù)據(jù)無線傳輸系統(tǒng)學(xué)院:系專業(yè):班級:學(xué)號:學(xué)生姓名: 指導(dǎo)教師:起訖日期:溫度數(shù)據(jù)無線傳輸系統(tǒng)專業(yè):學(xué)號:姓名:指導(dǎo)老師:摘要人們生產(chǎn)生活需要知道溫度,工業(yè)生產(chǎn)需要知道溫度控制溫度。為了生產(chǎn)生活的需要,我們要有一套及時、方便、有效、快捷的傳輸溫度量的系統(tǒng)。本系統(tǒng)主要有兩個模塊,一個溫度采集發(fā)送模塊和一個溫度數(shù)據(jù)接收模塊。在溫度采集模塊通過溫度傳感器DS18B20采集溫度數(shù)據(jù),這種傳感器可將模擬的溫度量轉(zhuǎn)換成數(shù)字量通過IIC總線將數(shù)據(jù)傳送到單片機,單片機采用LM3S1138芯片,這個芯片具有很快的處理速度,有單獨的休眠模塊,通過軟件使其進入休眠非常省電。然后將溫度數(shù)據(jù)送到無線發(fā)射模塊,我采用的無線發(fā)射是工業(yè)通用的nRF905無線收發(fā)模塊,將數(shù)據(jù)送到無線發(fā)射模塊中,發(fā)射模塊會自動將數(shù)據(jù)打包,最后將數(shù)據(jù)發(fā)送。數(shù)據(jù)接收模塊中無線接收模塊每隔650us掃描一次,當(dāng)有同頻率的信號過來時就開始接收數(shù)據(jù)包,將接收到的數(shù)據(jù)包解壓,將數(shù)據(jù)送到單片機,然后單片機將數(shù)據(jù)送到上位機,上位機既可以處理數(shù)據(jù)。該設(shè)計可以使溫度數(shù)據(jù)及時的監(jiān)控,通過無線傳輸不用布線。并且可以方便的在上位機處理數(shù)據(jù)。關(guān)鍵詞:DS18B20,LM3S1138,nRF905,溫度采集,無線傳輸。TemperaturedatawirelesstransmissionsystemAbstractPeopleneedtoknowproductionandlifeoftemperature,theindustrialproductionneedtoknowthetemperatureandcontroltemperature.Inordertotheneedsofproductionandlife,wewanttohaveatimely,convenient,efficient,quicktransmissiontemperatureamountofsystem.Systemtherearetwomainmodules,atemperaturegatheringsendmoduleandatemperaturedatareceivingmodule.IntemperatureacquisitionmodulethroughthetemperaturesensorDS18B20collectiontemperaturedata,thesensorcanbesimulatedtemperatureisconvertedintodigitalquantitythroughtheIICtrunktosenddatatoasingle-chipmicrocomputer,thesinglechipmicrocomputerLM3S1138chip,thechiphasquicklyprocessingspeed,hasaseparatedormancymodule,throughthesoftwaremakeitintothedormancyveryprovinceelectricity.Thenwillthetemperaturedatasenttowirelesstransmittingmodule,IusewirelesslaunchisthenRF905industrialgeneralwirelesstransceivermodule,thedatasenttowirelesstransmittingmodules,launchmoduleautomaticallywilldatapacking,finallywillsenddata.Datareceivingmodulewirelessreceivingmodulesinevery650usscanningtime,whenthefrequencyofthesignalwithcamethroughtoreceivedatapackets,willreceivethepacketdecompression,datatothesinglechipmicrocomputer,andthenthedatasenttothesinglechipmicrocomputeruppermachine,PCcanprocessingdata.Thisdesigncanmakethetemperaturedatatimelymonitoring,throughthewirelesstransmissionneednotwiring.Andcanbeconvenientinuppermachineprocessingdata.KEY:DS18B20,LM3S1138,nRF905,Temperaturegathering,Wirelesstransmission目錄摘要ⅠAbstractⅡ緒論1課題的來源與研究意義1國內(nèi)外研究現(xiàn)狀及發(fā)展趨勢1本文主要研究內(nèi)容2溫度采集發(fā)射硬件及工作原理32.1系統(tǒng)總體方案設(shè)計32.2溫度采集的硬件電路及工作原理32.3溫度采集電路32.4單片機選型62.5復(fù)位電路72.6電源電路82.7無線發(fā)射電路8第三章溫度數(shù)據(jù)接收硬件及工作原理133.1溫度數(shù)據(jù)接收的硬件電路及工作原理133.2單片機選型133.3電源電路及串口通信133.4無線接收電路14第四章軟件設(shè)計154.1溫度采集發(fā)射模塊軟件設(shè)計154.1.1主程序154.1.2溫度采集模塊程序164.1.3無線發(fā)射模塊程序204.2溫度數(shù)據(jù)接收模塊軟件設(shè)計214.2.1主程序214.2.2數(shù)據(jù)接收模塊程序22結(jié)論26參考文獻27致謝28附錄:溫度采集發(fā)射模塊電氣原理圖溫度數(shù)據(jù)接收模塊電氣原理圖溫度采集發(fā)射模塊PCB圖溫度數(shù)據(jù)接收模塊PCB圖溫度采集發(fā)射模塊程序清單溫度數(shù)據(jù)接收模塊程序清單緒論課題的來源及研究意義溫度數(shù)據(jù)無線傳輸系統(tǒng),主要用于對溫度的自動采集和溫度數(shù)據(jù)的自動無線傳輸。對于現(xiàn)在社會,氣象的發(fā)展以及人們對氣象服務(wù)的需求日益增多[1],而以前用的各種型號的溫度表,人工根據(jù)溫度表刻度讀數(shù)的采集方式已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足要求。首先是溫度數(shù)據(jù)量的增大,要求24小時實時監(jiān)測,對于人工的方式來說,效率低,精度低。其次現(xiàn)在人工勞動力成本的增加,對于大量監(jiān)測點會讓數(shù)據(jù)采集成本增大。最后,對于需要采集高空溫度,人工已經(jīng)不能到達(dá)?;谶@些因素自動采集溫度數(shù)據(jù)保存數(shù)據(jù)已經(jīng)成為主流模式。在其他行業(yè)的應(yīng)用也非常廣泛,石油、化工、冶金、紡織、機械制造、航空航天、制藥、煙草、糧食存儲等等,都需要實時監(jiān)測溫度。數(shù)據(jù)無線傳輸在現(xiàn)在各種行業(yè)運用越來越廣泛,可以實時發(fā)送數(shù)據(jù),溫度數(shù)據(jù)采集到以后將其及時的發(fā)送到指定的上位機,對溫度數(shù)據(jù)及時的處理,在氣象上就可以及時的發(fā)出預(yù)報,讓人們安排生產(chǎn)生活,在工業(yè)現(xiàn)場,可以及時的安排工業(yè)生產(chǎn),或者避免很多事故的發(fā)生。國內(nèi)外研究現(xiàn)狀及發(fā)展趨勢隨著工業(yè)社會的發(fā)展,現(xiàn)代工業(yè)對于溫度的采集,數(shù)據(jù)處理已經(jīng)全部實現(xiàn)自動化。例如我國的氣象溫度采集,已經(jīng)實現(xiàn)自動氣象站的應(yīng)用?,F(xiàn)在使用的與單片機一起使用的溫度傳感器主要有:數(shù)字溫度傳感器和模擬溫度傳感器。模擬溫度傳感器為以前通用的熱電阻和熱電偶傳感器。而數(shù)字溫度傳感器就是能把溫度物理量和濕度物理量,通過溫、濕度敏感元件和相應(yīng)電路轉(zhuǎn)換成方便計算機、plc、智能儀表等數(shù)據(jù)采集設(shè)備直接讀取得數(shù)字量的傳感器。像現(xiàn)在多采用芬蘭Vaisala公司生產(chǎn)的HMP45D溫度傳感器[10];美國模擬器件公司生產(chǎn)的單片集成兩端感溫傳感器AD590[6];DALLAS公司生產(chǎn)的數(shù)字溫度傳感器DS18B20[11]。在傳輸方面,現(xiàn)在采用的數(shù)據(jù)傳輸方法有很多,世界主流的有以下幾種方式:(1)有線傳輸。有線傳輸?shù)膬?yōu)點傳輸速度快,傳輸穩(wěn)定性、精確度高,但是有線傳輸接線復(fù)雜、布線困難,故障時難以維修。一般有線傳輸?shù)牟季€方式有地下深埋光纜和地上設(shè)立電桿架設(shè)電纜,這兩種方式無論哪種都非常困難,也會增加很多不必要的成本。如果是地下深埋光纜,如果光纜發(fā)生破損或者其他故障,首先是故障點判斷費時費力,其次如果維修則要挖掘深埋地下的光纜,很費時費力。這樣就使有線傳輸以后的使用維護非常困難,成本也隨之增加。(2)無線傳輸。主流的無線傳輸[5]有,紅外線傳輸,藍(lán)牙傳輸,GPRS無線通信技術(shù),射頻技術(shù)。①紅外線傳輸,在無線技術(shù)發(fā)展的一個時期,紅外傳輸技術(shù)被世界廣泛使用,能夠被眾多硬件和軟件支持。它主要通過數(shù)據(jù)電脈沖和紅外光脈沖之間的相互轉(zhuǎn)換來實現(xiàn)無線的數(shù)據(jù)收發(fā),是一種點對點的數(shù)據(jù)傳輸協(xié)議。其優(yōu)點是:具有小角度(30度錐角以內(nèi))、短距離、點對點直線數(shù)據(jù)傳輸;保密性好;傳輸速率較高可達(dá)16Mbps。缺點是通信距離短只有0~1米;通信過程中不能移動;遇到障礙物時,通信會中斷;只能點對點傳輸,因此功能單一、擴展性差。②藍(lán)牙傳輸[3],其優(yōu)點在于引入身份識別后可以靈活實現(xiàn)漫游;低功耗對人體危害?。凰{(lán)牙集成電路應(yīng)用簡單,成本低廉;其缺點在于:傳輸距離短,最新的藍(lán)牙V4.0有效傳輸傳輸距離為1000米。最新的藍(lán)牙傳輸速度大大提高,但是藍(lán)牙V2.0的傳輸速度慢。③GPRS無線通信技術(shù)[8]。GPRS數(shù)據(jù)傳輸?shù)目煽啃杂休^高的保障;從遠(yuǎn)端到管理中心的傳輸延時小,適于實時信息傳輸;可以實現(xiàn)全國聯(lián)網(wǎng)數(shù)據(jù)傳輸,使溫度數(shù)據(jù)全國共享方便。但是,管理中心的GPRS接入方式比較復(fù)雜,不能采用低成本的用戶終端,遠(yuǎn)程通信終端的成本較高;通信接入的連網(wǎng)費較高,特別是對數(shù)據(jù)量大的數(shù)據(jù),成本太高。④射頻技術(shù)。射頻技術(shù)是一種無線電通信技術(shù),其利用電磁波為載波來傳輸信息,它是一種在一個區(qū)域范圍內(nèi)的任何地方,在各種電子設(shè)備之間的實現(xiàn)無線通信的開放新技術(shù)工業(yè)標(biāo)準(zhǔn)。射頻技術(shù)使用幾個特定頻率中的一個頻率傳輸數(shù)據(jù),相鄰網(wǎng)絡(luò)使用不同的頻率,目前工業(yè)上使用433/868/915/2400MHz頻段。創(chuàng)羿科技CY-TAT-202[12]電阻溫度系數(shù)大,感應(yīng)靈敏,電阻率高,元件尺寸小,電阻值隨溫度變化而變化基本呈線性關(guān)系,在測溫范圍內(nèi),物理、化學(xué)性能穩(wěn)定,長期復(fù)現(xiàn)性好,測量精度高,有效識別距離可達(dá)0-80m。溫度傳感電子標(biāo)簽除識別與定位的功能外,還可通過感溫裝置獲取實時溫度數(shù)據(jù)。并將被監(jiān)測的物體溫度數(shù)據(jù)通過電子標(biāo)簽傳遞給監(jiān)控管理系統(tǒng),從而實現(xiàn)對監(jiān)控過程中溫度預(yù)警。該產(chǎn)品的領(lǐng)先技術(shù)、全工業(yè)性設(shè)計和出眾特點使得其在冷鏈、醫(yī)療、倉庫管理、電力故障檢測等需地方提供了一種全新的檢測理念,有效識別距離為80米,廣泛應(yīng)用于各種領(lǐng)域。本文主要研究內(nèi)容本課題研究的溫度數(shù)據(jù)無線傳輸系統(tǒng)可廣泛用于氣象氣溫監(jiān)測,工廠車間溫度監(jiān)控等。設(shè)計要求:微處理器LM3S1138;溫度精度0.5℃;通訊距離不小于500M(無遮擋);供電方式,鋰電池,可持續(xù)工作一個月。溫度采集發(fā)射模塊硬件電路設(shè)計2.1總體方案設(shè)計在這個設(shè)計系統(tǒng)中,溫度采集發(fā)射模塊,需要用溫度傳感器采集溫度量,將溫度量傳輸?shù)絾纹瑱C中,單片機將溫度數(shù)據(jù)量傳輸?shù)綗o線發(fā)射芯片,無線發(fā)射芯片將數(shù)據(jù)打包發(fā)送出去。接收模塊將采集到的溫度數(shù)據(jù)去掉校驗碼CRC,解壓,送到單片機中,然后單片機通過USB數(shù)據(jù)接口將數(shù)據(jù)送到計算機中,方便處理數(shù)據(jù)。2.2溫度采集發(fā)射模塊硬件組成及工作原理這個模塊由溫度傳感器,單片機,無線發(fā)射模塊組成。圖2-1溫度采集發(fā)射模塊原理框圖溫度采集發(fā)射模塊原理框圖如圖2-1所示,數(shù)字溫度傳感器DS18B20將采集到的溫度量轉(zhuǎn)換為數(shù)字量直接送到單片機中,而不需要進行A/D轉(zhuǎn)換。單片機將溫度傳感器采集的數(shù)據(jù)通過同步串行接口SSI將數(shù)據(jù)送到無線發(fā)射模塊中,無線發(fā)射模塊將數(shù)據(jù)壓縮打包,加校驗碼,以一定的頻率發(fā)送出去。2.3溫度采集電路溫度的檢測傳感器很多,傳統(tǒng)的測溫元件有熱電偶和熱電阻,而熱電偶和熱電阻測出的一般都是電壓,再轉(zhuǎn)換成對應(yīng)的溫度,需要比較多的外部硬件支持,硬件電路復(fù)雜,軟件調(diào)試復(fù)雜,制作成本高。根據(jù)產(chǎn)品的溫度要求,溫度精度要達(dá)到±0.5℃,所以內(nèi)槽溫度傳感器采用了美國DALLAS半導(dǎo)體公司生產(chǎn)的智能溫度傳感器DS18B20作為檢測元件,測溫范圍為-55℃到+125℃,分辨率最大可達(dá)0.0625℃。DS18B20可以直接讀出被測溫度值,而且采用3線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。DS18B20的性能特點如下:獨特的單線接口僅需要一個端口引腳進行通訊多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能無需外部器件可通過數(shù)據(jù)線供電,電壓范圍為3.0V--5.5V零待機功耗溫度以9或12位數(shù)字量讀出用戶可定義的非易失性溫度報警設(shè)置報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件負(fù)電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作DS18B20內(nèi)部結(jié)構(gòu)DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8個字節(jié)的存儲器,結(jié)構(gòu)如圖4所示。頭兩個字節(jié)包含測得的溫度信息,第三和第四字節(jié)是TH和TL的拷貝,是易失的,每次上電復(fù)位時被刷新。第五個字節(jié)為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值。該字節(jié)各位的定義如圖2-2所示。低5位一直為1,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動,R1和RO決定溫度轉(zhuǎn)換的精度位數(shù),即用來設(shè)置分辨率,定義方法見表1。圖2-2高速暫存RAM結(jié)構(gòu)圖由表2-2可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間就越長。因此,在實際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。表2-1配置寄存器表2-2DS18B20分辨率的定義規(guī)定高速暫存RAM的第六、七、八字節(jié)保留未用,表現(xiàn)為全邏輯1。第九字節(jié)讀出前面所有8個字節(jié)的CRC碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當(dāng)DS18B20接

溫馨提示

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

最新文檔

評論

0/150

提交評論