1、具体功能:
(1)使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯;
(2)教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期;
(3)利用光敏电阻检测教室的光线强弱;
(4)系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式,在自动模式下,可以设定定时时间段,在定时时间段内,当教室有人(人数大于0)的情况下,如果光线暗弱则自动打开照明灯,照明灯点亮个数根据人数而定,不在定时时间段或者教室无人的情况下,关闭所有照明灯,另外在手动模式下,可以通过手动开关控制照明灯的亮灭,人数统计部分仍然生效;
2、硬件电路图:
用51单片机STC89C52、时钟芯片DS1302、液晶屏LCD1602、光敏电阻、红外对管、设计一个教室智能照明控制系统。电路图:
3、部分代码
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar time_data[7];
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //Êý¾ÝµÄµØÖ·
uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar code table1[]="C: 00|2000/00/00";
uchar code table2[]="T: 00|00:00:00 0";
uchar code table3[]=" "; //ÇåÆÁÄÚÈÝ
uchar code table4[]=" Set Real Time ";
uchar code table5[]=" Set Open Time ";
uchar code table6[]=" Start Time: ";
uchar code table7[]=" 00:00:00 ";
uchar code table8[]=" End Time: ";
uchar code table9[]="Date: 2000/00/00";
uchar code table0[]="Time: 00:00:00 0";
bit Adjust; //µ÷½Ú±ê־룬=1±íʾ½øÈëµ÷½Úģʽ£¬=0ÊÇÕý³£Ä£Ê½
bit Auto_flg; //×Ô¶¯Ä£Ê½±ê־룬=1±íʾÊÖ¶¯Ä£Ê½£¬=0ÊÇ×Ô¶¯Ä£Ê½
sbit rs=P1^0; //LCD1602
sbit rw=P1^1; //LCD1602
sbit e=P1^2; //LCD1602
sbit sck=P2^5; //ʱÖӶ˿Ú
sbit io=P2^6; //ʱÖӶ˿Ú
sbit rst=P2^7; //ʱÖӶ˿Ú
sbit SELT =P1^6; //Ñ¡Ôñ¼ü
sbit ENTER=P1^7; //È·Èϼü
sbit UP =P3^0; //¼Ó¼ü
sbit DOWN =P3^1; //¼õ¼ü
sbit MODE =P3^2; //Çл»°´¼ü½Ó¿Ú
sbit SWITCH=P3^3; //ÊÖ¶¯¿ª¹Ø
sbit AUTO_LED=P1^3; //×Ô¶¯Ä£Ê½µÆ½Ó¿Ú
sbit HAND_LED=P1^4; //ÊÖ¶¯µÆ½Ó¿Ú
sbit LAMP1=P3^4; //µÆ½Ó¿Ú
sbit LAMP2=P3^5; //µÆ½Ó¿Ú
sbit LAMP3=P3^6; //µÆ½Ó¿Ú
sbit LAMP4=P3^7; //µÆ½Ó¿Ú
sbit LIGHT1=P2^0; //¹âÏß¼ì²â¶Ë¿Ú
sbit IN1=P2^2;
sbit OUT1=P2^1;
sbit DQ=P1^5; //ζÈÊý¾Ý¿Ú
uchar Select_num; //Ñ¡Ôñ°´¼ü°´Ï´ÎÊý
uchar Enter_num; //È·ÈÏ°´¼ü°´Ï´ÎÊý
uchar Switch_num; //ÊÖ¶¯¿ª¹Ø°´¼ü°´Ï´ÎÊý
float Year,Month,Day,Hour,Minute,Second; //ʱ¼äÉèÖÃÖµ
uchar Week;
float Hour_H,Minute_H,Second_H; //ÉèÖÿªÊ¼Ê±¼ä
float Hour_L,Minute_L,Second_L; //ÉèÖýáÊøʱ¼ä
int Value1; //ÈËÊý
uchar IN1_flag=0;
uchar OUT1_flag=0;
uint Count; //T0¶¨Ê±Æ÷ÖжϼÆÊý´ÎÊý
uchar Miao;
int temperature; //È«¾Ö±äÁ¿ ζÈ
void read_rtc();
/**************************************************LCD1602ÏÔʾ*******************************************************************/
void delay1(uint z) //ÑÓʱº¯Êý
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void write_com(uchar com) //дָÁÊý
{
rw=0;
delay1(5);
rs=0;
delay1(5);
e=1;
delay1(5);
P0=com;
delay1(5);
e=0;
delay1(5);
}
void write_date(uchar date) //дÊý¾Ýº¯Êý
{
rw=0;
delay1(5);
rs=1;
delay1(5);
e=1;
delay1(5);
P0=date;
delay1(5);
e=0;
delay1(5);
}
void init() //³õʼ»¯º¯Êý
{
uchar num;
Year=17;
Month=1;
Day=1;
Hour=15;
Minute=30;
Second=50;
Week=1;
Hour_H=22;
Minute_H=0;
Second_H=0;
Hour_L=18;
Minute_L=0;
Second_L=0;
e=0; // ʱÐò±íe³õʼΪ0
write_com(0x38); //ÉèÖÃ16*2ÏÔʾ£¬5*7µãÕó£¬8λÊý¾Ý½Ó¿Ú
write_com(0x0c); //ÉèÖùâ±ê
write_com(0x06); //¹â±ê×Ô¶¯¼Ó1,¹â±êÊäÈ뷽ʽ
write_com(0x01); //ÇåÆÁ
write_com(0x80); //ÉèÖóõʼÏÔʾλÖÃ
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay1(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table2[num]);
delay1(5);
}
}
void SetTime_dispaly(uchar add,uchar dat) //µÚÒ»¸ö£º²ÎÊýµÄµØÖ·£¬µÚ¶þ¸ö£º²ÎÊýµÄÄÚÈÝ
{
uchar shi,ge;
shi=dat/10; //°ÑʮλÌáÈ¡³öÀ´
ge=dat%10; //°Ñ¸öλÌáÈ¡³öÀ´
write_com(add); //ҪдµÄµØÖ·
write_date(0x30+shi); //ʮλµÄÄÚÈÝ 1602×Ö·û¿â
write_date(0x30+ge); //¸öλµÄÄÚÈÝ 1602×Ö·û¿â
}
void Week_dispaly(uchar add,uchar dat) //µÚÒ»¸ö£º²ÎÊýµÄµØÖ·£¬µÚ¶þ¸ö£º²ÎÊýµÄÄÚÈÝ
{
write_com(add); //ҪдµÄµØÖ·
write_date(0x30+dat); //ʮλµÄÄÚÈÝ 1602×Ö·û¿â
}
void Date_dispaly(uchar add,uchar dat) //µÚÒ»¸ö£º²ÎÊýµÄµØÖ·£¬µÚ¶þ¸ö£º²ÎÊýµÄÄÚÈÝ
{
uchar shi,ge;
shi=dat/16; //°ÑʮλÌáÈ¡³öÀ´
ge=dat%16; //°Ñ¸öλÌáÈ¡³öÀ´
write_com(add+3); //ҪдµÄµØÖ·
write_date(0x30+shi); //ʮλµÄÄÚÈÝ 1602×Ö·û¿â
write_date(0x30+ge); //¸öλµÄÄÚÈÝ 1602×Ö·û¿â
}
void LCD_Clean(uchar i) //Òº¾§ÆÁÇå³ýÏÔʾ
{
uchar num;
if(i==1)
{
write_com(0x80); //ÉèÖóõʼÏÔʾλÖÃ
for(num=0;num<16;num++) //ÏÔʾµÚÒ»ÐÐÄÚÈÝ
{
write_date(table3[num]);
delay1(1);
}
}
if(i==2)
{
write_com(0x80+0x40);
for(num=0;num<16;num++) //ÏÔʾµÚ¶þÐÐÄÚÈÝ
{
write_date(table3[num]);
delay1(1);
}
}
}
void LCD_Display_String(unsigned char line,unsigned char *string)
{ //Òº¾§ÆÁÏÔʾÄÚÈÝ£¬°ÑÒªÏÔʾµÄÄÚÈÝдµ½¶ÔÓ¦µÄλÖÃ
unsigned char i;
unsigned char address=0;
if(line==1)
{
address=0x80; //0X80ÊǵÚ1ÐеĵÚ1¸öλÖà ,0x81µÚ2λ
}
else if(line==2)
{
address=0x80+0x40; //0X80+0x40ÊǵÚ2ÐеĵÚ1¸öλÖà ,0X80+0x40+1ÊǵÚ2ÐеÚ2λ
}
for(i=0;i<16;i++)
{
write_com(address);
write_date(string[i]);
address++;
}
}
/**********************************DS1302ʱÖÓ***************************************/
void Time_Display(void)
{
read_rtc();
Date_dispaly(0x80+0x40+9,time_data[6]); //ÏÔʾÃë
Date_dispaly(0x80+0x40+6,time_data[5]); //ÏÔʾ·Ö
Date_dispaly(0x80+0x40+3,time_data[4]); //ÏÔʾʱ
Date_dispaly(0x80+11,time_data[3]); //ÏÔʾÈÕ
Date_dispaly(0x80+8,time_data[2]); //ÏÔʾÔÂ
Week_dispaly(0x80+0x40+15,time_data[1]); //ÏÔʾÖÜ
Date_dispaly(0x80+5,time_data[0]); //ÏÔʾÄê
// Year/10*16+Year%10
Hour=time_data[4]/16*10+time_data[4]%16;;
Minute=time_data[5]/16*10+time_data[5]%16;;
Second=time_data[6]/16*10+time_data[6]%16;;
}
void write_ds1302_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
sck=0;
io=dat&0x01; //×¼±¸Êý¾Ý,´Ó×îµÍλ¿ªÊ¼
dat=dat>>1;
sck=1;
}
}
void write_ds1302(uchar add,uchar dat)
{
rst=0;
_nop_(); //CPUÔµØ̤²½
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add); //´«µØÖ·
write_ds1302_byte(dat); //´«Êý¾Ý
rst=0; //²»ÊÜÆäËûÓ°Ïì
_nop_();
io=1; //ÊÍ·Å
sck=1;
}
uchar read_ds1302(uchar add)
{
uchar i,value;
rst=0;
_nop_(); //CPUÔµØ̤²½
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>1;
sck=0;
if(io)
value=value|0x80;
sck=1;
}
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
return value;
}
void set_rtc() //ÉèÖÃʱ¼ä
{
uchar i,j;
for(i=0;i<7;i++) //ת»»BCDÂë
{
j=time_data[i]/10;
time_data[i]=time_data[i]%10;
time_data[i]=time_data[i]+j*16;
}
write_ds1302(0x8e,0x00); //È¥³ýд±£»¤
for(i=0;i<7;i++)
{
write_ds1302(write_add[i],time_data[i]);
}
write_ds1302(0x8e,0x80); //¼Óд±£»¤
}
void read_rtc()
{
uchar i;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]); //×îÖÕ¶Á³öÀ´µÄÊý 16½øÖÆ
}
}
/*************************************************°´¼ü****************************************************************/
void Keyscan(void)
{
if(SELT==0)
{
delay1(2);
if(SELT==0)
{
while(!SELT);
Select_num++; //Ñ¡Ôñ¼ü°´ÏÂÒ»´Î
Adjust=1; //½øÈëµ÷½Úģʽ
}
if(Select_num==1)
{
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table4);
LCD_Display_String(2,table5);
write_com(0x80+0); //д >>
write_date(0x3e);
write_com(0x80+1); //д >>
write_date(0x3e);
Enter_num=0;
}
if(Select_num==2)
{
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table4);
LCD_Display_String(2,table5);
write_com(0x80+0x40+0); //д >>
write_date(0x3e);
write_com(0x80+0x40+1); //д >>
write_date(0x3e);
Enter_num=0;
}
if(Select_num==3)
{
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table1);
LCD_Display_String(2,table2);
Select_num=0;
Enter_num=0;
Adjust=0;
}
write_com(0x0c); //¹â±ê²»ÔÙÉÁ˸
Enter_num=0;
}
if(ENTER==0)
{
delay1(2);
if(ENTER==0)
{
while(!ENTER);
Enter_num++;
}
if(Select_num==1) //ÉèÖÃʵʱʱ¼ä
{
if(Enter_num==1)
{
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table9);
LCD_Display_String(2,table0);
SetTime_dispaly(0x80+8,Year);
SetTime_dispaly(0x80+11,Month);
SetTime_dispaly(0x80+14,Day);
SetTime_dispaly(0x80+0x40+6,Hour);
SetTime_dispaly(0x80+0x40+9,Minute);
SetTime_dispaly(0x80+0x40+12,Second);
Week_dispaly(0x80+0x40+15,Week);
write_com(0x80+8); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÄêµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==2)
{
write_com(0x80+11); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÔµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==3)
{
write_com(0x80+14); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÈÕµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==4)
{
write_com(0x80+0x40+6); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚʱµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==5)
{
write_com(0x80+0x40+9); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚ·ÖµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==6)
{
write_com(0x80+0x40+12); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÃëµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==7)
{
write_com(0x80+0x40+15); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÐÇÆÚµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==8)
{
Enter_num=0;
write_com(0x0c); //¹â±ê²»ÔÙÉÁ˸
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table1);
LCD_Display_String(2,table2);
time_data[0]=Year;///10*16+Year%10;
time_data[1]=Week;///10*16+Week%10;
time_data[2]=Month;///10*16+Month%10;
time_data[3]=Day;///10*16+Day%10;
time_data[4]=Hour;///10*16+Hour%10;
time_data[5]=Minute;///10*16+Minute%10;
time_data[6]=Second;///10*16+Second%10;
set_rtc(); //ÉèÖÃʱ¼ä
Select_num=0;
Adjust=0;
}
}
if(Select_num==2) //ÉèÖÿª¹ØËøʱ¼ä
{
if(Enter_num==1)
{
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table6);
LCD_Display_String(2,table7);
SetTime_dispaly(0x80+0x40+4,Hour_L);
SetTime_dispaly(0x80+0x40+7,Minute_L);
SetTime_dispaly(0x80+0x40+10,Second_L);
write_com(0x80+0x40+4); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚʱµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==2)
{
write_com(0x80+0x40+7); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚ·ÖµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==3)
{
write_com(0x80+0x40+10); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÃëµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==4)
{
write_com(0x0c); //¹â±ê²»ÔÙÉÁ˸
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table8);
LCD_Display_String(2,table7);
SetTime_dispaly(0x80+0x40+4,Hour_H);
SetTime_dispaly(0x80+0x40+7,Minute_H);
SetTime_dispaly(0x80+0x40+10,Second_H);
write_com(0x80+0x40+4); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚʱµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==5)
{
write_com(0x80+0x40+7); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚ·ÖµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==6)
{
write_com(0x80+0x40+10); //¹â±êÉÁ˸µØÖ·£¬Í£ÁôÔÚÃëµÄλÖÃÉÏ
write_com(0x0f); //¹â±êÉÁ˸
}
if(Enter_num==7)
{
Enter_num=0;
write_com(0x0c); //¹â±ê²»ÔÙÉÁ˸
LCD_Clean(1);
LCD_Clean(2);
LCD_Display_String(1,table1);
LCD_Display_String(2,table2);
Select_num=0;
Adjust=0;
}
}
}
if(UP==0)
{
delay1(2);
if(UP==0)
{
while(!UP);
if(Select_num==1)
{
if(Enter_num==1)
{
Year++;
if(Year>99)
Year=0;
SetTime_dispaly(0x80+8,Year);
write_com(0x80+8);
write_com(0x0f);
}
if(Enter_num==2)
{
Month++;
if(Month>12)
Month=1;
SetTime_dispaly(0x80+11,Month);
write_com(0x80+11);
write_com(0x0f);
}
if(Enter_num==3)
{
Day++;
if(Day>31)
Day=1;
SetTime_dispaly(0x80+14,Day);
write_com(0x80+14);
write_com(0x0f);
}
if(Enter_num==4)
{
Hour++;
if(Hour>23)
Hour=0;
SetTime_dispaly(0x80+0x40+6,Hour);
write_com(0x80+0x40+6);
write_com(0x0f);
}
if(Enter_num==5)
{
Minute++;
if(Minute>59)
Minute=0;
SetTime_dispaly(0x80+0x40+9,Minute);
write_com(0x80+0x40+9);
write_com(0x0f);
}
if(Enter_num==6)
{
Second++;
if(Second>59)
Second=0;
SetTime_dispaly(0x80+0x40+12,Second);
write_com(0x80+0x40+12);
write_com(0x0f);
}
if(Enter_num==7)
{
Week++;
if(Week>7)
Week=1;
Week_dispaly(0x80+0x40+15,Week);
write_com(0x80+0x40+15);
write_com(0x0f);
}
}
if(Select_num==2)
{
if(Enter_num==1)
{
Hour_L++;
if(Hour_L>23)
Hour_L=0;
SetTime_dispaly(0x80+0x40+4,Hour_L);
write_com(0x80+0x40+4);
write_com(0x0f);
}
if(Enter_num==2)
{
Minute_L++;
if(Minute_L>59)
Minute_L=0;
SetTime_dispaly(0x80+0x40+7,Minute_L);
write_com(0x80+0x40+7);
write_com(0x0f);
}
if(Enter_num==3)
{
Second_L++;
if(Second_L>59)
Second_L=0;
SetTime_dispaly(0x80+0x40+10,Second_L);
write_com(0x80+0x40+10);
write_com(0x0f);
}
if(Enter_num==4)
{
Hour_H++;
if(Hour_H>23)
Hour_H=0;
SetTime_dispaly(0x80+0x40+4,Hour_H);
write_com(0x80+0x40+4);
write_com(0x0f);
}
if(Enter_num==5)
{
Minute_H++;
if(Minute_H>59)
Minute_H=0;
SetTime_dispaly(0x80+0x40+7,Minute_H);
write_com(0x80+0x40+7);
write_com(0x0f);
}
if(Enter_num==6)
{
Second_H++;
if(Second_H>59)
Second_H=0;
SetTime_dispaly(0x80+0x40+10,Second_H);
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
}
}
if(DOWN==0)
{
delay1(2);
if(DOWN==0)
{
while(!DOWN);
if(Select_num==1)
{
if(Enter_num==1)
{
Year--;
if(Year<0)
Year=99;
SetTime_dispaly(0x80+8,Year);
write_com(0x80+8);
write_com(0x0f);
}
if(Enter_num==2)
{
Month--;
if(Month<1)
Month=12;
SetTime_dispaly(0x80+11,Month);
write_com(0x80+11);
write_com(0x0f);
}
if(Enter_num==3)
{
Day--;
if(Day<1)
Day=31;
SetTime_dispaly(0x80+14,Day);
write_com(0x80+14);
write_com(0x0f);
}
if(Enter_num==4)
{
Hour--;
if(Hour<0)
Hour=23;
SetTime_dispaly(0x80+0x40+6,Hour);
write_com(0x80+0x40+6);
write_com(0x0f);
}
if(Enter_num==5)
{
Minute--;
if(Minute<0)
Minute=59;
SetTime_dispaly(0x80+0x40+9,Minute);
write_com(0x80+0x40+9);
write_com(0x0f);
}
if(Enter_num==6)
{
Second--;
if(Second<0)
Second=59;
SetTime_dispaly(0x80+0x40+12,Second);
write_com(0x80+0x40+12);
write_com(0x0f);
}
if(Enter_num==7)
{
Week--;
if(Week<1)
Week=7;
Week_dispaly(0x80+0x40+15,Week);
write_com(0x80+0x40+15);
write_com(0x0f);
}
}
if(Select_num==2)
{
if(Enter_num==1)
{
Hour_L--;
if(Hour_L<0)
Hour_L=23;
SetTime_dispaly(0x80+0x40+4,Hour_L);
write_com(0x80+0x40+4);
write_com(0x0f);
}
if(Enter_num==2)
{
Minute_L--;
if(Minute_L<0)
Minute_L=59;
SetTime_dispaly(0x80+0x40+7,Minute_L);
write_com(0x80+0x40+7);
write_com(0x0f);
}
if(Enter_num==3)
{
Second_L--;
if(Second_L<0)
Second_L=59;
SetTime_dispaly(0x80+0x40+10,Second_L);
write_com(0x80+0x40+10);
write_com(0x0f);
}
if(Enter_num==4)
{
Hour_H--;
if(Hour_H<0)
Hour_H=23;
SetTime_dispaly(0x80+0x40+4,Hour_H);
write_com(0x80+0x40+4);
write_com(0x0f);
}
if(Enter_num==5)
{
Minute_H--;
if(Minute_H<0)
Minute_H=59;
SetTime_dispaly(0x80+0x40+7,Minute_H);
write_com(0x80+0x40+7);
write_com(0x0f);
}
if(Enter_num==6)
{
Second_H--;
if(Second_H<0)
Second_H=59;
SetTime_dispaly(0x80+0x40+10,Second_H);
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
}
}
if(MODE==0) //Çл»°´¼ü°´ÏÂ
{
delay1(2); //Ïû¶¶
if(MODE==0)
{
while(!MODE); //°´¼üÊÍ·Å
Auto_flg=~Auto_flg; //ģʽÇл»
if(Auto_flg==0) //×Ô¶¯Ä£Ê½
{
AUTO_LED=0; //×Ô¶¯µÆÁÁ
HAND_LED=1;
}
if(Auto_flg==1) //ÊÖ¶¯Ä£Ê½
{
AUTO_LED=1;
HAND_LED=0; //ÊÖ¶¯µÆÁÁ
LAMP1=1; //¹ØµÆ
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
}
}
if(Auto_flg==1) //ÊÖ¶¯Ä£Ê½
{
if(SWITCH==0) //µÆ¿ª¹Ø°´¼ü°´ÏÂ
{
delay1(2); //Ïû¶¶
if(SWITCH==0)
{
while(!SWITCH); //°´¼üÊÍ·Å
Switch_num++; //°´Ï´ÎÊýÔö¼Ó
if(Switch_num==1) //°´ÏÂÒ»´Î£¬¿ªÒ»ÕµµÆ
{
LAMP1=0;
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
if(Switch_num==2) //°´Ï¶þ´Î£¬¿ª¶þÕµµÆ
{
LAMP1=0;
LAMP2=0;
LAMP3=1;
LAMP4=1;
}
if(Switch_num==3) //°´ÏÂ3´Î£¬¿ª3ÕµµÆ
{
LAMP1=0;
LAMP2=0;
LAMP3=0;
LAMP4=1;
}
if(Switch_num==4) //°´ÏÂ4´Î£¬¿ª4ÕµµÆ
{
LAMP1=0;
LAMP2=0;
LAMP3=0;
LAMP4=0;
}
if(Switch_num==5) //°´ÏÂ5´Î£¬¿ª0ÕµµÆ
{
LAMP1=1;
LAMP2=1;
LAMP3=1;
LAMP4=1;
Switch_num=0; //´ÎÊýÇå³ý
}
}
}
}
}
void Open(void)
{
float Now;
float Set_L,Set_H;
Now=Hour+Minute/60+Second/3600; //°Ñʵʱʱ¼ä»¯³ÉСʱΪµ¥Î»
Set_L=Hour_L+Minute_L/60+Second_L/3600; //°ÑÉèÖÃÏÂÏÞʱ¼ä»¯³ÉСʱΪµ¥Î»
Set_H=Hour_H+Minute_H/60+Second_H/3600; //°ÑÉèÖÃÉÏÏÞʱ¼ä»¯³ÉСʱΪµ¥Î»
if(Auto_flg==0) //×Ô¶¯Ä£Ê½
{
if((Now>=Set_L)&(Now<=Set_H)) //ʵʱʱ¼äÔÚÉÏÏÂÏÞʱ¼ä·¶Î§ÄÚ
{
if(LIGHT1==0) //¹âÏß²»×ã
{
if(Value1==0)
{
LAMP1=1; //È«Ãð
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
if((Value1>0)&(Value1<10))
{
LAMP1=0; //ÁÁÒ»¸öµÆ
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
if((Value1>=10)&(Value1<20))
{
LAMP1=0; //ÁÁ¶þ¸öµÆ
LAMP2=0;
LAMP3=1;
LAMP4=1;
}
if((Value1>=20)&(Value1<30))
{
LAMP1=0; //ÁÁÈý¸öµÆ
LAMP2=0;
LAMP3=0;
LAMP4=1;
}
if(Value1>=30)
{
LAMP1=0; //ÁÁËĸöµÆ
LAMP2=0;
LAMP3=0;
LAMP4=0;
}
}
if(LIGHT1==1) //¹âÏßÇ¿ÁÒ
{
LAMP1=1; //È«Ãð
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
}
if((Now<Set_L)|(Now>Set_H)) //ʵʱʱ¼ä²»ÔÚ·¶Î§ÄÚ
{
LAMP1=1; //È«Ãð
LAMP2=1;
LAMP3=1;
LAMP4=1;
}
}
}
/*******************************************************************************************************/
void Count_Value(void)
{
SetTime_dispaly(0x80+3,Value1);
if(IN1==0)
{
delay1(1);
if(IN1==0)
{
while(!IN1);
if(OUT1_flag==0)
{
IN1_flag=1;
TR0=1; //¿ªÆô¶¨Ê±Æ÷ ·ÀÖ¹Îó´¥·¢
}
if(OUT1_flag==1)
{
Value1++; //ÈËÊýÔö¼Ó
if(Value1>=99) //Èç¹ûÈËÊý¼ÆÊýµ½99£¬±äΪ×î´ó99
Value1=99;
OUT1_flag=0; //ÇåÁã
IN1_flag=0;
TR0=0; //¹Ø±Õ¶¨Ê±Æ÷
Count=0;
Miao=0;
}
}
}
if(OUT1==0)
{
delay1(1);
if(OUT1==0)
{
while(!OUT1);
if(IN1_flag==0)
{
OUT1_flag=1;
TR0=1; //¿ªÆô¶¨Ê±Æ÷ ·ÀÖ¹Îó´¥·¢
}
if(IN1_flag==1)
{
Value1--; //ÈËÊý¼õÉÙ
if(Value1<0) //Èç¹ûÈËÊý¼ÆÊýСÓÚ0£¬±äΪ×îС0
Value1=0;
IN1_flag=0; //ÇåÁã
OUT1_flag=0;
TR0=0; //¹Ø±Õ¶¨Ê±Æ÷
Count=0;
Miao=0;
}
}
}
}
/****************************************ζÈ************************************************************/
/*void delay(uint y) //DS18B20ÑÓʱº¯Êý£¨·ÂÕæÓã©
{
while(y--);
}
*/
void delay(uint z) //DS18B20ÑÓʱº¯Êý£¨ÊµÎïÓã©
{
uint x,y;
for(x=z;x>0;x--)
for(y=1;y>0;y--);
}
void write_byte(uint dat) //дһ¸ö×Ö½Ú
{
uchar i;
for(i=0;i<8;i++) //Ñ»·°Ë´Î ¹²ÓаËλ
{
DQ=0; //дÁã
DQ=dat&0x01; //Ïò×ÜÏßдλÊý¾Ý£¬´Ó×îµÍλдÆð
delay(4);
DQ=1; //дһ
dat>>=1; //Ï´Îд×÷×¼±¸£¬ÒÆλÊý¾Ý
}
delay(4);
}
uchar read_byte(void) //¶ÁÒ»¸ö×Ö½Ú£¬·µ»ØÖµ
{
uchar i;
uint value;
for(i=0;i<8;i++) //Ñ»·°Ë´Î ¹²ÓаËλ
{
DQ=0;
value>>=1;
DQ=1; //ÊÍ·Å×ÜÏß
if(DQ)
value|=0x80; //DQ=1£¬valueÈ¡1
delay(4);
}
return value;
}
void ds18b20_init() //³õʼ»¯º¯Êý
{
uint n;
DQ=1;
delay(8);
DQ=0;
delay(80); //µÍµçƽ480¡ª¡ª960us
DQ=1; //×ÜÏßÊÍ·Å
delay(8); //µÈ´ý50¡ª¡ª100us
n=DQ; //¶ÁÈ¡¸´Î»×´Ì¬
delay(4);
}
int readtemperature() //¶ÁÕûÊý²¿·Ö
{
int a,b; //¸ß°Ë룬µÍ°Ëλ
ds18b20_init();
write_byte(0xcc); //Ìø¹ýromÆ¥Å䣬Ìø¹ý¶ÁÐòÁкŵIJÙ×÷£¬¿É½ÚÊ¡²Ù×÷ʱ¼ä
write_byte(0x44); //Æô¶¯Î¶ȼì²â
delay(300); //²âζÈ
ds18b20_init(); //¿ªÊ¼²Ù×÷Ç°ÐèÒª¸´Î»
write_byte(0xcc); //Ìø¹ýromÆ¥Åä
write_byte(0xbe); //д¶Á¼Ä´æÆ÷ÖÐζÈÖµµÄÃüÁî
a=read_byte(); //low µÍλ¿ªÊ¼¶ÁÈ¡
b=read_byte(); //high ¸ßλ¿ªÊ¼¶ÁÈ¡
b<<=8; //°Ñ¸ßλ×óÒÆ°Ëλ
b=b|a; //¸ß°ËλÓëµÚ°Ëλ½øÐлòÔËË㣬µÃµ½×ܺÍ
if(b>=0) //Èç¹ûζȴóÓÚµÈÓÚ0
{
b=b*0.0625; //Ö±½Ó³ËÒÔ0.0625
write_com(0x80+0x40+2); //ÔÚLCD1602¶ÔÓ¦µÄλÖò»Ð´ÄÚÈÝ
write_date(0x20);
}
else //ζÈСÓÚ0
{
b=~b+1; //È¡·´ÂëÔÙ¼ÓÒ»
b=b*0.0625; //ÔÙÔËËã
write_com(0x80+0x40+2); //ÔÚLCD1602¶ÔÓ¦µÄλÖÃдһ¸ö¸ººÅ
write_date(0x2d);
}
return b; //·µ»Øb£¬´ËʱÒÔ±íʾζÈ
}
void temperature_dispaly(char add,char dat) //ζÈÏÔʾº¯Êý£ºµÚÒ»¸ö£º²ÎÊýµÄµØÖ·£¬µÚ¶þ¸ö£º²ÎÊýµÄÄÚÈÝ
{
uchar shi,ge;
shi=dat/10; //°ÑζȵÄʮλÌáÈ¡³öÀ´
ge=dat%10; //°ÑζȵĸöλÌáÈ¡³öÀ´
write_com(0x80+0x40+add); //ҪдµÄµØÖ·
write_date(0x30+shi); //ʮλµÄÄÚÈÝ 1602×Ö·û¿â
write_date(0x30+ge); //¸öλµÄÄÚÈÝ 1602×Ö·û¿â
}
/*****************************************¶¨Ê±Æ÷³õʼ»¯ºÍÖ÷º¯Êý***********************************************************/
void T0_init(void)
{
TMOD=0x11; //ÉèÖö¨Ê±Æ÷0Ϊ¹¤×÷·½Ê½1
TH0=(65536-50000)/256; //50MS¶¨Ê±
TL0=(65536-50000)%256;
EA=1; //¿ª¶¨Ê±Æ÷T0µÄÖÐ¶Ï ×ÜÖжÏ
ET0=1; //ÔÊÐíT0ÖжÏ
// TR0=1; //¿ªÆô¶¨Ê±Æ÷
}
void main()
{
AUTO_LED=0; //ĬÈÏ×Ô¶¯Ä£Ê½
temperature=readtemperature();
init(); //Òº¾§³õʼ»¯
T0_init(); //¶¨Ê±Æ÷³õʼ»¯
delay1(8000);
while(1)
{
if(Adjust==0) //·Çµ÷½ÚģʽÏÂÏÔʾʱ¼äÈËÊýºÍζÈ
{
temperature=readtemperature(); //¶ÁȡζÈ
temperature_dispaly(3,temperature); //ÏÔʾζÈ
Time_Display(); //ÏÔʾʱ¼ä
Open(); //¶¯×÷ÅжÏ,¸ù¾Ý¹âÏߺÍÉùÏ쿪¹Ø
Count_Value(); //¼ÆËãÈËÊý
}
Keyscan(); //ɨÃè¼üÅÌ
}
}
void Timer0() interrupt 1 //¶¨Ê±Æ÷T0ÖжϺ¯Êý
{
TH0=(65536-50000)/256; //¸³³õÖµ=50ms
TL0=(65536-50000)%256; //TH0=3C,TL0=B0
Count++; //ÿÖжÏÒ»´Î£¬Count¼ÓÒ»£¬¼ÆÊý20´Î£¬±íʾ1sµÄʱ¼äµ½
if(Count>=20) //1sµ½
{
Count=0;
Miao++;
if(Miao>=3) //3ÃëÄÚÎÞ´¥·¢ÁíÒ»¸ö£¬È«²¿ÇåÁã
{
Miao=0;
OUT1_flag=0; //ÇåÁã
IN1_flag=0;
TR0=0; //¹Ø±Õ¶¨Ê±Æ÷
}
}
}
完整资料:
https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=614730300167&ut_sk=1.WUpxx7gpwUoDAMmnnrBIzAno_12431167_1585793889860.Copy.detail.614730300167.1828622527&forceFlush=1