51单片机 光敏电阻5506与ADC0832驱动程序

电路图

5506光敏电阻光强增加电阻值减小

以上电路实测无光时电压1.5v 有光且较亮时电压2.7v。

转换程序和ADC0832程序如下

复制代码
// ADC0832引脚定义
sbit ADC_CS = P1^2;    // 片选信号
sbit ADC_CLK = P1^0;   // 时钟信号
sbit ADC_DIO = P1^1;   // 数据线

// 获取电压值 - 返回char,实际值需除以10
char getVoltage()
{
    unsigned char adcValue = ADC0832_ReadByte(0);  // 读取通道0的值
    return (char)(adcValue * 50 / 255);  // 转换为电压值(0-5.0V),乘以10表示小数点后一位
}


// 获取光照强度 - 将电压值转换为光照强度(0-100)
unsigned char getLightIntensity()
{
    unsigned char voltage = getVoltage();
    // 光照强度与电压成正比,但需要映射到合适的范围
    // 无光时1.5V (15),有光且较亮时2.7V (27)
    if(voltage < 15) // 低于最小值
        return 0;
    else if(voltage > 27) // 高于最大值
        return 100;
    else
        // 将15-27的电压值映射到0-100的光照强度
        return (voltage - 15) * 100 / 12;
}
/******************************************************************************/
// ADC0832相关函数
/******************************************************************************/
void Delay5us()
{
	uchar i, j;

	i = 2;
	j = 2;
	do
	{
		while (--j)
			;
	} while (--i);
}
unsigned char ADC0832_ReadByte(unsigned char channel)
{
    unsigned char i, j, dat = 0;
    
    ADC_CS = 0;
    
    // 发送起始位
    ADC_CLK = 0;
    ADC_DIO = 1;
    Delay5us();
    ADC_CLK = 1;
    Delay5us();
    
    // 发送通道选择位
    ADC_CLK = 0;
    ADC_DIO = 1;    // 通道选择位SGL/DIF=1,表示单端输入
    Delay5us();
    ADC_CLK = 1;
    Delay5us();
    
    ADC_CLK = 0;
    ADC_DIO = channel;    // 通道选择位ODD/SIGN=0或1,0表示CH0,1表示CH1
    Delay5us();
    ADC_CLK = 1;
    Delay5us();
    
    ADC_CLK = 0;
    ADC_DIO = 1;    // 释放总线
    
    // 读取数据
    for(i = 0; i < 8; i++)
    {
        ADC_CLK = 1;
        Delay5us();
        ADC_CLK = 0;
        Delay5us();
        j = ADC_DIO;
        dat = (dat << 1) | j;
    }
    
    ADC_CS = 1;
    return dat;
}
相关推荐
周周记笔记12 小时前
GD32F450xx MCU Datasheet 解读:硬件测试工程师的测试方法论
单片机·嵌入式硬件
潘潘的嵌入式日记13 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
AOI小白新手上路15 小时前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
HUI-47415 小时前
EG1135|SSOP‑16 同步整流降压控制器,大功率外置 MOS 降压优选
单片机·嵌入式硬件·硬件工程
单片机仿真设计16 小时前
【proteus仿真】基于 STM32 单片机恒温箱控制系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
国科安芯16 小时前
星载CAN总线通信网络中抗辐射MCU的通信可靠性设计分析
网络·人工智能·分布式·单片机·嵌入式硬件·架构
新晨单片机设计18 小时前
S003A-基于STM32单片机温度计(数码管显示)【Proteus仿真+Keil程序+原理图】
stm32·单片机·stm32单片机功能定制
AOI小白新手上路18 小时前
江科协51单片机16-1 DA数模转换实验(PWM 呼吸灯)
单片机·嵌入式硬件·51单片机
hongmai66688819 小时前
告别Wi-Fi,专注Mesh:ESP32-H2-MINI-1U-H2S模组规格与应用
单片机·嵌入式硬件·物联网·5g·h.265
Yiran_G19 小时前
BLE通信距离怎么判断?从发射功率、PHY到天线设计分析
单片机·嵌入式硬件