單片機課設(shè)-遙控器控制流水燈流速資料_第1頁
單片機課設(shè)-遙控器控制流水燈流速資料_第2頁
單片機課設(shè)-遙控器控制流水燈流速資料_第3頁
單片機課設(shè)-遙控器控制流水燈流速資料_第4頁
單片機課設(shè)-遙控器控制流水燈流速資料_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第一章設(shè)計任務(wù)及要求a)設(shè)計實現(xiàn)功能STC12C5A60S2(引腳排序及基本功能同AT89S51)作為主控芯片,設(shè)計利用LCD1602顯示時間、溫度和遙控接收電路,并使發(fā)光二級管循環(huán)點亮。一是擴展DS12C887外圍電路,實現(xiàn)時間信息顯示;二是DS18B20溫度信息顯示的設(shè)計;三是利用遙控器設(shè)置參數(shù),控制發(fā)光二級管循環(huán)點亮的速度。b)原理圖設(shè)計1.原理圖設(shè)計要符合項目的工作原理,連線要正確。2.圖中所使用的元器件要合理選用,電阻、電容等器件的參數(shù)要正確標(biāo)明。c)程序調(diào)計1.根據(jù)要求,將總體功能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。2.根據(jù)總體要求及分解的功能模塊,確定各功能模塊之間的關(guān)系,設(shè)計出完整的程序流程圖。d)程序調(diào)試1.編寫相關(guān)程序,并進行仿真。2.將程序下載到單片機,進行運行調(diào)試。e)設(shè)計說明書1.原理圖設(shè)計說明簡要說明設(shè)計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。2.程序設(shè)計說明對程序設(shè)計總體功能及結(jié)構(gòu)進行說明,對各子模塊的功能以及各子模塊之間的關(guān)系作較詳細的描述。3.畫出工作原理圖,程序流程圖并給出相應(yīng)的程序清單。1.2設(shè)計基本要求1.認真認識設(shè)計的意義,掌握設(shè)計工作程序,學(xué)會使用工具書和技術(shù)參考資料,并培養(yǎng)科學(xué)的設(shè)計思想和2.提高模型建立和設(shè)計能力,學(xué)會應(yīng)用相關(guān)設(shè)計資料進行設(shè)計計算的方法。3.提高獨立分析、解決問題的能力,逐步增強實際應(yīng)用訓(xùn)練。通順,電路圖內(nèi)容完整、清楚、規(guī)范。2第二章設(shè)計原理STC12C5A60S2是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU一種靈活性高且價廉的方案。STCCAS腳圖3此作為輸入時,P2口的管腳被外部拉低,P程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是PP3.0P3.1P3.2P3.3P4P3.5P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。4字符液晶有兩種,一種顯示的是綠色背光黑色字體,另一種顯示藍色背光白色字體,目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的。本課題所用1602液晶模塊,顯示屏是藍2468第3腳:VEE為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高E1357952.2.31602字符液晶使用方法(1)基本操作時序EHD0~D7=狀態(tài)字無EH寫數(shù)據(jù)無(2)RAM有80個8位的RAM緩沖區(qū),其地址和屏幕的對應(yīng)關(guān)系如下圖所示(3)1602字符液晶字庫這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的顯示出來,我們就能看到字母“A”。6SCDS12C887實時時鐘芯片功能豐富,可以用來直接代替IBMPC上的時鐘日歷芯片DS12887,同時,它秒等時間信息,其內(nèi)部又增加了世紀寄存器,從而利用硬件電路解決子“千年”問題;DS12C887自帶有此外用戶還可對DS12C887進行編程以實現(xiàn)多種方波輸出,并可對其內(nèi)部的三路中斷通過軟件進行屏蔽。72.3.2DS12C887引腳介紹換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能夠正常工作。 號的輸出。AD0~AD7:復(fù)用地址數(shù)據(jù)總線,該總線采用時分復(fù)用技術(shù),在總線周期的前半部分,出現(xiàn)在AD0~AD7 (14)AS:地址選通輸入腳,在進行讀寫操作時,AS的上升沿將AD0~AD7上出現(xiàn)的地址信息鎖存到 (17)DS/RD:數(shù)據(jù)選擇或讀輸入腳,該引腳有兩種工作模式。當(dāng)MOT接VCC時,選用Motorola工作模CS輸入,低電平有效。在掉電時,其內(nèi)部控制寄存器不受影響。82.3.3DS12C887內(nèi)部地址空間DS18B20也支持“一線總線”接口,測量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為±2°C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。9GND:為電源地;DQ:為數(shù)字信號輸入/輸出端;VDD:為外接供電電源輸入端(在寄生電源接線方式時接地)一體化的紅外接收裝置將遙控信號的接收、放大、檢波、整形集于一身,并且輸出可以讓單片機識別的TTL信號,這樣大大簡化了接收電路的復(fù)雜程度和電路的設(shè)計工作,方便使用。在本系統(tǒng)中我們采用紅外一體化接收頭HS0038。HS0038黑色環(huán)氧樹脂封裝,不受日光、熒光燈等光源干擾,內(nèi)附磁屏蔽,功耗HS0038為直立側(cè)面收光型。它接收紅外信號頻率為38kHz,周期約26μs,同時能對信號進行放大、檢波、隨著家用電器、視聽產(chǎn)品的普及,自動化辦公設(shè)備的廣泛應(yīng)用和網(wǎng)絡(luò)化的不斷發(fā)展,越來越多的產(chǎn)品具有了待機功能(如遙控開關(guān)、網(wǎng)絡(luò)喚醒、定時開關(guān)、智能開關(guān)等)。產(chǎn)品的待機功能實現(xiàn)遙控操作,極大地方便了我們的生活。在家庭或工業(yè)控制現(xiàn)場,一些手動操作不太方便的場合,可以使用現(xiàn)有遙控器通過設(shè)置代替手動操作,比如可以利用家中現(xiàn)有的彩電遙控器,控制其它沒有遙控功能的電器(如電燈、計GND:為電源地;Vs:為外接供電電源輸入端OUT:為紅外接收信號輸出端;DS12C8DS12C8時信間息HS0038紅外接收頭遙信控息系統(tǒng)工作原理圖DSDS18B20器溫信度息時間溫度遙控信息流速信息LCD1602液晶顯示鎖存器和流水燈示的亮度。5遙控接收模塊電路設(shè)計CLS第四章軟件設(shè)計4.1系統(tǒng)程序流程圖是是否否定時器定時器0中斷函數(shù)開始是否是否讀回TH1的值是否按鍵按下流速變量的值/**********************************************************************************************定義及子程序的聲明*********************************************************************************************************/#definewr_comXBYTE[0xC000]#definewr_dataXBYTE[0xC100]#definerd_comXBYTE[0xC200]#definerd_dataXBYTE[0xC300]//寫命令//寫數(shù)據(jù)//讀命令//讀數(shù)據(jù)/*子程序聲明*/voidwrite_cmd(BYTEcmd);voidwrite_data(BYTEdat);voidwrite_string(BYTE*s);voidset_display_place(BYTEline,column);voidwrite_string_lcd(BYTEline,column,unsignedchar*string);voidwrite_data_lcd(BYTEline,column,dat);voidlcd_init(void);voidcrti(unsignedlongdat);voidcrt_r(floatx,unsignedcharN);voidDelay(WORDn);/************************************************************************Functionname:Descriptions:write_cmd************************************************************************/voidwrite_cmd(BYTEcmd){do{dl=rd_com;}while((dl&0x80)!=0);//判忙wr_com=cmd;}/**********************************************************************Functionname:Descriptions:write_data寫入數(shù)據(jù)**********************************************************************/voidwrite_data(BYTEdat){do{dl=rd_com;}while((dl&0x80)!=0);//判忙wr_data=dat;}/***********************************************************************Functionname:Descriptions:write_string寫入字符串***********************************************************************/voidwrite_string(BYTE*s){while(*s!='\0'){write_data(*s);}//'\0'為字符串結(jié)束標(biāo)志}/**********************************************************************Functionname:Descriptions:set_display_place設(shè)置字符的顯示位置**********************************************************************/voidset_display_place(BYTEline,column){essif(line==1){address=0x80+column;}elseif(line==2){address=0xc0+column;}write_cmd(address);}/*******************************************************************Functionname:Descriptions:將字符串寫到指定的位置顯示在lcd的特定位置*******************************************************************/voidwrite_string_lcd(BYTEline,column,unsignedchar*string){set_display_place(line,column);write_string(string);}/******************************************************************Functionname:Descriptions:將字符寫到指定的位置顯示在lcd的特定位置*******************************************************************/voidwrite_data_lcd(BYTEline,column,dat){set_display_place(line,column);write_data(dat);}/***************************************************************液晶模塊初始化**********************************************************************************/voidlcd_init(void){write_cmd(0x38);//write_cmd(0x38);//write_cmd(0x06);//write_cmd(0x0c);//write_cmd(0x01);//}/***************************************************************顯示長整型數(shù)據(jù)*******************************************************************************/voidcrti(unsignedlongdat){BYTEdhi,dli,ddi,dei;unsignedlongdatah;unsignedlongdatal;datahdat;hiif(datah>=10){{datah/=10;dhi+;}while(datah>=10);datahdat;ddi=dhi;for(dli=0;dli<dhi;dli++){atalfor(dei=0;dei<ddi;dei++){datal*=10;}datah=dat/datal;dat=dat%datal;datah+=0x30;write_data(datah);ddi--;}dat+=0x30;write_data(dat);}{dat=dat+0x30;write_data(dat);}}/***************************************************************浮點數(shù)顯示**********************************************************************************/voidcrt_r(floatx,unsignedcharN){unsignedintdath;unsignedintdatl;unsignedintdat;if(x<0.0){dat=0x2d;write_data(dat);x=fabs(x);}dath=(int)x;crti(dath);{datxe;write_data(dat);for(dli=0;dli<N;dli++){dat*=10;}dath=(int)(x*dat)-dath*dat;for(dli=1;dli<N;dli++){dat/=10;datl=dath/dat;datl+=0x30;write_data(datl);dath%=dat;}crti(dath);}}/***************************************************************延遲函數(shù)**********************************************************************************/voidDelay(WORDn){WORDx;while(n--){x=500;while(x--);}}/**********************************************************************************************定義及子程序的聲明*********************************************************************************************************//*DS12887口地址*/#define#define#define#define#define#define#define#define#define#defineDS_BSecondXBYTE[0x100A]XBYTE[0x100B]XBYTE[0x100C]XBYTE[0x1009]XBYTE[0x1008]XBYTE[0x1007]XBYTE[0x1006]XBYTE[0x1004]XBYTE[0x1002]XBYTE[0x1000]//寄存器A//寄存器B//寄存器C//年//月//日//星期//時//分//秒/*子程序聲明*/voidDS_init();voidcrt_time(BYTEline);voidwrite_time();/***************************************************************DS12887初始化程序****************************************************************************/voidDS_init(){SAxDSBx12;}/***************************************************************顯示時間*********************************************************************************/voidcrt_time(BYTEline){iset_display_place(line,0);dli=Month;dhi=dli&0xf0;dhi>>=4;dhi+=0x30;dli&=0x0f;dli+=0x30;write_data(dhi);write_data(dli);dli=0x2d;write_data(dli);iDaydhi=dli&0xf0;dhi>>=4;dhi+=0x30;dli&=0x0f;dli+=0x30;write_data(dhi);write_data(dli);dli=0x20;write_data(dli);write_data(dli);write_data(dli);dli=Hour;dhi=dli&0xf0;dhi>>=4;dhi+=0x30;dli&=0x0f;dli+=0x30;write_data(dhi);write_data(dli);dli=0x3a;write_data(dli);dli=Minute;dhi=dli&0xf0;dhi>>=4;dhi+=0x30;dli&=0x0f;dli+=0x30;write_data(dhi);write_data(dli);dli=0x3a;write_data(dli);dli=Second;dhi=dli&0xf0;dhi>>=4;dhi+=0x30;dli&=0x0f;dli+=0x30;write_data(dhi);write_data(dli);}/********************************************************************DS12887時間設(shè)置********************************************************************/voidwrite_time(){DSAxf;DS_B|=0x80;YearsxMonth0x12;Week=0x01;Hourx16;Minutex4;Second=0x00;DS_B&=0x7f;}//寄存器A//年//月//日//星期//時//分//秒//寄存器A/**********************************************************************************************定義及子程序的聲明*********************************************************************************************************/sbitDS1820_DQ=P1^7;//單總線引腳chartemperature[2];//存放溫度數(shù)據(jù)floatwen_val;/*子程序聲明*/voidDS18B20_Init();bitDS1820_Reset();voidDS1820_WriteData(BYTEwData);BYTEDS1820_ReadData();voidDelayXus(WORDn);voidread_wendu();voidcrt_wendu(BYTEline,column);/***********************************************************DS18B20初始化*函數(shù)名稱:DS1820_WriteData()*說明:本初始化程序可以不要,因為18B20在出廠時就被配置為12位精度了**********************************************************/voidDS18B20_Init(){DS1820_Reset();WriteDataxCCROMDS1820_WriteData(0x4E);//寫暫存器DS1820_WriteData(0x20);//往暫存器的第三字節(jié)中寫上限值DS1820_WriteData(0x00);//往暫存器的第四字節(jié)中寫下限值DS1820_WriteData(0x7F);//將配置寄存器配置為12位精度DS1820_Reset();}/***********************************************************DS1820復(fù)位及存在檢測(通過存在脈沖可以判斷DS1820是否損壞)*函數(shù)名稱:DS1820_Reset()*說明:函數(shù)返回一個位標(biāo)量(0或1)flag=0存在,反之flag=1不存在**********************************************************/bitDS1820_Reset(){DS1820_DQ=0;//拉低總線DelayXus(480);//延時480微秒,產(chǎn)生復(fù)位脈沖DS1820_DQ=1;//釋放總線DelayXus80微秒對總線采樣flag=DS1820_DQ;//對數(shù)據(jù)腳采樣DelayXus(400);//延時400微秒等待總線恢復(fù)returnflag//根據(jù)flag的值可知DS1820是否存在或損壞,可加聲音告警提示DS1820故障}/***********************************************************函數(shù)名稱:DS1820_WriteData()**********************************************************/voidDS1820_WriteData(BYTEwData){for(i=8;i>0;i--){DS1820_DQ=0;//拉低總線,產(chǎn)生寫信號DSDQ=wData&0x01;//發(fā)送1位DS1820_DQ=1;//釋放總線,等待總線恢復(fù)wData>>=1;//準備下一位數(shù)據(jù)的傳送}}/***********************************************************函數(shù)名稱:DS1820_ReadData()**********************************************************/BYTEDS1820_ReadData(){for(i=8;i>0;i--){TmepData>>=1;DS1820_DQ=0;//拉低總線,產(chǎn)生讀信號DS1820_DQ=1;//釋放總線,準備讀數(shù)據(jù)yXusif(DS1820_DQ==1){TmepData|=0x80;}DS1820_DQ=1;//拉高總線,準備下一位數(shù)據(jù)的讀取.}return(TmepData);//返回讀到的數(shù)據(jù)}/*******************************************************************************************************************/voidDelayXus(WORDn){while(--n);}/**********************************************************讀取溫度程序**********************************************************/voidread_wendu(){DS1820_Reset();//復(fù)位iteDataxccROMDS1820_WriteData(0x44);//溫度轉(zhuǎn)換命令DS1820_Reset();//復(fù)位iteDataxccROMDS1820_WriteData(0xbe);//讀DS1820溫度暫存器命令for(i=0;i<2;i++){temperature[i]=DS1820_ReadData();//采集溫度}DS1820_Reset();//復(fù)位,結(jié)束讀數(shù)據(jù)}/**********************************************************顯示溫度程序**********************************************************/voidcrt_wendu(BYTEline,column){eadwenduah=temperature[1]<<4;ah&=0xf0;al=temperature[0]>>4;al&=0x0f;ah=ah|al;al=temperature[0]&0x0f;if((ah&0x80)!=0){ifal=0){ah=~ah;ah=ah+1;}{ah=~ah;al=~al;al=al+1;al&=0x0f;}wen_val=ah*(-1.0)+al*(-0.0625);}{wen_val=ah*1.0+al*0.0625;}set_display_place(line,column);crt_r(wen_val,1);write_data(0x20);}/**********************************************************************************************定義及子程序的聲明*********************************************************************************************************/ykflagkknumBYTExdatay_k_dm[6];BYTExdatayk_val_l[50];BYTExdatayk_val_h[50];BYTEcodetable[]={0x45,0x46,0x47,0x44,0x40,0x43,0x07,0x15,0x09,0x16,0x19,0x0d,0x0c,0x18,0x5e,0x08,0x1c,0x5a,0x42,0x52,0x4a};/*子程序聲明*/voidtimer_int0_init();voidykmscan(BYTEbh);voidykm_WriteData(BYTEdat);/***********************************************************定時器和外部中斷初始化*函數(shù)名稱:timer_int0_init()**********************************************************/voidtimer_int0_init(){TMOD=0x11;TH0=0xdc;TL0=0x00;TR0=1;TR1=0;ykflag=0;}/***********************************************************遙控器鍵值掃描*函數(shù)名稱:ykmscan()**********************************************************/voidykmscan(BYTEbh){for(i=0;i<21;i++){if(bh==table[i]){yknum=i+1;break;}}}/***********************************************************遙控碼顯示*函數(shù)名稱:ykm_WriteData()**********************************************************/voidykm_WriteData(BYTEdat){a=dat/16;if(a>=10)a+=7;bdat;if(b>=10)b+=7;write_data(a+0x30);write_data(b+0x30);write_data(0x48);}/***********************************************//*****************外部中斷0***************//***********************************************/voidint_int0(void)interrupt0//using2{TR1=0;if(ykflag==0){ykflag=1;y_k=0;TMOD=0x10;}{yk_val_l[y_k]=TL1;yk_val_h[y_k]=TH1;}y_k++;TL1=0;TH1=0;TR1=1;}/************************************************/*****************定時器1****************//***********************************************/voidT1_int(void)interrupt3//using1{BYTEblbhcl,ch;ykflag=0;TR1=0;if(y_k==36){bh=yk_val_h[1];ifbh=48){write_cmd(0x06);set_display_place(2,0);for(cl=0;cl<5;cl++){for(ch=0;ch<8;ch++){if(yk_val_h[bl]>6){bhx80;}}y_k_dm[cl]=~bh;}write_cmd(0x06);set_display_place(2,0);for(bl=0;bl<12;bl++)write_data(0x20);set_display_place(2,0);bh=y_k_dm[3];ykm_WriteData(bh);write_data(0x20);ykmscan(bh);write_data(0x30+yknum/10);write_data(0x30+yknum%10);ledf=yknum*8;}}}/**********************************************************************************************定義及子程序的聲明************************************

溫馨提示

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

評論

0/150

提交評論