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;
}
相关推荐
anghost1503 小时前
基于 STM32 的多传感器健康监测系统设计
stm32·单片机·嵌入式硬件
玉~你还好吗3 小时前
【嵌入式电机控制#34】FOC:意法电控驱动层源码解析——HALL传感器中断(不在两大中断内,但重要)
单片机·嵌入式系统·电机控制
STC_USB_CAN_80514 小时前
所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
单片机·嵌入式硬件·51单片机
正点原子4 小时前
《ESP32-S3使用指南—IDF版 V1.6》第三十四章 RGB触摸实验
单片机·物联网·嵌入式
码小文6 小时前
Altium Designer 22使用笔记(8)---PCB电气约束设置
笔记·嵌入式硬件·硬件工程·ad22
dumpling01206 小时前
新手向:使用STM32通过RS485通信接口控制步进电机
stm32·单片机·嵌入式硬件
hazy1k6 小时前
STM32-FreeRTOS快速入门指南(中)
stm32·单片机·嵌入式硬件
清风6666667 小时前
基于51单片机自动浇花1602液晶显示设计
单片机·嵌入式硬件·mongodb·毕业设计·51单片机·课程设计
古译汉书7 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法
小莞尔12 小时前
【Proteus仿真】【51单片机】基于51单片机密码锁
stm32·单片机·嵌入式硬件·51单片机·proteus