51单片机光敏电阻控制led亮

1.光敏电阻和单片机的接线vcc-5v,gnd-gnd,do-p2^0

2.我设置的是当周围亮时亮两盏灯,暗时亮四盏灯,可以根据自己需要调整。代码如下:

#include "reg51.h"
sbit key=P2^0;
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;

void main()
{
   LED1=LED2=LED3=LED4=1;
	while(1)
	{ 
		
	  if(key==0)
		{	LED1=LED2=LED3=LED4=1;
			LED1=0;
			LED2=0;
		}
		else
		{	LED1=LED2=LED3=LED4=1;
			LED1=0;
			LED2=0;
			LED3=0;
			LED4=0;			
		}
												
	}
}

根据提供的引用内容,可以得知51单片机光敏电阻调节LED度的具体实现方法如下: 1. 首先需要连接STC89C52单片机电路、光照检测电路(光敏电阻)、AD0832转换电路、4位高LED灯电路、按键电路和电源电路。 2. 系统具有自动模式和手动模式,按模式键可以进行切换。在手动模式下,按加、减键可以手动调节台灯的度。 3. 在自动模式下,需要实时监测当前度,比预设值小,就点一个LED,再检测,再点,以此类推,直到达到预设度。 4. 在手动模式下,需要通过光敏电阻检测当前度,并将其转换为电压信号,然后通过AD0832转换电路将其转换为数字信号,最后通过单片机控制4位高LED灯电路的度。 代码实现如下: ```c #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit led1 = P1^0; // 定义LED1引脚 sbit led2 = P1^1; // 定义LED2引脚 sbit led3 = P1^2; // 定义LED3引脚 sbit led4 = P1^3; // 定义LED4引脚 sbit key1 = P3^0; // 定义按键1引脚 sbit key2 = P3^1; // 定义按键2引脚 sbit key3 = P3^2; // 定义按键3引脚 sbit key4 = P3^3; // 定义按键4引脚 sbit light = P2^0; // 定义光敏电阻引脚 uchar code led_table[] = { // 定义数码管显示表 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; void delay(uint i) { // 延时函数 while(i--); } void display(uchar num) { // 数码管显示函数 P0 = led_table[num]; } uchar read_AD0832(uchar channel) { // 读取AD0832转换电路函数 uchar i, dat = 0; CS = 0; CLK = 0; DIN = 1; delay(1); CS = 1; delay(1); CS = 0; delay(1); DIN = 0; delay(1); CLK = 1; delay(1); CLK = 0; delay(1); DIN = 1; delay(1); CS = 1; delay(1); CS = 0; delay(1); DIN = 1; delay(1); CLK = 1; delay(1); CLK = 0; delay(1); DIN = channel; delay(1); for(i = 0; i < 8; i++) { CLK = 1; delay(1); CLK = 0; delay(1); dat <<= 1; dat |= DOUT; } CS = 1; return dat; } void main() { uchar mode = 0, light_value = 0, led_value = 0; while(1) { if(key1 == 0) { // 切换模式 delay(10); if(key1 == 0) { mode = !mode; while(!key1); } } if(key2 == 0 && mode == 0) { // 手动调节度 delay(10); if(key2 == 0) { led_value++; if(led_value > 15) { led_value = 0; } while(!key2); } } if(mode == 0) { // 手动模式 display(led_value); if(led_value == 0) { led1 = 0; led2 = 0; led3 = 0; led4 = 0; } else if(led_value == 1) { led1 = 1; led2 = 0; led3 = 0; led4 = 0; } else if(led_value == 2) { led1 = 1; led2 = 1; led3 = 0; led4 = 0; } else if(led_value == 3) { led1 = 1; led2 = 1; led3 = 1; led4 = 0; } else { led1 = 1; led2 = 1; led3 = 1; led4 = 1; } } else { // 自动模式 light_value = read_AD0832(0); // 读取光敏电阻的值 if(light_value < 100) { // 如果度小于100,点LED1 led1 = 1; led2 = 0; led3 = 0; led4 = 0; } else if(light_value < 200) { // 如果度小于200,点LED1和LED2 led1 = 1; led2 = 1; led3 = 0; led4 = 0; } else if(light_value < 300) { // 如果度小于300,点LED1、LED2和LED3 led1 = 1; led2 = 1; led3 = 1; led4 = 0; } else { // 如果度大于等于300,点LED1、LED2、LED3和LED4 led1 = 1; led2 = 1; led3 = 1; led4 = 1; } } } } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值