基于STC89C52的智能台灯软件设计

2017-04-25 13:30肖雅金张伟胡子牛尹辉
电脑知识与技术 2017年2期
关键词:色温单片机软件

肖雅金 张伟 胡子牛 尹辉

摘要:本着提高生活质量,使人工作方便的目的提出了此设计。该设计是以单片机为核心,编写程序使日历、时钟和台灯亮度信息在LCD12864中显示并把信息写入EEPROM中,防止数据丢失;用程序赋予各个触摸开关不同的作用,调節LED灯的亮度,转换台灯的色温,设置日历与时钟;把光感应模块的测量信息传递到单片机经过程序处理再传递给台灯,从而改变台灯的亮度,达到适合人眼的灯光亮度。该文给出了软件方式实现触摸式调光,自适应调光,色温转换,显示日历等功能的台灯设计方法。

关键词:单片机;触摸;软件;色温

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)02-0248-03

A Software Design of Intelligent Table Lamp Based on STC89C52

XIAO Ya-jin, ZHANG Wei, HU Zi-niu, YIN Hui

(School of Automation and Electrical Engineering,Linyi University, Linyi 276000, China)

Abstract: In order to improve the quality of life, so that the work of the convenience of the purpose of this design. The design is based on single-chip programming, the calendar, clock and lamp brightness information displayed in the LCD12864 and the information is written in EEPROM, to prevent data loss; gives each touch switch function is different with the program, adjust the brightness of the LED lamp, the lamp color temperature conversion settings, calendar and clock; the light sensing measurement information module transfer to MCU through the procedure and then transferred to the lamp, thereby changing the lamp brightness, the brightness of the light to suitable for human.This paper gives the software realization of touch adaptive dimming, dimming, color conversion, display lamp design method of calendar function.

Key words: MCU; touch;software; color temperature

1 背景

生活中经常伏案工作的人们离不开台灯的帮助,智能的台灯会给人们更多的便利。LED灯有节能,使用寿命长,环保等优点,它是台灯灯泡的不二选择。按键开关损坏的快并且不舒适,选用触摸开关代替按键,这样更舒适。多数的台灯只依靠硬件实现灯的亮或灭,没有其他的功能。用软件硬件结合方式同样可以实现灯的亮或灭并且可以根据环境的亮度不同和生活需求不同调节灯光亮度与色温。环境中光的亮度在一天中是不同的,经常调节台灯亮度很麻烦,编写程序可以实现自适应调光功能,增加色温转换功能满足不同工作时对灯光色温的需求,显示日历功能更方便快捷提供时间信息。给台灯增加软件部分可以提高它的智能性、便利性、舒适性,使得台灯功能更强大。

2 硬件系统设计

2.1 硬件总体设计

整个系统硬件包括stc89c52单片机,LED灯模块,LCD12864显示模块,EEPROM存储模块,DS1302时钟模块,BH1750FVI采集转换光模块,触摸开关模块组成,总体系统硬件结构图如图1所示。

2.2 主要模块功能介绍

1)单片机。选用STC89C52单片机,它的造价低、功耗低、性能高。该单片机拥有8k字节Flash,512字节RAM,32位I/O口线,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,全双工串行口。以单片机为控制中心对其他模块进行各方面的调控。

2)触摸开关模块。通过多个触摸开关可以控制灯的开关,转换LED灯的色温,改变LED灯的亮度,设置年、月、日、星期、时、分、秒。

3)BH1750FVI采集转换光模块。选用BH1750FVI芯片,通过该芯片测得环境光照强度,并把模拟信号转换为数字信号传输给单片机,单片机再对数字信号进一步处理。

4)LCD12864显示模块。通过单片机把数据传输到LCD显示模块,LCD可以显示年、月、日、星期、时、分、秒和灯光的亮度。

5)EEPROM存储模块。一方面接收单片机传输的灯光亮度的信息,另一方面当关闭电源再次开启时把上次灯光亮度信息再传输给单片机,使台灯每次开启时都是上次关闭时的灯光亮度。

