ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:728.96KB ,
资源ID:25500890      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25500890.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的光感自动控制百叶窗系统.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、基于单片机的光感自动控制百叶窗系统摘要单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于各领域各方面。本次设计是以单片机为核心,加上其他器件,设计电路来实现百叶窗的控制。关键字:单片机 百叶窗一、课题简介31、基本要求 32、基本工作原理 33、各器件资料 3二、硬件总体设计61、AD转换模块 62、LCD显示73、步进电动机驱动74、暂停控制8三、软件总体设计9四、所遇问题及解决方法 17五、实物图展示17六、心得体会19一、课题简介:题目:光感自动控制百叶窗基本要求:以MCS-51系列单片机为核心,采用利用常用电子器件设计,用一台步进电动机

2、控制百叶窗的旋转包括正转、反转和暂停,用一个光敏电阻传感器测量室内光强度,并用LCD显示测量结果。基本工作原理:利用光敏电阻与标准电阻串联输入模拟信号,通过ADC0809芯片转换成数字信号传送给单片机,通过单片机处理并控制LCD显示当前的测量光强值,以及输出步进电动机的驱动信号,再利用达林顿管ULN2003提高单片机的输出功率驱动步进电动机。各器件资料:LCD1602表1 各引脚说明表表2 寄存器选择功能表利用内部复位电路进行初始化 清屏(DISPLAY CLEAR); 功能设置(FUNCTION SET);DL = 1: 8Bit 接口数据;N = 0: 1行显示; F = 0:57dot字

3、形; 显示开/关控制(DISPLAY ON/OFF CONTROL)D = 0: 显示关; C = 0: 光标关; B = 0: 消隐关 输入方式设置(ENTRY MODE SET )I/D = 1:(增量): S = 0: 无移位:ADC0809图1ADC0809内部结构图IN7IN0模拟量输入通道ALE地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。START转换启动信号。START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持 低电平。A、B、C地址线。 通道端口选择线,A为低地址,C为高地址,CLK时钟信号。通常使用频率为500KHz的

4、时钟信号EOC转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。D7D0数据输出线。D0为最低位,D7为最高 OE输出允许信号。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。Vref参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。ULN2003图2ULN2003引脚图步进电动机28BYJ-48 图 3 内部接线图表3八相励磁顺序表二、硬件总体设计:系统组成方案:1、AD转换模块 如图1R10为标准10K电阻,RV1为10K滑动变阻器,以代替光敏电阻仿真。由于仿真软件只支持ADC0808芯片仿真,故在仿真时使用此芯片,实际电路板中选用了ADC0809。处

5、于实际电路板焊接时候引脚选用方便考虑,选用IN7输出口。即将模拟输入选择口ADD A、ADD B、ADD C接入VCC。处于实际电路焊接考虑,将ST接入P3.0口,EOC接入P3.1口,OE接入P3.2口,CLK接入P3.3口,具体电路如右图。 图4 AD转换电路图图5 ADC0808控制端接口图2、LCD显示LCD接口如图所示,由于单片机P0口和P2口在单片机的右边,故将LCD的输入口和控制口分别接入P0和P2口,由于P0口无上拉电阻,故接入LCD时接入一排上拉电阻。如右图 图6 LCD电路图3、步进电动机驱动如果直接用单片机驱动步进电动机,因为单片机的输出电流太低,功率不够,无法驱动步进电

6、动机,故接入达林顿管ULN2003来增加输出功率,处于实际电路焊接考虑,使用P3.4P3.7端口。电路如下图图7 步进电动机驱动电路由于步进电动机电路简单,以及在仿真中方便观察电动机的状态(正转、反转)和持续的时间,故将电动机的驱动输出换成发光二极管。 图8 二极管代替步进机电路4、暂停控制用开关控制,开关闭合时步进电动机暂停,LCD显示暂停状态(*字符),但依旧可以测量出光强值。 图9,暂停开关电路总体电路图如下(仿真,未接晶振及复位电路,使用发光二极管代替步进电动机)图10 总电路仿真图三、软件总体设计:设计程序以及设计的原因和方法如下#include unsigned char get_

7、data;unsigned int temp;unsigned char code tab1=welcome on!;unsigned char code tab2=light:;unsigned char code tab3=mcd;sbit ST = P30;sbit EOC= P31;sbit OE = P32;sbit CLK= P33;sbit A1 = P35;sbit B1 = P36;sbit C1 = P37;sbit D1 = P34;sbit RS = P20;sbit RW = P21;sbit E = P22;sbit key= P24;/*步进步伐,根据所购买的步进

8、电动机28BYJ-48说明书,使用八相驱动*/#define r1 A1=1;B1=1;C1=1;D1=0; #define r2 A1=1;B1=1;C1=0;D1=0;#define r3 A1=1;B1=1;C1=0;D1=1;#define r4 A1=1;B1=0;C1=0;D1=1;#define r5 A1=1;B1=0;C1=1;D1=1;#define r6 A1=0;B1=0;C1=1;D1=1;#define r7 A1=0;B1=1;C1=1;D1=1;#define r8 A1=0;B1=1;C1=1;D1=0;/*产生定时信号,作为ADC芯片的时钟信号*/void

