基于单片机的光感自动控制百叶窗系统文档格式.docx

上传人:b****4 文档编号:7645539 上传时间:2023-05-08 格式:DOCX 页数:20 大小:329.49KB
下载 相关 举报
基于单片机的光感自动控制百叶窗系统文档格式.docx_第1页
第1页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第2页
第2页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第3页
第3页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第4页
第4页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第5页
第5页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第6页
第6页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第7页
第7页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第8页
第8页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第9页
第9页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第10页
第10页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第11页
第11页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第12页
第12页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第13页
第13页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第14页
第14页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第15页
第15页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第16页
第16页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第17页
第17页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第18页
第18页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第19页
第19页 / 共20页
基于单片机的光感自动控制百叶窗系统文档格式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的光感自动控制百叶窗系统文档格式.docx

《基于单片机的光感自动控制百叶窗系统文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的光感自动控制百叶窗系统文档格式.docx(20页珍藏版)》请在冰点文库上搜索。

基于单片机的光感自动控制百叶窗系统文档格式.docx

利用内部复位电路进行初始化

清屏(DISPLAYCLEAR);

功能设置(FUNCTIONSET);

DL=1:

8Bit接口数据;

N=0:

1行显示;

F=0:

7dot字形;

显示开/关控制(DISPLAYON/OFFCONTROL)

D=0:

显示关;

C=0:

光标关;

B=0:

消隐关

输入方式设置(ENTRYMODESET)

I/D=1:

(增量):

S=0:

无移位:

ADC0809

图1

ADC0809内部结构图

IN7~IN0——模拟量输入通道

ALE——地址锁存允许信号。

对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。

START——转换启动信号。

START下降沿时启动芯片,开始进行A/D转换;

在A/D转换期间,START应保持低电平。

A、B、C——地址线。

通道端口选择线,A为低地址,C为高地址,

CLK——时钟信号。

通常使用频率为500KHz的时钟信号

EOC——转换结束信号。

EOC=0,正在进行转换;

EOC=1,转换结束。

D7~D0——数据输出线。

D0为最低位,D7为最高

OE——输出允许信号。

OE=0,输出数据线呈高阻;

OE=1,输出转换得到的数据。

Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。

ULN2003

图2

ULN2003引脚图

步进电动机28BYJ-48

图3内部接线图

表3

八相励磁顺序表

二、硬件总体设计:

系统组成方案:

1、AD转换模块

如图1

R10为标准10K电阻,RV1为10K滑动变阻器,以代替光敏电阻仿真。

由于仿真软件只支持ADC0808芯片仿真,故在仿真时使用此芯片,实际电路板中选用了ADC0809。

处于实际电路板焊接时候引脚选用方便考虑,选用IN7输出口。

即将模拟输入选择口ADDA、ADDB、ADDC接入VCC。

处于实际电路焊接考虑,将ST接入P3.0口,EOC接入P3.1口,OE接入P3.2口,CLK接入P3.3口,具体电路如右图。

图4AD转换电路图

图5ADC0808控制端接口图

2、

LCD显示

LCD接口如图所示,由于单片机P0口和P2口在单片机的右边,故将LCD的输入口和控制口分别接入P0和P2口,由于P0口无上拉电阻,故接入LCD时接入一排上拉电阻。

如右图

图6LCD电路图

3、步进电动机驱动

如果直接用单片机驱动步进电动机,因为单片机的输出电流太低,功率不够,无法驱动步进电动机,故接入达林顿管ULN2003来增加输出功率,处于实际电路焊接考虑,使用P3.4~P3.7端口。

电路如下图

图7

步进电动机驱动电路

由于步进电动机电路简单,以及在仿真中方便观察电动机的状态(正转、反转)和持续的时间,故将电动机的驱动输出换成发光二极管。

图8二极管代替步进机电路

4、暂停控制

用开关控制,开关闭合时步进电动机暂停,LCD显示暂停状态(*字符),但依旧可以测量出光强值。

图9,暂停开关电路

总体电路图如下(仿真,未接晶振及复位电路,使用发光二极管代替步进电动机)

图10总电路仿真图

三、软件总体设计:

设计程序以及设计的原因和方法如下

#include<

reg52.h>

unsignedcharget_data;

unsignedinttemp;

unsignedcharcodetab1[]="

welcomeon!

"

;

unsignedcharcodetab2[]="

light:

unsignedcharcodetab3[]="

mcd"

sbitST=P3^0;

sbitEOC=P3^1;

sbitOE=P3^2;

sbitCLK=P3^3;

sbitA1=P3^5;

sbitB1=P3^6;

sbitC1=P3^7;

sbitD1=P3^4;

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

sbitkey=P2^4;

/*步进步伐,根据所购买的步进电动机28BYJ-48说明书,使用八相驱动*/

#definer1{A1=1;

B1=1;

C1=1;

D1=0;

}

#definer2{A1=1;

C1=0;

}

#definer3{A1=1;

