课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc

上传人:土8路 文档编号:10224683 上传时间:2021-04-30 格式:DOC 页数:20 大小:1.94MB
返回 下载 相关 举报
课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc_第1页
第1页 / 共20页
课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc_第2页
第2页 / 共20页
课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc_第3页
第3页 / 共20页
课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc_第4页
第4页 / 共20页
课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于单片机的光感自动控制百叶窗系统.doc(20页珍藏版)》请在三一文库上搜索。

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字形; 显示开/关控制(DISP

3、LAY 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的时钟信号EOC转换结束信号。E

4、OC=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、 步进电动机驱动如果直接用单片机驱动步进电动机,因为单片机的输出电流太低,功率不够,无法驱动步进电动机,故接入达林顿管UL

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

7、d 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;/*步进步伐,根据所购买的步进电动机28BYJ-48说

8、明书,使用八相驱动*/#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 timer()TMOD=

9、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;P0=date;E=0;delay(1);E=1;delay(1

10、);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: writedata(0x36);break;case 7: writedata(0x37);break;c

11、ase 8: writedata(0x38);break;case 9: writedata(0x39);break;/*步进电动机正、反转*/void bujin(unsigned int pd)if(pd) r1delay(5);r2delay(5);r3delay(5);r4delay(5);r5delay(5);r6delay(5);r7delay(5);r8delay(5);elser8delay(5);r7delay(5);r6delay(5);r5delay(5);r4delay(5);r3delay(5);r2delay(5);r1delay(5);/*显示函数,这里只是控制显

12、示的光强值,显示为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%1000/100);writecom(0xc0+9);writecount(a%100/10);writecom(0xc0+10);writecount(a%10);write

13、com(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(a153) x=2;else if(a204) x=3;else x=4;return(x);/*主函数,前面包括LCD初始化,写入LCD第一行显示字符“welcome on!”和第二行显示字符“ligh

14、t:”、“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);for(j=0;jcompare) /*判断步进机为正转还是反转*/for(k=25*(dji-compare);k0;k-) /*所需转的角度*/bujin(0);compare=dji;else if(dji0;k-)bu

15、jin(1);compare=dji;else compare=dji;/*中断程序,产生时钟定时信号*/void t0(void) interrupt 1 using 0TH0=(65536-190)/256;TL0=(65536-190)%256;CLK=CLK;四、所遇问题及解决方法:仿真时LCD无任何字符显示,检查源程序的LCD初始化是否正确,修改错误,重新载入源程序仿真。显示的转换数据为错乱数据,网上查阅ADC0809芯片功能书发现改芯片的输出口与IO口的高低位相反,OUT0OUT7为高位到低位,恰与我们平时定义的相反。步进电动机驱动之后震而不能转,自习对照电动机的管脚说明书,重新正确接入每一个引脚。五、实物图展示:图10 电路板侧面图图11 电路板正面图图12 背面焊接图六、心得体会:通过这一次的电路设计,掌握了LCD液晶显示、AD转换和步进电动机驱动的方法,对单片机运用技术又有了进一步的提高。单片机可以驱动电路和实现的功能多种多样,对单片机的灵活运用显然还欠缺许多知识,但经过这次的课程设计,相信对单片机的各方面可以慢慢学习渗透,将其融会贯通。

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1