基于单片机的智能台灯设计
可以进行光亮( 4 档)的调节,以便达到最舒适的光亮;台灯还
具有显示时间与室温的功能。
关键词 :智能台灯; at89s52 ;热释电红外传感器 re200b; 时钟芯片 ds12c887;温度传感器 ds18b20;光敏传感器。
一 . 智能台灯功能介绍
智能台灯
4档 光亮 调节
人体 红外 感应
光敏 传感 器
(3)、时钟部分:运用时钟芯片 DS12C887产生时钟信号,由单片机读取其 信号,并将数据处理之后送到液晶显示。由于 DS12C887内部有集成的电池,所 以即使断电,时钟仍会走时准确,从而使该台灯更实用、更省电。此时钟还配有 按键,通过按键即可方便的调节时钟,还有闹钟功能。
(4)、温度显示:运用 DS18B20芯片感应温度,由单片机读取其信号,并 将数据处理后送到液晶显示,从而显示当时的温度。
break; break;
case 2: led1=1;led2=1;led3=0;led4=0; case 4: led1=0;led2=1;led3=0;led4=1; } } /***************************************************/
void delay(uint z)//
智能 功能键 增加键 减小键 闹钟查看键 调光 显示温度
sbit rs=P1^0; sbit lcden=P1^2; sbit wr=P1^1;
// // 液晶 //
sbit led1=P2^0;
sbit led2=P2^1;
//led
sbit led3=P2^5;
sbit led4=P2^6;
sbit rd=P3^7;
时钟芯片 DS12C887
特点 可作为 IBM AT 计算机的时钟和日历 与 MC146818B和 DS1287的管脚兼容 在没有外部电源的情况下可工作 10 年自带晶体振荡器及电池 可计算到 2100 年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰 年补偿 用二进制码或 BCD码代表日历和闹钟信息 有 12 和 24 小时两种制式, 12 小时制时有 AM和 PM提示 可选用夏令时模式 可以应用于 MOTOROL和A INTEL 两种总线 数据 / 地址总线复用 内建 128 字节 RAM 14 字节时钟控制寄存器 114 字节通用 RAM
uchar code table2[]="WELCOME!";
void write_ds(uchar,uchar);//
函数申明
void set_alarm(uchar,uchar,uchar);void read_alarm();
uchar read_ds(uchar);void set_time();
定义两个位变量
uchar count,s1num,flag=0,t0_num;//
其它变量定义
uchar miao,shi,fen,year,month,day,week,amiao,afen,ashi;
uchar code table[]=" 20 - - ";//
液晶固定显示内容
uchar code table1[]=" : : ";
shi=date/10; ge=date%10; write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); } void write_week(char we) {// 写液晶星期显示函数 write_com(0x80+12); switch(we) {
以及封锁时间定时器等构成的数模混合专用集成电路。 首先,根据实际需要, 利用运算放大器 OP1组成传感信号预处理电路, 将信
号放大。然后耦合给运算放大器 OP2,再进行第二级放大,同时将直流电位抬高 为 VM(≈0.5VDD)后,将输出信号 V2 送到由比较器 COP1和 COP2组成的双向鉴幅 器,检出有效触发信号 Vs。由于 VH≈ 0.7VDD、VL≈ 0.3VDD,所以,当 VDD=5V 时,可有效抑制± 1V 的噪声干扰,提高系统的可靠性。 COP3是一个条件比较 器。当输入电压 Vc<VR(≈0.2VDD)时,COP3输出为低电平封住了与门 U2,禁止触 发信号 Vs 向下级传递; 而当 Vc>VR时,COP3输出为高电平, 进入延时周期。 当 A 端接“ 0”电平时,在 Tx 时间内任何 V2的变化都被忽略,直至 Tx 时间结束, 即所谓不可重复触发工作方式。当 Tx 时间结束时, Vo下跳回低电平,同时启动 封锁时间定时器而进入封锁周期 Ti 。在 Ti 时间内,任何 V2 的变化都不能使 Vo 跳变为有效状态(高电平) , 可有效抑制负载切换过程中产生的各种干扰。
延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void di() // 蜂鸣器报警声音{beep=0;
delay(100);
beep=1;
}
void write_com(uchar com)
{// 写液晶命令函数
rs=0;
lcden=0;
P0=com;
可编程方波输出 总线兼容中断 (/IRQ ) 三种可编程中断 时间性中断 可产生每秒一次直到每天一次中断 周期性中断 122 ms 到 500 ms 时钟更新结束中断
DS18B20温度传感器
DS18B20的主要特征:
全数字温度转换及输出。 先进的单总线数据通信。 最高 12 位分辨率,精度可达土 0.5 摄氏度。 12 位分辨率时的最大工作周期为 750 毫秒。 可选择寄生工作方式。 检测温度范围为– 55°C ~+125°C ( –67° F ~+257°F) 内置 EEPRO,M限温报警功能。 64 位光刻 ROM,内置产品序列号,方便多机挂接。 多样封装形式,适应不同硬件系统。
EA=1;// 打开总中断
EX0=1;// 开外部中断 1
IT0=1;// 设置负跳变沿触发中断
break; break;
EX1=1;// 开外部中断 1
IT1=1;// 设置负跳变沿触发中断
flag1=0;// 变量初始化
t0_num=0;
s1num=0;
week=1;
lcden=0;
rd=0;
write_com(0x38);//1602 液晶初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(i=0;i<15;i++)//
写入液晶固定部分显示
{
write_date(table[i]);
delay(1);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(table1[i]);
delay(1);
}
} void write_sfm(uchar add,char date) {//1602 液晶刷新时分秒函数 4 为时, 7 为分, 10 为秒
char shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } void write_nyr(uchar add,char date) {//1602 液晶刷新年月日函数 3 为年, 6 为分, 9 为秒 char shi,ge;
闹钟 部分
温度 显示
(1)、光亮调节:在不同的情况下需要不同的光亮来满足需求,因此我们 通过给单片机四个 IO 口不同的电平,设置了四种光亮强度,以便达到不同的需 求。
(2)、“天暗时,人来灯亮,人走灯灭”功能的实现:运用 51 单片机产生 的方波信号驱动红外发射管发射红外线;运用三脚的红外接收头接收红外信号, 当人挡住红外信号, 红外信号就会反射被红外接收头接收; 并且通过光敏传感器 对外界的光强进行判断,在环境光线亮度达不到设定阈值时, DO端输出高电平, 当外界环境光线亮度超过设定阈值时, DO端输出低电平。由单片机检测红外接 收头是否接收到红外信号,以及光敏传感器的 DO端的电平高低,从而决定 led 灯部分的亮度。由此实现“天暗时,人来灯亮,人走灯灭”。
/************************************************/ /*led*/ void led(uchar x) {
switch(x) {
case 0: led1=1;led2=0;led3=1;led4=0;break; case 1: led1=0;led2=0;led3=1;led4=0; case 3: led1=0;led2=0;led3=0;led4=1;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void write_date(uchar date)
{// 写液晶数据函数
rs=1;
lcden=0;
P0=date;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void init()
{// 初始化函数
uchar i;
三、实现:
(一)、硬件部分
主体部分:
(两条白线为跳线,外形需要,画成了心形)
LED:
电流放大电路:
PS:单片机 IO 口电流不够大,无法使灯泡足够亮。