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;
}
相关推荐
大爱编程♡6 小时前
GPIO-I2C
stm32·单片机·嵌入式硬件
振南的单片机世界8 小时前
PVD掉电中断——让单片机“咽气前”写完遗书
arm开发·stm32·单片机·嵌入式硬件
续写烂尾10 小时前
SD NAND存储实测:正点原子STM32精英板SDIO读写验证全流程
stm32·单片机·嵌入式硬件
zlinear数据采集卡12 小时前
USB HS 480M高速传输与SRAM记录仪:DABM-D223数据存储系统全解析
arm开发·嵌入式硬件·fpga开发·开源
wuyk55513 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
Crkylin13 小时前
Cortex-M SysTick系统滴答定时器详解
单片机·嵌入式硬件
Hello_Damon_Nikola14 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
gscsded15 小时前
AUTOSAR CanTp 模块学习笔记
单片机·嵌入式硬件·汽车
Hello_Damon_Nikola15 小时前
扰流筋从原理到应用
人工智能·单片机·嵌入式硬件
某林21215 小时前
从“仿真能跑”到“真机能走”:一套轮腿机械狗强化学习系统的工程化实践
人工智能·stm32·嵌入式硬件·架构·机器人·机械狗