資源簡介
帶時間顯示的室內燈光控制系統,控制有光控、紅外人體開關控制、時間控制和手動控制四種方式。是本人上學期的課程設計。
代碼片段和文件信息
////////////////////////////////////////////////
//////此系統的功能是在晚上而且有人時自動開燈////
//////白天和晚上無人以及晚上有人但睡覺時關燈////
////晚上睡覺時按一下睡眠開關就能關燈而不受光////
////控和人體紅外控制的影響,再按一下又可以燈////
////滅,按了睡眠開關后那光和紅外控制不起作用////
////所以我設置了早上八點后自動恢復功能來,讓////
////此兩種控制起作用,而避免了早上起床后要按////
////開關才能讓其起作用的麻煩////////////////////
////////////////////////////////////////////////
#include
#include
#define?uchar?unsigned?char
#define?uint??unsigned?int
sbit?DQ=P3^0; //溫度傳感的DQ腳
sbit?lcden=P3^1; //LCD?的E腳
sbit?lcdrs=P3^2; //LCD的RS腳
sbit?cro_l=P3^3; //光控中斷控制腳
sbit?cro_h=P3^4; //人體紅外中斷控制腳
sbit?lamp=P3^5;
sbit?wr=P3^6; //AD轉換的wr腳
sbit?rd=P3^7; //AD轉換的rd腳
sbit?cro_t=P1^7; //時間控制中斷腳
bit?flag_init=0;
uchar?code?ascII[]={
0x300x310x320x33
0x340x350x360x37
0x380x39}; //0到9的ASCII碼
uchar?code?tbweek[][9]={
{0x4d0x6f0x6e0x640x610x79}
{0x540x750x650x730x640x610x79}
{0x570x650x640x6e0x650x730x640x610x79}
{0x540x680x750x720x730x640x610x79}
{0x460x720x690x640x610x79}
{0x530x640x740x750x720x640x610x79}
{0x530x750x6e0x640x610x79}}; //星期一到星期天在液晶中顯示用的代碼
uint?tensunitsdeciletmpun_guang;
uchar?timesecminhourweek;
float?tmprt;
void?time_init();
void?lcd_init();
void?ADC_init();
void?write_com(uchar?com);
void?write_data(uchar?date);
void?DS18B20_init();
void?Readtemperature();
void?Writeonechar(uchar?dat);
uchar?Readonechar();
void?displaytt(uchar?sec1uchar?min1uchar?hour1);
void?displaytemp();
void?displaywe();
void?keyscan();
void?delay(uint?z);
void?Delay_uS(uint?tt);
void?main()
{
??? lcd_init(); //液晶初始化
time_init(); //定時器初始化
DS18B20_init();? //溫度傳感器初始化
hour=12; //初始時間設為12點
????while(1)
????{
?????? Readtemperature();?????//讀DS18B20檢測到的溫度
displaytt(secminhour); //顯示時間
? keyscan(); //按鍵掃描
? displaytemp(); //顯示溫度
displaywe(); //顯示星期
ADC_init();
if(un_guang>52) //(假設)夜晚光強少于150lx
cro_l=1;
else //白天光強大于150lx,AD轉換后的數少于52,給中斷口一個電平,使進入燈滅函數
cro_l=0;
if(cro_h==1)
lamp=0;
else //人體紅外檢測到有低電平(沒人時),控制燈滅
lamp=1;
if(hour==8) //早上八點讓被睡眠開關置零的P1^7口恢復高電平,傳感器開始正常工作
cro_t=1;
delay(21);
????????while(time>=16) //用大于等于代替等于才能確保進去
?{?
time=0;
???? sec++;
while(sec==60)
?{
??sec=0;
??min++;
??while(min==60)
{
?????min=0;
?????hour++;
?????while(hour==24)
???{
?sec=0;
?min=0;
?hour=0;
?week++;
?while(week==7)
week=0;
?? ???}
}
?
?}
??}??
???}
}
void?lcd_init()
{
lcden=0; //寫狀態,使能為高脈沖
write_com(0x38); //顯示模式設置
write_com(0x01); //顯示清屏
write_com(0x0c); //開顯示,光標不顯示
write_com(0x06); //光標移動設置
write_com(0x80+0x00); //設置數據地址指針
}
void?write_com(uchar?com) //往LCD寫指令
{
lcdrs=0;
P2=com;
delay(2);
lcden=1;
delay(2);
lcden=0;
}
void?write_data(uchar?date) //往LCD寫數據
{
lcdrs=1;
P2=date;
delay(2);
lcden=1;
delay(2);
lcden=0;
}
void?displayt
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7516??2009-02-09?11:47??帶時間溫度顯示的室內燈光控制系統(C程序+Proteus圖)\sushe_lamp.c
?????文件???????2001??2008-12-11?16:01??帶時間溫度顯示的室內燈光控制系統(C程序+Proteus圖)\sushe_lamp.Uv2
?????文件???????5934??2009-01-03?00:50??帶時間溫度顯示的室內燈光控制系統(C程序+Proteus圖)\sushe_lamp.hex
?????文件?????188899??2009-02-27?10:48??帶時間溫度顯示的室內燈光控制系統(C程序+Proteus圖)\sushe_lamp.DSN
?????目錄??????????0??2009-02-09?11:49??帶時間溫度顯示的室內燈光控制系統(C程序+Proteus圖)
-----------?---------??----------?-----??----
???????????????204350????????????????????5
評論
共有 條評論