• 大小: 34.78 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-10-02
  • 语言: 其他
  • 标签: 单片机  C语言  

资源简介

带时间显示的室内灯光控制系统,控制有光控、红外人体开关控制、时间控制和手动控制四种方式。是本人上学期的课程设计。

资源截图

代码片段和文件信息

////////////////////////////////////////////////
//////此系统的功能是在晚上而且有人时自动开灯////
//////白天和晚上无人以及晚上有人但睡觉时关灯////
////晚上睡觉时按一下睡眠开关就能关灯而不受光////
////控和人体红外控制的影响,再按一下又可以灯////
////灭,按了睡眠开关后那光和红外控制不起作用////
////所以我设置了早上八点后自动恢复功能来,让////
////此两种控制起作用,而避免了早上起床后要按////
////开关才能让其起作用的麻烦////////////////////
////////////////////////////////////////////////
#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


评论

共有 条评论