9、timer() TMOD=0x10; TH0=(65536-190)/256; TL0=(65536-190)%256; EA=1; ET0=1; TR0=1;/*延迟函数,单位为ms*/void delay(unsigned int t) int i,j; for(i=t;i0;i-) for(j=112;j0;j-);/*写指令*/writecom(unsigned char com) RS=0; RW=0; P0=com; E=0; delay(1); E=1; delay(1); E=0;/*写数据*/writedata(unsigned char date) RS=1; RW=0;

10、P0=date; E=0; delay(1); E=1; delay(1); E=0;/*写数字*/void writecount(unsigned int Data) switch(Data) case 0: writedata(0x30);break; case 1: writedata(0x31);break; case 2: writedata(0x32);break; case 3: writedata(0x33);break; case 4: writedata(0x34);break; case 5: writedata(0x35);break; case 6: writedat

11、a(0x36);break; case 7: writedata(0x37);break; case 8: writedata(0x38);break; case 9: writedata(0x39);break; /*步进电动机正、反转*/void bujin(unsigned int pd) if(pd) r1 delay(5); r2 delay(5); r3 delay(5); r4 delay(5); r5 delay(5); r6 delay(5); r7 delay(5); r8 delay(5); else r8 delay(5); r7 delay(5); r6 delay(

12、5); r5 delay(5); r4 delay(5); r3 delay(5); r2 delay(5); r1 delay(5); ;/*显示函数,这里只是控制显示的光强值,显示为4位10进制数,*/void disp(unsigned int a) unsigned int c; a*=4; /*将转换所得模拟信号(最大为255)转成10进制数,因为10K光敏电阻对应的光强约为1cd,即1000mcd,为方便显示,故将模拟信号乘以4,估算以作参考*/ writecom(0xc0+7); writecount(a/1000); writecom(0xc0+8); writecount(a

13、%1000/100); writecom(0xc0+9); writecount(a%100/10); writecom(0xc0+10); writecount(a%10); writecom(0xc0+11); for(c=0;c3;c+) writedata(tab3c);/*判断函数,为了防止光敏电阻随各种因素导致的光强而不稳定的变动,使得驱动的步进电动机不停的微微转动,将光强分为5个等级,不同等级驱动步进电动机转的时间不同*/pduan(unsigned int a) unsigned int x; if(a51) x=0; else if(a102) x=1; else if(a1

14、53) x=2; else if(a204) x=3; else x=4; return(x);/*主函数,前面包括LCD初始化,写入LCD第一行显示字符“welcome on!”和第二行显示字符“light:”、“mcd”*/main() unsigned int compare=0; unsigned int dji; unsigned int i,j,k; writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x80+1); for(i=0;i11;i+) writedata(tab1i); writecom(0xc0+1);

15、 for(j=0;jcompare) /*判断步进机为正转还是反转*/ for(k=25*(dji-compare);k0;k-) /*所需转的角度*/ bujin(0); compare=dji; else if(dji0;k-) bujin(1); compare=dji; else compare=dji; ; ;/*中断程序,产生时钟定时信号*/void t0(void) interrupt 1 using 0 TH0=(65536-190)/256; TL0=(65536-190)%256; CLK=CLK;四、所遇问题及解决方法: 仿真时LCD无任何字符显示,检查源程序的LCD初始

16、化是否正确,修改错误,重新载入源程序仿真。 显示的转换数据为错乱数据,网上查阅ADC0809芯片功能书发现改芯片的输出口与IO口的高低位相反,OUT0OUT7为高位到低位,恰与我们平时定义的相反。 步进电动机驱动之后震而不能转,自习对照电动机的管脚说明书,重新正确接入每一个引脚。五、实物图展示:图10 电路板侧面图图11 电路板正面图图12 背面焊接图六、心得体会:通过这一次的电路设计,掌握了LCD液晶显示、AD转换和步进电动机驱动的方法,对单片机运用技术又有了进一步的提高。单片机可以驱动电路和实现的功能多种多样,对单片机的灵活运用显然还欠缺许多知识,但经过这次的课程设计,相信对单片机的各方面可以慢慢学习渗透,将其融会贯通。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1