说明文档:
1、上电之后LED灯点亮,代表当前灯是自动控制模式;
2、通过按键K1可以在自动和手动模式来回切换;
3、在手动模式下,按键K2增加亮度,按键K3减小亮度;
4、在自动模式下,首先要检测到有人或者声音,才进行亮度的自动控制,否则台灯熄灭。可以挡住光敏电阻的光线,或用手电筒来照射光敏电阻,模拟光照的变化,从而就可以看到灯的亮度会随着环境中的光照强度的改变而改变,效果是光照越弱,台灯越亮。如果人体传感器1分钟检测不到有人,台灯就会自动熄灭。(光敏电阻在USB灯后面);
5、无论是自动模式还是手动模式,都是把亮度分为10个等级的,并在LCD上显示0-9;
6、LCD1602实时显示环境温度
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1y0RQc8tcFwbhssuVOHxuOQ?pwd=8888
部分代码展示
sbit LED = P2^0; //自动模式指示灯
sbit sound = P1^4; //声音传感器
sbit dq = P2^1; //18b20 IO口的定义
sbit Module = P2^2; // 人体红外感应引脚定义
sbit Lamp = P1^3; // 照明灯定义
uchar gCount=0; // 全局计数变量
uchar gIndex; // 亮度变量,0是最暗,9是最亮,一共10档
uint gTime=0; // 计时变量,用于计时多久没检测到有人
uint temperature ; //温度变量
uchar ret; //AD采集结果
/*********************************************************/
// 毫秒级的延时函数,time是要延时的毫秒数
/*********************************************************/
void DelayMs(uint time)
{
uint i,j;
for(i=0;i<time;i++)
for(j=0;j<112;j++);
}
/*********************************************************/
// ADC0832的时钟脉冲
/*********************************************************/
void WavePlus()
{
_nop_();
ADC_CLK = 1;
_nop_();
ADC_CLK = 0;
}
/*********************************************************/
// 获取指定通道的A/D转换结果
/*********************************************************/
uchar Get_ADC0832()
{
uchar i;
uchar dat1=0;
uchar dat2=0;
ADC_CLK = 0; // 电平初始化
ADC_DAT = 1;
_nop_();
ADC_CS = 0;
WavePlus(); // 起始信号
ADC_DAT = 1;
WavePlus(); // 通道选择的第一位
ADC_DAT = 0;
WavePlus(); // 通道选择的第二位
ADC_DAT = 1;
for(i=0;i<8;i++) // 第一次读取
{
dat1<<=1;
WavePlus();
if(ADC_DAT)
dat1=dat1|0x01;
else
dat1=dat1|0x00;
}
for(i=0;i<8;i++) // 第二次读取
{
dat2>>= 1;
if(ADC_DAT)
dat2=dat2|0x80;
else
dat2=dat2|0x00;
WavePlus();
}
_nop_(); // 结束此次传输
ADC_DAT = 1;
ADC_CLK = 1;
ADC_CS = 1;
if(dat1==dat2) // 返回采集结果
return dat1;
else
return 0;
}
完整版 电路图和程序代码 下载地址