资源简介
带时间显示的室内灯光控制系统,控制有光控、红外人体开关控制、时间控制和手动控制四种方式。是本人上学期的课程设计。
代码片段和文件信息
////////////////////////////////////////////////
//////此系统的功能是在晚上而且有人时自动开灯////
//////白天和晚上无人以及晚上有人但睡觉时关灯////
////晚上睡觉时按一下睡眠开关就能关灯而不受光////
////控和人体红外控制的影响,再按一下又可以灯////
////灭,按了睡眠开关后那光和红外控制不起作用////
////所以我设置了早上八点后自动恢复功能来,让////
////此两种控制起作用,而避免了早上起床后要按////
////开关才能让其起作用的麻烦////////////////////
////////////////////////////////////////////////
#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
相关资源
- 一个简单实用个人日记管理系统
- 单片机控制的步进电机正反转和加速
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 基于89c51的数字钟
- DXP单片机常用的元件库
- 单片机控制74ls164程序
- 基于单片机交通灯设计
- 基于PIC单片机的万年历的设计
- PIC单片机延时计算器
- 成绩管理系统(数据结构)
- FIR低通滤波器 ccs运行环境
- 51单片机频率计(很简单)
- 9s12单片机SPI功能代码
- AT89S ISP下载编程软件(串口)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- IIC proteus仿真实验
- nRF24L01无线模块在单片机与FPGA上的应
- nRF24L01无线模块原理图和与5V单片机的
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 单片机电子琴 数码管显示
- 单片机仿真软件proteus6.7免安装绿色版
评论
共有 条评论