6)DS1302时钟模块。为了避免当台灯关闭时时钟停止的问题,增加DS1302时钟模块使得不用每次开启台灯都要重新调整时间。

7)LED灯模块。选用LED转色温灯泡,三种不同的色温分别是带蓝色的白光、白光和带红色的白光,不同的工作与适宜的色温搭配可以让氛围更融洽。

3 软件系统设计

3.1 主程序设计

在主程序运行时首先延时100ms,让单片机内部各个硬件部分正常运行起来。然后初始化LCD显示模块[1]、光感应模块、时钟模块、触摸开关模块。最后寫一个while(1),进行无限循环。在while循环中对触摸开关扫描;开启传感器,设置传感器工作方式,以正常工作方式运,再延时180ms,再连续读出传感器数据,存储在BUF中,并与设定值进行比较;获取DS1302内部数据,在LcdUpdata函数中进行时钟更新;LcdUpdata函数中还有对LCD与BH1750的数据进行更新。主程序如下:

void main()

{

delay_nms(100);//延时100ms

InitLcd();//lcd初始化

Init_BH1750();//初始化BH1750传感器

InitDs1302();//ds1302初始化

while(1)//无限循环

{

Single_Write_BH1750(0x01);//开传感器

Single_Write_BH1750(0x10);//设置传感器工作方式

delay_nms(180);//延时180ms

Multiple_Read_BH1750();//连续读出数据,存储在BUF中,进行数据对比

Ds1302Run();//1302运行函数

KeySet();//按键扫描函数

UpDate();//数据更新函数

}

return 0;

}

3.2 光自适应程序设计

在读取BH1750内部数据的过程中需要设置发送起始信号,发送停止信号,发送应答信号[2]。设置发送起始信号时拉高数据线和时钟线,延时5us,再拉低数据线,延时5us后,拉低时钟线,起始信号设置完成。设置发送应答信号时先写应答信号的入口参数,再拉高时钟线,延时5us,拉低时钟线,再延时5us。给发送应答信号的入口参数为1,入口参数为0时是ACK,入口参数为0时是NAK。读取完两个数据后给应答信号的入口参数为1,再拉高时钟线,延时5us,拉低时钟线,再延时5us。设置停止信号要先拉低数据线,再拉高时钟线,延时5us,拉高数据线,延时5us,停止信号设置完成。连续读出BH1750内部数据程序如下:

void Multiple_read_BH1750(void)

{

uchar i;

BH1750_Start();//起始信号

BH1750_SendByte(SlaveAddress+1);//发送设备地址+读信号

for (i=0; i<3; i++)//连续读取2个地址数据,存储中BUF

{

BUF[ i] = BH1750_RecvByte();//BUF[0]存储0x32地址中的数据

if (i == 3)

{

BH1750_SendACK(1);//最后一个数据需要回NAK

}

else

{

BH1750_SendACK(0);//回应ACK

}

}

BH1750_Stop();//停止信号

Delay5ms();

}

设定一个适宜人眼的光照强度,当采集到的环境光照强度小于设定值时增加PWM占空比,增大LED灯亮度,当采集到的环境光照强度大于设定值时PWM占空比为零,使LED灯不发光,起到节能的效果。把当前台灯光照强度存储到EEPROM中,每次台灯光照强度改变,EEPROM中的数据都要更新,下次台灯开启时读取EEPROM中数据,此时台灯的亮度为上次关闭台灯时的亮度[3]。

3.3 时钟程序设计

使用DS1302时,先对其初始化,再设置日历和时钟,令控制命令WP=0,进行写操作,然后写入秒,再令控制命令WP=1,进行写保护。年、月、日、星期、时与分的设置方法原理相同。读取单片机当前时间信息到DS1302中,关闭台灯再次打开时读取DS1302中信息到单片机,这样就解决台灯时间因掉电而停止的问题[4]。写入DS1302数据与读取DS1302数据程序如下所述:

void Write1302(unsigned char dat)

