[毕业论文]基于单片机的照明控制系统(8)

2019-03-06 08:13

第五章 实验及总结

本文研究了基于AT89C51与AT89C2051单片机的智能照明控制系统的设计原理与实现方法,包括硬件设计与软件设计。首先根据设计要求用Protel DXP软件绘制出原理图,然后依据原理图选择元器件,在实验板上布置元器件并连接线路,对硬件电路进行测试,检查串行口是否选错,测量电源是否正常,复位电平是否正确,单片机是否起振等等。接着就要按照功能要求编制程序,这里采用Keil C编程工具,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。

在实验过程中,首先通过主控制器上的键盘输入地址号,地址号是由数字组成的,在输入完毕后,然后按下确认键,信号经过网络传输后,分控制器将收到的地址进行比较确认后,然后执行下一步的程序。经过实验的验证,在输入广播地址后,所有的分控制器都正确地执行了后续的命令,实现了灯泡的启停、亮度调节、定时关闭功能;在输入某个分机地址后,该分机也正常地执行了相应的命令,同样达到了所要求的功能。

由于系统采用的是RS485通信与无线数传通信方式,如果使用在现场环境中必然存在干扰的问题,所以抗干扰与可靠性设计就显得尤为重要。虽然系统已经考虑了可靠性设计问题,如看门狗技术、复位电路、光电耦合等在电路设计中的应用,但这也只是针对部分问题做了解决,一些详细的设计还有待于解决。该系统还只是试验室的调试系统,离真正的现场应用还有一定的距离。软件部分的编制也是力求简单实用,即本着实用、有效、方便的原则进行编制。但一个较好的和较完善的应用软件不是在短时间内就可以完成的,它需要不断的完善和发展,需要我们做大量的工作和时间的检验。现在的系统还没有达到真正的智能化,还需要增加很多新的功能和先进的科学技术,才能达到真正意义上的智能化控制。

致 谢

本文是在 教授的精心指导下完成的,在这几个月的工作和学习期间,我深深地感到从老师那里学到的不仅仅是知识和技术,更重要的是他严谨的治学态度,实事求是的工作作风和高风亮节的做人品质。在此,我向 老师致以最衷心的感谢!

参考文献

[1] 王幸之、钟爱琴等. AT89 系列单片机原理与接口技术. 北京:北京航空航天大学出版社. 2005

[2] 孙涵芳、徐爱卿. 单片机原理及应用. 北京:北京航空航天大学出版社. 1996 [3] 阳宪惠. 现场总线技术及其应用. 北京:清华大学出版社. 1999

[4] 求是科技. 8051 系列单片机 C 程序设计完全手册. 北京:人民邮电出版社. 2006 [5] 房小翠、王金凤. 单片机使用系统设计技术. 北京:国防工业出版社. 1999 [6] 李华. MCS-51系列单片机实用接口技术. 北京:北京航空航天大学出版社. 2003 [7] 吴金戎、沈庆阳等. 8051 单片机实践与应用. 北京:清华大学出版社. 2002

[8] 陈新忠. 基于 RS485 总线的单片机多机通信软件设计. 现代电子技术. 2002.(3) P8~10

[9] 樊宇、程全. 基于 RS485 总线实现的远距离多机主从式通信技术. 工业控制计算机. 2006. 19(7) P71~73

[10] SRWF-1型微功率无线数传模块使用说明书. 上海桑锐电子科技有限公司. 2004 [11] 孙雪梅、范久臣. 实时时钟芯片在单片机系统中的应用. 沈阳教育学院学报. 2005. 7(2) P132~134

附 录

Ⅰ. 串行通信程序

(1) 主机部分

#include #include

#define __MAX_LEN_ 64 // 数据最大长度

#define _MHZ_ 11 // 设置单片机使用的晶振频率(11.0592MHz)

/* 以下为程序协议中使用的握手信号 */ #define __SUCC_ 0x0f // 数据传送成功 #define __ERR_ 0xf0 // 数据传送错误

void init_serial(); // 串口初始化

void send_data(unsigned char *buf); // 发送数据

void delay10ms(unsigned int count); // 延时子程序(10ms)

void main() {

char buf[__MAX_LEN_]; unsigned char i = 0;

unsigned char tmp;

unsigned char addr; // 该字节用于保存要通信的从机地址 /* 为缓冲区赋初值 */

P0 = 0xff;

while(P1 != 0) // 每隔100ms从P0口读取,若读取到0则表明数据采集结束 {

*(buf+i) = P0;

delay10ms(10); // 延时100ms P0 = 0xff; i++;

}

*(buf+i) = 0; // 缓冲区最后一个字节为0表示数据结束 /* 读要访问的分机地址 */ P0 = 0xff;

addr = P0;

/* 串口初始化 */

init_serial(); // 初始化串口 EA = 0; // 关闭所有中断

/* 发送地址帧并接收应答信息,如果接收的信号与发送的地址信息不同,则重新发送地址帧 */

tmp = addr-1;

/* 发送数据并接收校验信息,如果接收的信号为0FH,表示从机接收成功,否则将重新发送该组数据 */

tmp = __ERR_; while(tmp != __SUCC_) {

send_data(buf); // 发送数据 RI = 0; while(!RI); tmp = SBUF; RI = 0;

}

while(1); // 程序结束,进入死循环

}

/* 初始化串口 */

void init_serial() { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 250; // 设置初值

TL1 = 250;

TR1 = 1; // 开始计时

PCON = 0x80; // SMOD = 1 SCON = 0xd0; //工作方式3,9位数据位,波特率9600bps,允许接收

}

/* 发送数据 */

void send_data(unsigned char *buf) { unsigned char len; // 保存数据长度 unsigned char ecc; // 保存校验字节

len = strlen(buf); // 计算要发送数据的长度 ecc = len; // 开始进行校验字节计算 /* 发送数据长度 */ TI = 0;

TB8 = 0; // 发送数据帧 SBUF = len; // 发送长度 while(!TI); TI = 0;

/* 发送数据 */ for(i=0; i

}

}

ecc = ecc^(*buf); // 计算校验字节 TB8 = 0; // 发送数据帧 SBUF = *buf; // 发送数据 buf++; while(!TI); TI = 0;

TB8 = 0; // 发送数据帧 SBUF = ecc; // 发送校验字节 while(!TI); TI = 0;

void delay10ms(unsigned int count) { }

for(i=0; i

tmp = (int)((100*_MHZ_)/12);

#endif

(2)从机部分

#include #include

#define __MAX_LEN_ 64 // 数据最大长度

#define _MHZ_ 11 // 设置单片机使用的晶振频率(11.0592MHz)

/* 以下为程序协议中使用的握手信号 */ #define __SUCC_ 0x0f // 数据传送成功 #define __ERR_ 0xf0 // 数据传送错误

void init_serial(); // 串口初始化

unsigned char recv_data(unsigned char *buf); // 接收数据 void main()


[毕业论文]基于单片机的照明控制系统(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:旅游保险项目可行性研究报告(目录) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: