基于51单片机的光控LEDWord格式.docx

上传人:b****4 文档编号:8305642 上传时间:2023-05-11 格式:DOCX 页数:11 大小:75.71KB
下载 相关 举报
基于51单片机的光控LEDWord格式.docx_第1页
第1页 / 共11页
基于51单片机的光控LEDWord格式.docx_第2页
第2页 / 共11页
基于51单片机的光控LEDWord格式.docx_第3页
第3页 / 共11页
基于51单片机的光控LEDWord格式.docx_第4页
第4页 / 共11页
基于51单片机的光控LEDWord格式.docx_第5页
第5页 / 共11页
基于51单片机的光控LEDWord格式.docx_第6页
第6页 / 共11页
基于51单片机的光控LEDWord格式.docx_第7页
第7页 / 共11页
基于51单片机的光控LEDWord格式.docx_第8页
第8页 / 共11页
基于51单片机的光控LEDWord格式.docx_第9页
第9页 / 共11页
基于51单片机的光控LEDWord格式.docx_第10页
第10页 / 共11页
基于51单片机的光控LEDWord格式.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的光控LEDWord格式.docx

《基于51单片机的光控LEDWord格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的光控LEDWord格式.docx(11页珍藏版)》请在冰点文库上搜索。

基于51单片机的光控LEDWord格式.docx

二﹑电路与程序设计

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<

reg52.h>

intrins.h>

#defineucharunsignedchar//宏定义

#defineuintunsignedint

#definedelay4us(){_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'

'

};

//数据分解为电流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_RW=0;

_nop_();

P0=;

//LCD写数据

voidwrite_data(uchardat)

LCD_RS=1;

P0=dat;

//设置显示位置

voidset_pos(ucharpos)

write_(pos|0x80);

//LCD初始化

voidinit()

write_(0x38);

delay(5);

write_(0x0c);

write_(0x06);

write_(0x01);

//显示

voiddsp(ucharaddr,uchars[])

set_pos(addr);

for(i=0;

10;

i++)

write_data(s[i]);

//将模数转换后得到的结果分解存入缓冲

voidconvert_to_I()

//最大值为4000,对应于100mA,4000/100=40

I[2]=(Data/40)/10+'

;

//十位数

I[1]=(Data/40)%10+'

//个位?

I[0]=0+'

//小数位

//读取A/D转换结果

voidread_144_convert_Data()

uchari,j;

max144_SCLK=0;

max144_CS=1;

max144_CS=0;

16;

i++)

{

max144_SCLK=1;

j=max144_DOUT;

Data<

<

=1;

Data|=j;

max144_SCLK=0;

}

Data&

=0X0FFF;

voidread_keycontrol_data()

Data=Data;

if(!

key_add)

{

delay(8);

if(!

{

while(!

key_add);

if(Data<

0xFA0)

Data=Data+40;

}

elseif(!

key_dec)

{

delay(8);

if(!

{

while(key_dec);

if(Data>

0x07)

Data=Data-8;

}

elseif(!

key_back)

delay(8);

if(!

{

while(!

key_back);

sign=0;

}

//将A/D转换后的结果或按键输入的数值送入MAX531进行D/A转换

voidsend_Data_to_531()

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)

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();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2