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;
}
相关推荐
小莞尔21 小时前
【51单片机】【protues仿真】基于51单片机宠物投食系统
c语言·stm32·单片机·嵌入式硬件·51单片机
方圆工作室1 天前
Arduino音乐键盘程序
单片机·嵌入式硬件·计算机外设
Echo_cy_1 天前
STM32 SPI通信协议
stm32·单片机·嵌入式硬件
JiaWen技术圈1 天前
关于 MCU 芯片外围电路的快速入门介绍
单片机·嵌入式硬件
武文斌771 天前
arm启动代码总结
arm开发·嵌入式硬件·学习
我怕是好1 天前
学习stm32 蓝牙
stm32·嵌入式硬件·学习
药9551 天前
STM32开发(USART总线:UART总线)
stm32·单片机·嵌入式硬件
索迪迈科技1 天前
STM32F103C8T6开发板入门学习——点亮LED灯2
stm32·嵌入式硬件·学习
David WangYang1 天前
技巧:调试 SCPI 和 VISA 自动化(包括 NI I/O 跟踪)
stm32·单片机·自动化
清风6666661 天前
基于51单片机手机无线蓝牙APP控制风扇调速设计
单片机·mongodb·智能手机·毕业设计·51单片机·课程设计