D1=1;

#definer4{A1=1;

B1=0;

#definer5{A1=1;

#definer6{A1=0;

#definer7{A1=0;

#definer8{A1=0;

/*产生定时信号,作为ADC芯片的时钟信号*/

voidtimer()

{

TMOD=0x10;

TH0=(65536-190)/256;

TL0=(65536-190)%256;

EA=1;

ET0=1;

TR0=1;

/*延迟函数,单位为ms*/

voiddelay(unsignedintt)

inti,j;

for(i=t;

i>

0;

i--)

for(j=112;

j>

j--);

/*写指令*/

writecom(unsignedcharcom)

RS=0;

RW=0;

P0=com;

E=0;

delay

(1);

E=1;

/*写数据*/

writedata(unsignedchardate)

RS=1;

P0=date;

/*写数字*/

voidwritecount(unsignedintData)

switch(Data)

{case0:

writedata(0x30);

break;

case1:

writedata(0x31);

case2:

writedata(0x32);

case3:

writedata(0x33);

case4:

writedata(0x34);

case5:

writedata(0x35);

case6:

writedata(0x36);

case7:

writedata(0x37);

case8:

writedata(0x38);

case9:

writedata(0x39);

}

/*步进电动机正、反转*/

voidbujin(unsignedintpd)

if(pd)

{

r1

delay(5);

r2

r3

r4

r5

r6

r7

r8

else

{

};

/*显示函数,这里只是控制显示的光强值,显示为4位10进制数,*/

voiddisp(unsignedinta)

unsignedintc;

a*=4;

/*将转换所得模拟信号(最大为255)转成10进制数,因为10K光敏电阻对应的光强约为1cd,即1000mcd,为方便显示,故将模拟信号乘以4,估算以作参考*/

writecom(0xc0+7);

writecount(a/1000);

writecom(0xc0+8);

writecount(a%1000/100);

writecom(0xc0+9);

writecount(a%100/10);

writecom(0xc0+10);

writecount(a%10);

writecom(0xc0+11);

for(c=0;

c<

3;

c++)

writedata(tab3[c]);

/*判断函数,为了防止光敏电阻随各种因素导致的光强而不稳定的变动,使得驱动的步进电动机不停的微微转动,将光强分为5个等级,不同等级驱动步进电动机转的时间不同*/

pduan(unsignedinta)

unsignedintx;

if(a<

51)x=0;

elseif(a<

102)x=1;

153)x=2;

204)x=3;

elsex=4;

return(x);

/*主函数,前面包括LCD初始化,写入LCD第一行显示字符“welcomeon!

”和第二行显示字符“light:

”、“mcd”*/

main()

unsignedintcompare=0;

unsignedintdji;

unsignedinti,j,k;

writecom(0x38);

writecom(0x0c);

writecom(0x06);

writecom(0x80+1);

for(i=0;

i<

11;

i++)

writedata(tab1[i]);

writecom(0xc0+1);

for(j=0;

j<

6;

j++)

writedata(tab2[j]);

timer();

while

(1)/*主循环,不断的执行AD转换*/

ST=0;

OE=0;

ST=1;

while(EOC==0);

OE=1;

get_data=P1;

temp=get_data;

disp(temp);

/*不断的显示当前光强值*/

dji=pduan(temp);

writecom(0x80+14);

writedata(0x2a);

/*写空字符显示,以清除暂停状态显示的字符*/

if(key)/*判断是否执行暂停状态*/

{

writecom(0x80+14);

writedata(0x20);

/*显示暂停状态字符‘*’*/

if(dji>

compare)/*判断步进机为正转还是反转*/

{

for(k=25*(dji-compare);

k>

k--)/*所需转的角度*/

bujin(0);

compare=dji;

}

elseif(dji<

compare)

for(k=25*(compare-dji);

k--)

bujin

(1);

elsecompare=dji;

};

/*中断程序,产生时钟定时信号*/

voidt0(void)interrupt1using0

CLK=~CLK;

四、所遇问题及解决方法:

仿真时LCD无任何字符显示,检查源程序的LCD初始化是否正确,修改错误,重新载入源程序仿真。

显示的转换数据为错乱数据,网上查阅ADC0809芯片功能书发现改芯片的输出口与IO口的高低位相反,OUT0~OUT7为高位到低位,恰与我们平时定义的相反。

步进电动机驱动之后震而不能转,自习对照电动机的管脚说明书,重新正确接入每一个引脚。

五、实物图展示:

图10

电路板侧面图

图11

电路板正面图

图12

背面焊接图

六、心得体会:

通过这一次的电路设计,掌握了LCD液晶显示、AD转换和步进电动机驱动的方法,对单片机运用技术又有了进一步的提高。

单片机可以驱动电路和实现的功能多种多样,对单片机的灵活运用显然还欠缺许多知识,但经过这次的课程设计,相信对单片机的各方面可以慢慢学习渗透,将其融会贯通。

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

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

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

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