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;
}
相关推荐
路上有只喵1 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇 11
单片机·嵌入式硬件
不昀2 小时前
开关电源电流互感器怎么选:匝比、采样电阻与复位的计算笔记
单片机·嵌入式硬件·电子元器件
小李不想当小白4 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
youcans_6 小时前
【嵌入式软件AI编程】(3)面向 AI 协同开发的 STM32 硬件信息标准化
人工智能·stm32·嵌入式硬件·ai编程
智者知已应修善业9 小时前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
辰哥单片机设计9 小时前
STM32智能药盒丨2027单片机新项目
stm32·单片机·嵌入式硬件
LCG米20 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga1 天前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡1 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范