资料编号:077
功能介绍:采用51单片机作为控制CPU,可以通过设置开灯和关灯时间开自动控制路灯的打开和关闭,也可以通过光照强度来控制路灯的开关,采用LCD1602显示屏来显示相关内容,独立按键进行功能调节,相关功能调节如下:
模式1设置时间的时
模式2设置时间的分
模式3设置时间的秒
模式4设置光敏值要求光照达到一定程度才会亮灯
晚上时间无论设置多少的值都是常亮
现在时间设置为19点自动亮到凌晨6点自动关闭如设置光敏值低于白天亮度时可以亮路灯等,程序中文注释,新手容易看懂,全套实物资料齐全:
下面是实物演示视频和相关实物图片
下面是程序部分展示(程序有中文注释,新手容易看懂)
程序部分展示:
//IIC起始函数
void iic_start()
{
SCL = 1;
SDA = 1;
nops4();
SDA = 0;
nops4();
SCL = 0;
}
//IIC停止函数
void iic_stop()
{
SCL = 0;
SDA = 0;
nops4();
SCL = 1;
nops4();
SDA = 1;
nops4();
}
/*
* 函数: void iic_sendACK(bit ack_back)
功能: 主机读完数据后是否向从机发送应答信号
*ck为1时发送应答信号ACK, SDA拉低,继续通信
*ck为0时不发送ACK,SDA置1,结束通信*/
void iic_sendACK(bit ack_back)
{
if(ack_back)
SDA = 0; //应答,SDA拉低,继续通信
else
SDA = 1; //非应答,SDA置1,结束通信
nops4();
SCL = 1;
nops4();
SCL = 0;
nops4();
SDA = 1;
}
/*主机写字节后检测读取从机发送的应答(写应答)*/
bit iic_recACK()
{
uchar i=0;
SDA = 1; //先拉高SDA,等待检测
nops4();
SCL = 1;
nops4();
while((1==SDA)&&(i<255)) i++; //SDA为1时,循环检测255次
if(SDA) //非应答,拉低SCL,停止,返回1
{
SCL = 0;
iic_stop();
return 1;
}
else //应答,拉低SCL,返回1
{
SCL = 0;
return 0;
}
}
/*主机发送1字节数据给从机*/
/*从最高位开始发送*/
void iic_sendbyte(uchar byt)
{
uchar i;
for(i=0;i<8;i++)
{
if(byt&0x80) //判断最高位,并赋予SDA
SDA = 1;
else
SDA = 0;
nops4();
SCL = 1; //SCL高电平,SDA数据稳定,发送
nops4();
byt<<=1; //发送完成,字节左移
SCL = 0;
}
}
/*主机读取1字节数据*/
/*从高位接收,存放在低位*/
uchar iic_recbyte()
{
uchar i,byt;
for(i=0;i<8;i++)
{
SCL = 1; //SCL高电平,SDA数据稳定
nops4();
byt<<=1; //接收数据左移
if(SDA) //判断接收数据,并赋给byt,1则+1,0则保持0;
byt = byt|0x01;
SCL = 0; //拉低SCL,准备接收下一位数据
nops4();
}
return byt; //读取字节完毕,返回读取值
}
程序打开方法:采用keil5打开,公众号有软件安装包
原理图采用【AD】altium designer打开,公众号有安装包
下面是资料包里面包含的相关文件展示
资料源链接:设计资料合集