版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
附錄A原理圖附錄B程序清單#include<reg52.h>#include<intrins.h>#include<UART.H>#defineucharunsignedchar //以后unsignedchar就可以用uchar代替#defineuintunsignedint //以后unsignedint就可以用uint代替sbitLED=P1^0; //模式指示燈,亮是自動模式,滅是手動模式sbitLamp=P1^4; //臺燈控制引腳sbitKey1=P1^1; //按鍵1,模式切換按鍵sbitKey2=P1^2; //按鍵2,亮度減少按鍵sbitKey3=P1^3; //按鍵3,亮度增加按鍵sbitADC_CS=P2^3; //ADC0832的CS引腳sbitADC_CLK=P2^0; //ADC0832的CLK引腳sbitADC_DAT=P2^1; //ADC0832的DI/DO引腳sbitModule=P2^2; //人體紅外檢測模塊sbitJDQ_OUT=P1^7;uchargCount=0; //全局計數(shù)變量uchargIndex; //亮度變量,0是最暗,9是最亮,一共10檔uintgTime=0; //計時變量,用于計時多久沒檢測到有人/*********************************************************///毫秒級的延時函數(shù),time是要延時的毫秒數(shù)/*********************************************************/voidDelayMs(uinttime){ uinti,j; for(i=0;i<time;i++) for(j=0;j<112;j++);}/*********************************************************///ADC0832的時鐘脈沖/*********************************************************/voidWavePlus(){ _nop_(); ADC_CLK=1; _nop_(); ADC_CLK=0;}/*********************************************************///獲取指定通道的A/D轉換結果/*********************************************************/ucharGet_ADC0832(){ uchari; uchardat1=0; uchardat2=0; ADC_CLK=0; //電平初始化 ADC_DAT=1; _nop_(); ADC_CS=0; WavePlus(); //起始信號 ADC_DAT=1; WavePlus(); //通道選擇的第一位 ADC_DAT=0; WavePlus(); //通道選擇的第二位 ADC_DAT=1; for(i=0;i<8;i++) //第一次讀取 { dat1<<=1; WavePlus(); if(ADC_DAT) dat1=dat1|0x01; else dat1=dat1|0x00; } for(i=0;i<8;i++) //第二次讀取 { dat2>>=1; if(ADC_DAT) dat2=dat2|0x80; else dat2=dat2|0x00; WavePlus(); } _nop_(); //結束此次傳輸 ADC_DAT=1; ADC_CLK=1; ADC_CS=1; if(dat1==dat2) //返回采集結果 returndat1; else return0;}/*********************************************************///定時器初始化/*********************************************************/voidTimerInit(){ TMOD=0x01; //使用定時器0,工作方式1 TH0=252; //給定時器0的TH0裝初值 TL0=24; //給定時器0的TL0裝初值 ET0=1; //定時器0中斷使能 EA=1; //打開總中斷 TR0 =1; //啟動定時器0}/*********************************************************///手動控制/*********************************************************/voidManualControl(){ //亮度減少 if((Key2==0)||(UART_Data==2)) //如果按鍵2被按下去 { UART_Data=0; if(gIndex>0) //只要當前亮度不為最低才能減少亮度 { gIndex--; //亮度降低一檔 DelayMs(300); //延時0.3秒 } } //亮度增加 if((Key3==0)||(UART_Data==3)) //如果按鍵3被按下去 { UART_Data=0; if(gIndex<9) //只要當前亮度不為最高才能增加亮度 { gIndex++; //亮度增加一檔 DelayMs(300); //延時0.3秒 } }}/*********************************************************///自動控制/*********************************************************/voidAutoControl(ucharnum){ if(num<59) //最亮 gIndex=9; elseif((num>65)&&(num<81)) //第二亮 gIndex=8; elseif((num>87)&&(num<103)) //第三亮 gIndex=7; elseif((num>109)&&(num<125)) gIndex=6; elseif((num>131)&&(num<147)) gIndex=5; elseif((num>153)&&(num<169)) gIndex=4; elseif((num>175)&&(num<191)) gIndex=3; elseif((num>197)&&(num<213)) gIndex=2; elseif((num>219)&&(num<235)) gIndex=1; elseif(num>241) //最暗 gIndex=0;}/*********************************************************///主函數(shù)/*********************************************************/voidmain(){ ucharret; TimerInit(); //定時器初始化 UART0_Init(); LED=0; //指示燈點亮(自動模式指示燈) ret=Get_ADC0832(); //獲取AD采集結果(環(huán)境光照強度) AutoControl(ret); //上電先進行一次自動亮度控制 AutoControl(ret+7); while(1) { /*模式切換控制*/ if((Key1==0)||(UART_Data==1)) //如果按鍵1被按下去 { UART_Data=0; LED=~LED; //切換LED燈狀態(tài) DelayMs(10); //延時消除按鍵按下的抖動 while(!Key1); //等待按鍵釋放 DelayMs(10); //延時消除按鍵松開的抖動 } if(UART_Data==4) { UART_Data=0; JDQ_OUT=~JDQ_OUT; } /*亮度控制*/ if(LED==1) //如果LED是滅的 { ManualControl(); //則進行手動控制 } else //如果LED是亮的 { if(gTime<60000) { ret=Get_ADC0832(); //獲取AD采集結果(環(huán)境光照強度) AutoControl(ret); //進行自動控制 DelayMs(200); } } /*檢測是否有人*/ if(Module==1) { gTime=0; //檢測到有人,則把60秒計時清零 } if(gTime>60000) //如果gTime的值超過了60000 { gTime=60000; //則把gTime的值重新賦值為60000,避免過大溢出 gIndex=0; //如果1分鐘檢測不到有人,則把臺燈熄滅 } }}/*********************************************************///定時器0服務程序,1毫秒/*********************************************************/voidTimer0(void)interrupt1{ TH0=252; //給定時器0的TH0裝初值 TL0=24; //給定時器0的TL0裝初值 gTime++; //每1毫秒,gTime變量加1 gCount++; //每1毫秒,gCount變量加1 if(gCount==10) //如果gCount加到10了 { gCount=0; //則將gCount清零,進入新一輪的計數(shù) if(gIndex!=0) //如果說臺燈不是最暗的(熄滅) { Lamp=0; //則把臺燈點亮 } } if(gCount==gIndex) //如果gCount計數(shù)到和gIndex一樣了 { if(gIndex!=9) //如果說臺燈不是最亮的 { Lamp=1; //則把臺燈熄滅 } }}#include<UART.H>volatileunsignedcharUART_Data=0;voidUART0_Init(void){ TMOD|=0X20; //T1方式2,8位自動重裝 TH1=0Xfd; TL1=0Xfd; //9600 TR1=1; //定時器1啟動 SM0=0; //設置串口的工作模式 SM1=1; //方式1 REN=1; //允許串口接收數(shù)據(jù) ES=1; //串口中斷應許 EA=1; //開啟中斷 }/******************************************************************************************************************////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////函數(shù)voidreceive(void)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版新型食用菌保健品區(qū)域總代銷售與售后服務合同3篇
- 二零二五年度環(huán)保節(jié)能產品推廣合同4篇
- 2025年陶瓷原料質量檢測與認證合同2篇
- 2025年度門禁系統(tǒng)設備租賃與運營維護協(xié)議4篇
- 二手車交易市場租賃合同范本2024年適用
- 二零二五年度辦公樓窗簾節(jié)能改造承包合同4篇
- 2025年度智慧停車場設計與運營服務合同4篇
- 2025年文化中心場地租賃合同終止及合作開發(fā)意向書3篇
- 天津市應急保障2025年度專用車輛租賃合同2篇
- 二零二五年度土地承包經營權轉讓合同流轉規(guī)范版
- 2024-2025學年山東省濰坊市高一上冊1月期末考試數(shù)學檢測試題(附解析)
- 江蘇省揚州市蔣王小學2023~2024年五年級上學期英語期末試卷(含答案無聽力原文無音頻)
- 數(shù)學-湖南省新高考教學教研聯(lián)盟(長郡二十校聯(lián)盟)2024-2025學年2025屆高三上學期第一次預熱演練試題和答案
- 決勝中層:中層管理者的九項修煉-記錄
- 幼兒園人民幣啟蒙教育方案
- 單位就業(yè)人員登記表
- 衛(wèi)生監(jiān)督協(xié)管-醫(yī)療機構監(jiān)督
- 記錄片21世紀禁愛指南
- 腰椎間盤的診斷證明書
- 移動商務內容運營(吳洪貴)任務七 裂變傳播
- 單級倒立擺系統(tǒng)建模與控制器設計
評論
0/150
提交評論