{

unsigned char i;

SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备

delaynus(2); //稍微等待,使硬件做好准备

for(i=0;i<8;i++) //连续写8个二进制位数据

{

DATA=dat&0x01; //取出dat的第0位数据写入1302

delaynus(2); //稍微等待,使硬件做好准备

SCLK=1; //上升沿写入数据

delaynus(2); //稍微等待,使硬件做好准备

SCLK=0; //重新拉低SCLK,形成脉冲

dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位

}

}

unsigned char Read1302(void)

{

unsigned char i,dat;

delaynus(2); //稍微等待,使硬件做好准备

for(i=0;i<8;i++) //连续读8个二进制位数据

{

dat>>=1; //将dat的各数据位右移1位,先读出的是字节的最低位

if(DATA==1) //如果读出的数据是1

dat|=0x80; //将1取出,写在dat的最高位

SCLK=1; //将SCLK置于高电平,为下降沿读出

delaynus(2); //稍微等待

SCLK=0; //拉低SCLK,形成脉冲下降沿

delaynus(2); //稍微等待

}

return dat; //将读出的数据返回

}

3.4 触摸开关程序设计

先给各个触摸开关进行寄存器定义,然后扫描触摸开关。触摸一下Key1触摸片台灯开,再触摸一下Key1触摸片台灯关,每关开一次色温变换一种,三种色温循环转变。Key2触摸片控制台灯亮度增大,Key3触摸片控制台灯亮度减小,触摸一下亮度增加或减小1。Key4、Key5、Key6、Key7触摸片用来调节日历与时钟。触摸一下key4触摸片LCD上的光标会出现在年的千分位上,再触摸一下会到年的百分位上,如此进行触摸LCD上的光標会依次到年、月、日、星期、时、分、秒的十分位与个分为上。触摸一下key5触摸片退出调节日历与时钟模式。Key6触摸片与Key7触摸片分别增大或减小光标所在位置的数字,触摸一下数字增加或减小1。Key8触摸片控制台灯的自适应功能,触摸一下Key8触摸片,功能启动,再触摸一下,功能关闭。触摸开关扫描部分程序如下:

void key()

{

P3 = 0xdf;//p3=01111111;

temp = P3;

if((temp&0xc7) != 0xc7)//01111111和11000111相与不等于01111111

{

delay(5);//消抖

if((temp&0xc7) != 0xc7)

{

temp = P3;

switch(temp)

{

case 0xde:num = 1,key1=0;//触碰第1个触摸开关

break;//跳出循环

case 0xdd:num = 2,key2=0;//触碰第2个触摸开关

break;//跳出循环

case 0xdb:num = 3,key3=0;//触碰第3个触摸开关

break;//跳出循环

}

}

}

}

4 结束语

本设计以单片机为核心,通过程序把各个硬件模块联系起来,实现了在LCD屏幕上显示实时时间和台灯亮度信息的功能;用8个触摸开关可以做到打开与关闭台灯,启动与关闭自适应功能,变换色温,修改日历与时钟。经过分析多个行业人员对实验品的体验问卷,结果表明此台灯舒适性、便利性、智能性都很高,并表示还可以增加闹铃提示与温度显示等功能。

参考文献:

[1] 张玲玲. 基于51单片机的LCD12864程序设计[J]. 中小企业管理与科技:中旬刊, 2015(5): 231-232.

[2] 王建, 毛腾飞, 陈英革. 基于BH1750芯片的测光系统设计与实现[J]. 常熟理工学院学报, 2011(2): 117-120.

[3] 周仲玉. EEPROM芯片介绍和应用[J]. 计算机应用研究, 1984(4).

[4] 姚德法, 张洪林. 串行时钟芯片DS1302的原理与使用[J]. 信息技术与信息化, 2006(1): 92-94.

猜你喜欢
色温单片机软件
禅宗软件
学生台灯色温 不宜超过4000K
基于单片机的SPWM控制逆变器的设计与实现
基于单片机的层次渐变暖灯的研究
基于单片机的便捷式LCF测量仪
软件对对碰
基于DALI协议的色温可调节LED照明控制器
Microchip推出两个全新PIC单片机系列
谈软件的破解与保护
选择合适的色温