SCLK:
串行时钟,输入,控制数据的输入与输出;
I/O:
三线接口时的双向数据线;
CE:
输入信号,在读、写数据期间,必须为高。
该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑;
其次,CE提供结束单字节或多字节数据传输的方法。
DS1302的内部结构
4.1.3DS1302驱动程序:
4.2DHT11温湿度模块
4.2.1DHT11温湿度模块简介
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
4.2.2DHT11温湿度模块各引脚的功能:
1:
接VDD,供电3-5.5VDC。
2:
接IO口,串行数据,单总线。
3:
NC,空脚,悬空。
4:
接GND,接地或电源负极。
4.2.3DHT11温湿度模块驱动程序
#include
#include
//
typedefunsignedcharU8;/*definedforunsigned8-bitsintegervariable无符号8位整型变量*/
typedefsignedcharS8;/*definedforsigned8-bitsintegervariable有符号8位整型变量*/
typedefunsignedintU16;/*definedforunsigned16-bitsintegervariable无符号16位整型变量*/
typedefsignedintS16;/*definedforsigned16-bitsintegervariable有符号16位整型变量*/
typedefunsignedlongU32;/*definedforunsigned32-bitsintegervariable无符号32位整型变量*/
typedefsignedlongS32;/*definedforsigned32-bitsintegervariable有符号32位整型变量*/
typedeffloatF32;/*singleprecisionfloatingpointvariable(32bits)单精度浮点数(32位长度)*/
typedefdoubleF64;/*doubleprecisionfloatingpointvariable(64bits)双精度浮点数(64位长度)*/
//
#defineucharunsignedchar
#defineuintunsignedint
#defineData_0_time4
sbitP2_0=P2^0;
U8U8FLAG,k;
U8U8count,U8temp;
U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8U8comdata;
U8outdata[5];//定义发送的字节数
U8indata[5];
U8count,count_r=0;
U8str[5]={"RS232"};
U16U16temp1,U16temp2;
SendData(U8*a)
{
outdata[0]=a[0];
outdata[1]=a[1];
outdata[2]=a[2];
outdata[3]=a[3];
outdata[4]=a[4];
count=1;
SBUF=outdata[0];
}
voidDelay(U16j)
{U8i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
voidDelay_10us(void)
{
U8i;
i--;
i--;
i--;
i--;
i--;
i--;
}
voidCOM(void)
{
U8i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!
P2_0)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P2_0)U8temp=1;
U8FLAG=2;
while((P2_0)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
//如果高电平高过预定0高电平值则数据位为1
U8comdata<<=1;
U8comdata|=U8temp;//0
}//rof
}
//--------------------------------
//-----湿度读取子程序------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位==U8T_data_H------
//----温度低8位==U8T_data_L------
//----湿度高8位==U8RH_data_H-----
//----湿度低8位==U8RH_data_L-----
//----校验8位==U8checkdata-----
//----调用相关子程序如下----------
//----Delay();,Delay_10us();,COM();
//--------------------------------
voidRH(void)
{
//主机拉低18ms
P2_0=0;
Delay(180);
P2_0=1;
//总线由上拉电阻拉高主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入判断从机响应信号
P2_0=1;
//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行
if(!
P2_0)//T!
{
U8FLAG=2;
//判断从机是否发出80us的低电平响应信号是否结束
while((!
P2_0)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出80us的高电平,如发出则进入数据接收状态
while((P2_0)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P2_0=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
//----------------------------------------------
//main()功能描述:
AT89C5111.0592MHz串口发
//送温湿度数据,波特率9600
//----------------------------------------------
voidmain()
{
U8i,j;
//ucharstr[6]={"RS232"};
/*系统初始化*/
TMOD=0x20;//定时器T1使用工作方式2
TH1=253;//设置初值
TL1=253;
TR1=1;//开始计时
SCON=0x50;//工作方式1,波特率9600bps,允许接收
ES=1;
EA=1;//打开所以中断
TI=0;
RI=0;
SendData(str);//发送到串口
Delay
(1);//延时100US(12M晶振)
while
(1)
{
//------------------------
//调用温湿度读取子程序
RH();
//串口显示程序
//--------------------------
str[0]=U8RH_data_H;
str[1]=U8RH_data_L;
str[2]=U8T_data_H;
str[3]=U8T_data_L;
str[4]=U8checkdata;
SendData(str);//发送到串口
//读取模块数据周期不易小于2S
Delay(20000);
}//elihw
}//main
voidRSINTR()interrupt4using2
{
U8InPut3;
if(TI==1)//发送中断
{
TI=0;
if(count!
=5)//发送完5位数据
{
SBUF=outdata[count];
count++;
}
}
if(RI==1)//接收中断
{
InPut3=SBUF;
indata[count_r]=InPut3;
count_r++;
RI=0;
if(count_r==5)//接收完4位数据
{
//数据接收完毕处理。
count_r=0;
str[0]=indata[0];
str[1]=indata[1];
str[2]=indata[2];
str[3]=indata[3];
str[4]=indata[4];
P0=0;
}
}
}
4.3BH1750光感模块
4.3.1BH1750光感模块简介
BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路。
这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。
利用它的高分辨率可以探测较大范围的光强度变化。
4.3.2BH1750特点
1.支持I2CBUS接口(f/sModeSupport)。
2.接近视觉灵敏度的光谱灵敏度特性(峰值灵敏度波长典型值:
560nm)。
3.输出对应亮度的数字值。
4.对应广泛的输入光范围(相当于1-65535lx)。
5.通过降低功率功能,实现低电流化。
6.通过50Hz/60Hz除光噪音功能实现稳定的测定
7.支持1.8V逻辑输入接口。
8.无需其他外部件。
9.光源依赖性弱(白炽灯,荧光灯,卤素灯,白光LED,日光灯)。
10.有两种可选的I2Cslave地址。
11.可调的测量结果影响较大的因素为光入口大小。
12.使用这种功能能计算1.1lx到100000lx马克斯/分钟的范围。
13.最小误差变动在±20%。
14.受红外线影响很小。
VCCDVI
GND
4.4LCD12864液晶屏
4.4.1LCD12864简介
LCD12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
4.4.2LCD12864基本特性
●低电源电压(VDD:
+3.0--+5.5V)
●显示分辨率:
128×64点
●内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
●内置128个16×8点阵字符
●2MHZ时钟频率
●显示方式:
STN、半透、正显
●驱动方式:
1/32DUTY,1/5BIAS
●视角方向:
6点
●背光方式:
侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
●通讯方式:
串行、并口可选
●内置DC-DC转换电路,无需外加负压
●无需片选信号,简化软件设计
●工作温度:
0℃-+55℃,存储温度:
-20℃-+60℃
4.4.3LCD12864引脚说明
管脚号
管脚名称
电平
管脚功能描述
1
VSS
0V
电源地
2
VCC
3.0+5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据
5
R/W(SID)
H/L
R/W=“H”,E=“H”,数据被读到DB7——DB0
R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR
6
E(SCLK)
H/L
使能信号
7
DB0
H/L
三态数据线
8
DB1
H/L
三态数据线
9
DB2
H/L
三态数据线
10
DB3
H/L
三态数据线
11
DB4
H/L
三态数据线
12
DB5
H/L
三态数据线
13
DB6
H/L
三态数据线
14
DB7
H/L
三态数据线
15
PSB
H/L
H:
8位或4位并口方式,L:
串口方式
16
NC
-
空脚
17
/RESET
H/L
复位端,低电平有效
18
VOUT
-
LCD驱动电压输出端
19
A
VDD
背光源正端(+5V)
20
K
VSS
背光源负端
5设计总结
通过对环境信息探测控制系统的设计制作,使系统更加完善,对周围环境的检查更加精确,节省大量人力物力,以及时间。
通过控制系统的制作方法,我们可以进一步的完善系统,使其功能更加强大,完善,彻底实现人机互动。
附录一系统流程图
Y
N
y
N
附录二系统电路图
附录三原理方框图
实物图