概述
自动模式下,根据环境光强来调节PWM占空比,让小灯亮度改变。
手动模式下,可以自己设置红灯暖光灯的PWM占空比,使得暖色调改变。
手动模式下,可以自己设置黄灯冷光灯的PWM占空比,使得冷色调改变。
任意模式下,都可以修改为倒计时模式,倒计时结束后,两小灯都关闭。
设置倒计时后,倒计时结束那么PWM占空比为0,小灯都关闭。
自动模式:
倒计时结束:
程序逻辑:
读取ADC0832光敏电阻:
/************端口定义********************/
sbit CS = P1 ^ 0; /* ADC0832片选 */
sbit CLK = P1 ^ 1; /* ADC0832时钟 */
sbit DIO = P1 ^ 2; /* ADC0832输入输出 */
/*****************************************/
/********ADC0832的A/D转换程序************************/
unsigned char Get_AD_Result( unsigned char ch )
{
unsigned char i, dat1 = 0, dat2 = 0;
CS = 0; _nop_(); _nop_(); /* 片选使能,低电平有效 */
CLK = 0; _nop_(); _nop_(); /* 芯片时钟输入 */
DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
/*
* 第1个下降沿之前,设DI=1/0
* 择单端/差分(SGL/DIF)模式中的单端输入模式
*/
CLK = 0; DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
/* 第2个下降沿之前,设置DI=0/1,选择CHO/CH1 */
CLK = 0;
if ( ch == 0 )
DIO = 0; /* 通道0 内部电压测试 */
else DIO = 1; /* 通道1 */
_nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
/* 第3个下降沿之前,设置DI=1 */
CLK = 0; DIO = 1; _nop_(); _nop_();
/* 第4-11个下降沿读数据(MSB->LSB) */
for ( i = 0; i < 8; i++ )
{
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
dat1 = dat1 << 1 | DIO;
}
/* 第11-18个下降沿读数据(LSB->MSB) */
for ( i = 0; i < 8; i++ )
{
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
dat2 = dat2 << ( (unsigned char) (DIO) << i);
}
CS = 1; /* 取消片选一个周期结束 */
/* 如果MSB->LSB和LSB->MSB读取的结果相同,则返回读取的结果,否则返回0 */
return(dat1);
/* return (dat1 == dat2) ? dat1:0;//取消校验 */
}
最后
以上就是眼睛大悟空为你收集整理的51单片机 Proteus仿真 智能台灯 调色光 倒计时 光强感应 光敏电阻的全部内容,希望文章能够帮你解决51单片机 Proteus仿真 智能台灯 调色光 倒计时 光强感应 光敏电阻所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复