只需一步,快速開始
熱門: 51單片機(jī) | 24小時必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計
1.jpg (83.03 KB, 下載次數(shù): 159)
下載附件
2019-3-24 11:57 上傳
2.jpg (42.8 KB, 下載次數(shù): 116)
3.jpg (9.27 KB, 下載次數(shù): 117)
4.jpg (26.88 KB, 下載次數(shù): 119)
5.jpg (15.05 KB, 下載次數(shù): 117)
2019-3-24 11:58 上傳
6.jpg (10.76 KB, 下載次數(shù): 102)
sbit change= P2^3; //自動模式切換按鍵 sbit set = P2^2; //設(shè)置按鍵 sbit add = P2^1; //加按鍵 sbit sub = P2^0; //減按鍵 /********************************************************************** * 名稱 : KEY(); * 功能 : 按鍵控制 * 輸入 : 無 * 輸出 : 無 ***********************************************************************/ void KEY() { uint lum_mean,lum_all; uchar b,c; if(change==0) //自動切換按鍵按下 { delay(10); //去抖 if(change==0) //再次判斷按鍵按下 { buzz=0; //蜂鳴器鳴響 flag_auto=!flag_auto; //自動模式標(biāo)志位取反 if(flag_auto==1) //當(dāng)切換到手動模式時 首先將LED發(fā)光比例PWM設(shè)置在50% scale=20; } while(!change) display();buzz=1; //等待按鍵釋放 松開按鍵后關(guān)閉蜂鳴器、刷新顯示 } if(jiejin==0&&flag_jiejin==1) //接近傳感器檢測到障礙時 開啟報警 { buzz=0; flag_jiejin=0; } if(jiejin!=flag_jiejin) //接近傳感器檢測不到障礙時 關(guān)閉報警 { buzz=1; flag_jiejin=1; } if(set==0) //設(shè)置鍵按下時 { delay(10); if(set==0) { buzz=0; flag_set++; //設(shè)置變量++ if(flag_set==3) //加到3時回復(fù)回正常模式 flag_set=0; flag_bs=0; //按下設(shè)置 關(guān)閉報警 } while(!set) display(); buzz=1;//等待按鍵釋放 松開按鍵后關(guān)閉蜂鳴器、刷新顯示 } if(flag_set==1) //加鍵按鍵只有在設(shè)置狀態(tài)(flag_set!=0)時按下才有效 調(diào)分 { if(add==0) //加按鍵按下時 { delay(10); //消抖 if(add==0) { buzz=0; //蜂鳴器響 min++; //分++ if(min>=60) min=0; } while(!add) display(); buzz=1; //等待按鍵釋放 松開按鍵后關(guān)閉蜂鳴器、刷新顯示 } if(sub==0) //減按鍵按下時 { delay(10); //消抖 if(sub==0) { buzz=0; //蜂鳴器響 min--; //分-- if(min>0) min=59; } while(!sub) display(); buzz=1; //等待按鍵釋放 松開按鍵后關(guān)閉蜂鳴器、刷新顯示 } } if(flag_set==2) //調(diào)秒 { if(add==0) //加鍵按下 { delay(10); //消抖 if(add==0) { buzz=0; //蜂鳴器響 sec++; //秒++ if(sec>=60) sec=0; } while(!add) display(); buzz=1; //等待按鍵釋放 松開按鍵后關(guān)閉蜂鳴器、刷新顯示 } if(sub==0) //減鍵按下 { delay(10); if(sub==0) //消抖 { buzz=0; //蜂鳴器響 sec--; //秒-- if(sec<0) sec=59; } while(!sub) display(); buzz=1; //等待按鍵釋放 松開按鍵后關(guān)閉蜂鳴器、刷新顯示 } while(!sub); } if(flag_auto==0) //自動模式 { if(flag_rsd==1) //且有人在范圍內(nèi)時 環(huán)境發(fā)光強(qiáng)度控制燈光變化 { for(b=0;b<49;b++) //將空數(shù)組tt[]內(nèi)數(shù)值整體左移一位 { tt[ b]=tt[b+1]; //將后一數(shù)值放到前一位置 } tt[49]=ADC0809(); //將讀出的ad0809數(shù)值放入tt[49] for(c=0;c<50;c++) //將tt[]內(nèi)數(shù)值相加 { lum_all=lum_all+tt[c]; } lum_mean=lum_all/50; //將總數(shù)/50取出平均值 // lum_all=0; //將總數(shù)清零 if(lum_mean<=30) scale=1; //判斷取出平均值大小 小于30 發(fā)光強(qiáng)度0% else if(lum_mean>=150) scale=41; //大于150 發(fā)光強(qiáng)度100% else scale=((lum_mean-30)/3)+1; //其他值時將其計算得到發(fā)光強(qiáng)度 (計算目的是為了得到一個1-41之間的數(shù)值 控制燈光變化) } else scale=1; //沒有人在范圍內(nèi)時 將燈光亮度調(diào)至0% } else //手動模式下 { if(flag_set==0) //正常模式下 { if(add==0) //加鍵按下 { delay(10); if(add==0) { // buzz=0; //蜂鳴器響 scale++; //燈光比例++ if(scale>=41) scale=41; display(); } // while(!add) display(); buzz=1; } if(sub==0) //減鍵按下時 { delay(10); if(sub==0) { // buzz=0; //蜂鳴器響 scale--; //燈光比例-- if(scale>1) scale=1; display(); } // while(!sub) display(); buzz=1; } } } } 復(fù)制代碼
查看全部評分
使用道具 舉報
ljx944848837 發(fā)表于 2019-4-2 15:13 太強(qiáng)了,我找這個找好久,一直在思考怎么加學(xué)習(xí)時間功能
小YY嘿 發(fā)表于 2019-5-27 17:57 你下載了沒?
aking991 發(fā)表于 2019-12-30 09:05 根據(jù)你提供的原理來看,可省去檢測光敏的芯片,用MCU自身的ADC功能代替就行了
gemxie 發(fā)表于 2021-6-8 16:44 謝謝樓主分享了,先下載寫來學(xué)習(xí)
本版積分規(guī)則 發(fā)表回復(fù) 回帖后跳轉(zhuǎn)到最后一頁
小黑屋|51黑電子論壇 | 管理員QQ:125739409;技術(shù)交流QQ群281945664
Powered by 單片機(jī)教程網(wǎng)