基于51单片机的光控LED.docx
- 文档编号:11712178
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:11
- 大小:75.71KB
基于51单片机的光控LED.docx
《基于51单片机的光控LED.docx》由会员分享,可在线阅读,更多相关《基于51单片机的光控LED.docx(11页珍藏版)》请在冰豆网上搜索。
基于51单片机的光控LED
光控LED
摘要
本作品采用光敏电阻采光实现光电转换;采用12位串行ADCMAX144将光电转换后的电压值转换为数字量,转换的数字量经12位串行DACMAX531转换成电压后控制电流控制白光LED的亮度,实现了光控的目的;流过LED的电流值可预置并显示。
一、系统方案设计与论证
经过分析和论证,此光控LED可分为光电转换、模数转
换、数模转换、电压控制电流与功率放大这几个模块。
1、光电转换方案论证与选择
光敏电阻是利用半导体光电导效应制成的一种特殊电阻器,对光线十分敏感。
无光照时呈高阻状态,暗电阻可达MΩ级,当有光照射时,其电阻值迅速减小,亮电阻只有几十至百KΩ。
其光强围宽,灵敏度高,无极性之分使用方便,适用于该自动控制系统中:
将光敏电阻与一10KΩ的电阻相连接+5V电压,光照变化可使其电压在+1.7~+4.5V变化,实现从光到电的转换。
2﹑模数转换方案论证
MAX144是一款低功耗,具有较高精度的串行模数转换器,其与单片机之间采用SPI通信,只需要三个口与单片机相连,节省了单片机的引脚资源。
输入通道接入光敏电阻两端电压可将其转换成数字量送入单片机处理。
3﹑数模转换方案论证
MAX531是一款低功耗,输出端口输出电压,SPI串行口通信的12位DAC。
它可实现将A/D转换后的结果或按键预置的数据转换成模拟量,其分辨率高达Vef/4096,所以电压变电流后可以满足在0~100mA之间步进0.1mA的精度要求。
4、压变流方案与功率放大方案论证与选择
按照白光LED的电流、电压变化规律,一般应用正向电压为3.0-3.6V左右,典型值电压为3.3V,当加于LED两端的正向电压超过3.6V后,正向电压很小的增加,LED的正向电流都有可能会成倍增涨,使LED发光体温升过快,从而加速LED光衰减,使LED的寿命缩短,严重时甚至烧坏LED.也就是若单纯施加一定的顺向电压时,顺向电流会作大围的变化,因此采用电流驱动方式,是比较理想的LED驱动方式,它能避免LED正向电压的改变而引起电流变动,同时使LED的亮度稳定,缺点是成本较高。
当驱动较多LED不能给它提供足够的电流时,需要运放驱动输出级的BJT来实现电流放大(扩流)后反馈到运放的同相端。
确定的详细的系统框图如图1-1所示。
二﹑电路与程序设计
1﹑光电转换电路设计
如图2-1所示。
2﹑模数转换电路设计
光敏电阻将光转换成电压后,接入MAX144的通道一进行数模转换电路2-1所示。
图2—1
图2—2模数转换电路
3﹑数模转换电路
单片机受到MAX144模数转换后的数据送给MAX531进行数模转换成电压控制LED的驱动电路,电路如图2—3所示。
图2—3数模转换电路
4﹑LED的驱动电路
将MAX531经数模转换后的电压变成电流并驱动BJT放大电流,电路如图2—4所示。
图2—4LED驱动电路
5、程序设计
采用51单片机做主控制器,程序流程图如图2—5所示。
图2—5程序流程图
附录详细程序清单
#include
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint
#definedelay4us(){_nop_();_nop_();_nop_();_nop_();}
//输入端口设定
sbitmax144_CS=P1^7;
sbitmax144_DOUT=P1^6;//定义max144端口,Vref=4.5V
sbitmax144_SCLK=P1^5;
sbitkey_cut=P3^2;//切换
sbitkey_add=P3^3;//+
sbitkey_dec=P3^4;//-
sbitkey_back=P3^5;//返回
//输出端口
sbitLCD_RS=P2^4;
sbitLCD_RW=P2^5;//LCD位申明
sbitLCD_EN=P2^6;
//
sbitmax531_DIN=P2^0;//定义max531端口
sbitmax531_CLR=P2^1;
sbitmax531_SCLK=P2^2;
sbitmax531_CS=P2^3;
uintI[]={'0','0','0'};//数据分解为电流XX.X
ucharcodeDsp_Title[]={"CurrentI:
"};
ucharCurrent_I_Dsp_Buffer[]={"I-.mA"};
uintData,result;
bitsign;
//延时
voiddelay(intms)
{
uchari;
while(ms--)
for(i=0;i<250;i++)delay4us();
}
//LCD忙检查
bitbusy_check()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delay4us();
result=(bit)(P0&0x80);
LCD_EN=0;
returnresult;
Data=result;
}
//LCD写指令
voidwrite_(uchar)
{
while(busy_check());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();_nop_();
P0=;
delay4us();
LCD_EN=1;
delay4us();
LCD_EN=0;
}
//LCD写数据
voidwrite_data(uchardat)
{
while(busy_check());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay4us();
LCD_EN=1;
delay4us();
LCD_EN=0;
}
//设置显示位置
voidset_pos(ucharpos)
{
write_(pos|0x80);
}
//LCD初始化
voidinit()
{
write_(0x38);
delay(5);
write_(0x0c);
delay(5);
write_(0x06);
delay(5);
write_(0x01);
delay(5);
}
//显示
voiddsp(ucharaddr,uchars[])
{
uchari;
set_pos(addr);
for(i=0;i<10;i++)
write_data(s[i]);
}
//将模数转换后得到的结果分解存入缓冲
voidconvert_to_I()
{
//最大值为4000,对应于100mA,4000/100=40
I[2]=(Data/40)/10+'0';//十位数
I[1]=(Data/40)%10+'0';//个位?
I[0]=0+'0';//小数位
}
//读取A/D转换结果
voidread_144_convert_Data()
{
uchari,j;
max144_SCLK=0;
max144_CS=1;
max144_CS=0;
_nop_();_nop_();
for(i=0;i<16;i++)
{
max144_SCLK=1;
j=max144_DOUT;
Data<<=1;
Data|=j;
max144_SCLK=0;
}
max144_CS=1;
Data&=0X0FFF;
}
voidread_keycontrol_data()
{
Data=Data;
if(!
key_add)
{
delay(8);
if(!
key_add)
{
while(!
key_add);
if(Data<0xFA0)
Data=Data+40;
}
}
elseif(!
key_dec)
{
delay(8);
if(!
key_dec)
{
while(key_dec);
if(Data>0x07)
Data=Data-8;
}
}
elseif(!
key_back)
{
delay(8);
if(!
key_back)
{
while(!
key_back);
sign=0;
}
}
}
//将A/D转换后的结果或按键输入的数值送入MAX531进行D/A转换
voidsend_Data_to_531()
{
uchari;
max531_CLR=1;
max531_CS=0;
i=12;
while(i--)
{
max531_SCLK=0;
max531_DIN=(bit)(Data&0x0800);
Data<<=1;
max531_SCLK=1;
}
max531_CS=1;
}
//主程序
voidmain()
{
init();
while
(1)
{
if(!
key_cut)
{
delay(8);
if(!
key_cut)
{
while(!
key_cut);
sign=1;
Data=0x7D0;
while(sign)
{
read_keycontrol_data();
convert_to_I();//数据转换
Current_I_Dsp_Buffer[2]=I[2];
Current_I_Dsp_Buffer[3]=I[1];
Current_I_Dsp_Buffer[5]=I[0];
dsp(0x00,Dsp_Title);
dsp(0x40,Current_I_Dsp_Buffer);
send_Data_to_531();
}
}
}
read_144_convert_Data();
convert_to_I();//数据转换
Current_I_Dsp_Buffer[2]=I[2];
Current_I_Dsp_Buffer[3]=I[1];//分解存入显示缓冲
Current_I_Dsp_Buffer[5]=I[0];
dsp(0x00,Dsp_Title);//显示标题
dsp(0x40,Current_I_Dsp_Buffer);
send_Data_to_531();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 光控 LED
![提示](https://static.bdocx.com/images/bang_tan.gif)