航标灯控制2.docx
- 文档编号:28507726
- 上传时间:2023-07-18
- 格式:DOCX
- 页数:26
- 大小:161.06KB
航标灯控制2.docx
《航标灯控制2.docx》由会员分享,可在线阅读,更多相关《航标灯控制2.docx(26页珍藏版)》请在冰豆网上搜索。
航标灯控制2
等级:
湖南工程学院
课程设计
课程名称单片机原理和使用
课题名称航标灯控制
专业电气工程及其自动化
班级
学号
姓名
指导教师
2014年月日
湖南工程学院
课程设计任务书
课程名称单片机原理和使用
课题航标灯控制
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期2014年月日
任务完成日期2014年月日
设计内容和设计要求
设计内容:
利用单片机为核心设计一个航标灯控制系统,要求为在黑夜中航行的船只提供灯光指示。
设计要求:
1)确定系统设计方案;
2)进行系统的硬件设计;
3)完成必要的参数计算和元器件选择;
4)完成使用程序设计;
*5)进行部分单元电路及使用程序的调试;
主要设计条件
本系统要求:
1)航标灯在黑夜能定时闪闪发光,亮2s,熄灭2s周期循环。
2)白天应停止航标灯工作。
3)枯水季节应检测水位高度,低于通航水位时要发出警告信号。
说明书格式
1.课程设计任务书
2.目录
3.系统总体方案选择和说明
4.系统结构框图和工作原理
5.各单元硬件设计说明及计算方法
6.软件设计和说明(包括流程图)
7.调试结果和必要的调试说明
8.使用说明
9.总结
10、参考文献
附录
附录A系统原理图
附录B程序清单
进度安排
设计时间为两周
第一周
星期一、上午:
布置课题任务,讲课及课题介绍
下午:
借阅有关资料,总体方案讨论
星期二、确定总体设计方案
星期三、硬件模块方案设计
星期四、软件模块方案设计
星期五、各硬件模块设计
第二周
星期一、各硬件模块设计
星期二、各软件模块设计
星期三、各软件模块设计
星期四、写说明书
星期五、上午:
写说明书,整理资料
下午:
交设计资料,答辩
参考文献
参考文献
1、教材《单片微型计算机技术》刘国荣编机械工业出版社
2、《单片微型计算机原理、使用及接口技术》张迎新编国防工业出版社
3、单片机实用系统设计技术》房小翠编国防工业出版社
4、《单片机使用系统设计》何立民编北航出版社
5、《单片机原理及接口技术曹琳琳编国防科技大学出版社
第一章绪论
1.1航标灯的现状和发展
航标是保证船舶安全的必要装置,很早以前人们就已经在近海岸设立航标,以便航船识别目标和为船只导航。
目前使用的航标种类包括陆上航标、水上航标和无线电航标3种,其中水上航标包括灯标和浮标。
一般航标灯都有发光装置、音响装置有些航标灯还具有无线电装置。
装有灯器的航标即为灯塔、灯船,统称为灯标。
灯标在夜间所显示的特定光色、灯光节奏和周期作为标志的识别特征,以便航海人员区别。
目前我国灯标使用的光色有白、红、绿、黄及橙色五种,灯光节奏有十余种。
航标的音响装置是为了船只和航海人员在五中能判别航标所在的方向,这些音响装置通过发出的声响来引导船舶航行。
在我国长达数千公里的河道和海岸沿线,分布着数量众多的航标灯。
为了能及时地了解各航标灯的工作状态和工作正常和否,以便有针对性地对出现故障的航标灯进行维护,我们需要一种新的航标灯能够对其进行遥控遥测的航标灯。
新型遥控遥测航标灯具有先进的设计技术,采用新型遥控遥测航标灯能够极大的提高航道维护的精确性,给船只提供了更安全更可靠的指引,同时节省了大量的维护费用。
第二章航标灯控制电路设计
2.1系统总体方案选择
本系统要求区分白天和黑夜、检测水位信息、控制航标灯闪烁和蜂鸣器的鸣叫,同时需要显示并发送水位信息;综合要求,选择51单片机作为控制器,用光敏电阻检测白天和黑夜,因为只有一路水位信息,所以选择ADC0804作为模数转换器,并用LED作为航标灯指示器,LCD1602作为水位显示器件。
2.2设计方案框图
图2-1设计方案框图
第三章系统总体设计方案描述
3.1系统结构框图
图3-1系统结构框图
3.2系统的工作原理
本系统通过51单片机作为控制核心,并选择12MHz晶体,以达到控制航标灯的闪烁,蜂鸣器的报警指示;同时显示并往控制总台发送水位信息;在本系统中通过ADC0804将模拟变化的水位信号转换成单片机可以识别的数字信号,同时通过LCD1602液晶显示器显示实时水位信息并将水位信息通过串口传送到控制台;系统中通过光敏电阻检测白天和黑夜,当水位正常时,如果是晚上,通过单片机的控制蜂鸣器发声,航标灯定时闪烁(亮2s,熄灭2s);如果是白天,则航标灯关闭,蜂鸣器继续工作。
当水位超过警戒水位(水位过低,不适合航行)时,如果是晚上,则通过单片机控制蜂鸣器的加速鸣叫,并且航标灯闪烁加快;如果是白天则航标灯关闭,蜂鸣器继续工作。
第四章单元电路的设计和计算
4.1单片机晶振电路和复位电路的连接
图4-1单片机晶振电路和复位电路的连接
图4-1中晶振选用12MHz晶振,电容选择22pF。
图4-1中电阻选用1K电阻,可以实现上电复位和手动复位
4.2LM016L显示电路
图4-2LM016L显示电路
通过LM016L显示水位信息,并将LCD连接到P0和P1端口
4.3蜂鸣器电路和航标灯显示电路
图4-3蜂鸣器电路和航标灯显示电路
图4-3中通过PNP管的驱动蜂鸣器发声,用LED当作航标灯,并接在P1.7口.
4.4ADC转换电路
图4-4ADC转换电路
图4-4中电路为ADC0804接法,空出的第5号脚为转换结束信号引脚;此次设计并没有用到该引脚;当然也可以接到单片机引脚,通过该引脚检测转换是否结束。
4.5光敏电阻的选择
本系统中光敏电阻利用单刀双掷开关代替。
图4-5光敏电阻的选择
第五章调试
在设定水位的情况下(临界值120)
5.1白天
5.1.1高水位时
蜂鸣器不会鸣叫,灯不亮
图5-1-1白天高水位
5.1.2低水位时
蜂鸣器鸣叫,频率较快,灯不亮
5-1-2白天低水位
5.2黑夜
5.2.1高水位
灯每隔两秒亮一次,蜂鸣器不发声。
图5-2-1黑夜高水位
5.2.1低水位
蜂鸣器发出较快频率的声音,灯迅速闪烁。
综上所述:
首先给系统设定一个初值,我所设定的临界值是120。
当系统检测到水位变化时,通过LM016L显示水位,并用一个一个“!
”表示水位过低,并发出警告信号(白天蜂鸣器以较快频率鸣叫,而晚上蜂鸣器不仅以快速的频率鸣叫,LED的闪烁频率也会加快),当水位正常时,发出提醒信号(白天蜂鸣器不鸣叫,晚上LED闪烁频率和蜂鸣器鸣叫频率都正常);当水位变化时,通过串口将水位发送到控制总台,反应实时水位信息。
总结
光阴似箭,日月如梭,两周的课程设计即将结束,在这两个星期的课程设计中让我感受良多,受益匪浅,同时也找到了自身不足之处。
第一天老师下发了任务,那天过后我们就开始收索相关资料,因为是初学者,所以对于我们来说都是很难的,可以说根本无从下手,可能一条语句想弄懂都需要半天时间,但是我们并没有放弃,因为这是我们的任务。
我们小组七人分工合作、在大家一起的努力之下最终完成了我们的课程设计。
在课程设计的过程中,我们经历了各种酸甜苦辣。
老师下发的任务表面上看起来不难,主要实现三个功能,但是如何才能实现呢?
最担心的还是程序了,因为对这方面的知识掌握的不牢固,而且这种仿真软件我也不太会用。
这时候小组的力量就体现出来了,同学之间互相帮助,有什么不懂的大家在一起商量,而且我们还能够充分利用网络的去查阅相关资料,再者还可以询问老师。
在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,也树立了对知识使用的信心。
同时让我懂得团队合作在集体工作中的重要性,只有相互合作,互帮互助才能成功!
通过课内所学的知识我们可以把它用在我们的实践上,我们借助了网络来学习一些课内没有学到的东西,在把这些知识使用到课程设计中去,这样才能更好的学习该们课程。
实习不仅让我学到了知识同时它也段练了我个人的动手能力:
不仅让我能够充分利用图书馆去查阅资料,同时也让我增加了许多课本以外的知识。
对我们当代大学生来说,只有理论和实际相结合才能让我们以后在更好的学习和工作。
总之,课程设计虽然结束了,但是从此次课程设计中我学到了很多,感触也很深。
我感受到了肖锋老师对学生的那种悔人不卷的精神和那种治学严谨的态度,有问必答,这让我们少走了很多弯路,最终顺利完成设计任务。
也许只有当学生的时候才能享受到这种待遇吧,所以我们一定好好利用校园的资源,这样才能让我们在进入社会之后有足够的资本和他人竞争。
参考文献
1、教材《单片微型计算机技术》刘国荣编机械工业出版社
2、《单片微型计算机原理、使用及接口技术》张迎新编国防工业出版社
3、单片机实用系统设计技术》房小翠编国防工业出版社
4、《单片机使用系统设计》何立民编北航出版社
5、《单片机原理及接口技术曹琳琳编国防科技大学出版社
附录
附录A系统原理图
附录B程序清单
1.主程序:
#include
#include"def.h"
#include"lib.h"
#include"adc_dis.h"
#include"lcd1602.h"
sbitLED=P1^7;
sbitBUZ=P1^6;
sbitstatus=P3^2;
INT16Unum=0,flag=0,num1=0,num2=0;
INT8Ustage,deep=0;
voiddelay(INT16Uz)
{
INT16Ux,y;
for(x=0;x for(y=0;y<110;y++); } /**定时器初始化函数**/ voidtimer_init() { TMOD=0X21;//设定定时器1工作在方式2,定时器0工作在方式1 SCON=0X40;//串口方式1 PCON=0;//SMOD位为0 TL1=0XFD;//9600Hz TH1=0XFD; TH0=0X3c; TL0=0Xb0;//设定定时器0初值为15536 TR1=1;//启动定时器1; IE=0X82;//打开总中断和定时器0溢出中断 } /*********串口发送程序*************/ voidusart_send(INT8Udate)//串口发送数据 { SBUF=date; while(! TI);//判断数据是否发送完成 TI=0; } /*********串口发送字符串程序*************/ voidusart_print(INT8U*temp)//发送字符 { while((*temp)! ='\0') usart_send(*temp++); } /**定时器中断处理函数**/ voidtimer0()interrupt1 { TH0=0X3c; TL0=0Xb0;//设定定时器0初值为15536 num++;//控制LED num1++;//控制蜂鸣器 num2++;//控制水位数据的发送 } voidled_buz(INT8Utemp) { INT16Ui,j; if(stage==1) { TR0=1; stage=0; } if(temp<120)//警戒水位 { if(status==1)//白天 { LED=1; flag=1; } else { if(num>=10) { LED=~LED; num=0; } } if(num1>=10) { num1=0; for(i=0;i<70;i++) { for(j=0;j<100;j++); BUZ=~BUZ; } } } if(temp>120)//正常水位 { if(status==1)//白天 { LED=1; flag=1; } else//晚上 { if(num>=40) { LED=~LED; num=0; } } } } /**水位显示函数**/ voiddisplay(INT8Utemp) { INT8Ubai,shi,ge; bai=temp/100; shi=temp/10%10; ge=temp%10; write_com(0x80+2);//显示位置命令 delay (1); lcd_prints("waterlevel"); write_com(0x80+0x40+6); delay (1); write_date(bai+0x30); write_date(shi+0x30); write_date(ge+0x30); if(temp<120)//警戒水位 { write_date(0x21);//超过警戒水位,在后面显示'! ' } else { write_date(0x20); } } /**主函数**/ voidmain() { lcd_init(); timer_init(); LED=1; while (1) { stage=1;//确保定时时间更加准确 deep=start_ad(); if(num2>=60)//每3s发送一次水位数据 { num2=0; usart_send(deep/100+0x30); usart_send(deep/10%10+0x30); usart_send(deep%10+0x30); usart_send('m'); if(deep<120) usart_send('! '); usart_print("\r");//发送回车符号,即换行 } display(deep);//LCD1602显示 led_buz(deep);//蜂鸣器和LED控制函数 } } 2.液晶显示函数LCD1602.C #include #include"lib.h" #include"def.h" #include sbitlcd_rs=P1^3; sbitlcd_rw=P1^4; sbitlcd_en=P1^5; /**1602写命令函数**/ voidwrite_com(INT8Ucom) { lcd_rs=0; P0=com; delay (1); lcd_en=1; delay (1); lcd_en=0; } /**1602写数据函数**/ voidwrite_date(INT8Udate) { lcd_rs=1; P0=date; delay (1); lcd_en=1; delay (1); lcd_en=0; } /**1602写初始化函数**/ voidlcd_init() { lcd_rw=0; //lcd_rs=1; //lcd_en=0; write_com(0x38);//设置显示方式为16*2显示 write_com(0x0c);//显示开,关光标 write_com(0x06);//移动光标 write_com(0x01);//清屏指令 } /**1602显示字符串函数**/ voidlcd_prints(INT8U*lcd_string) { INT8Ui=0; while(lcd_string[i]! ='\0') { write_date(lcd_string[i]); i++; } } 3.LCD1602.H头文件 #ifndef__LCD1602_H_ #define__LCD1602_H_ #include"def.h" voidwrite_com(INT8Ucom); voidwrite_date(INT8Udate); voidlcd_init(); voidlcd_prints(INT8U*lcd_string); #endif 4.AD转换函数ADC_DIS.C #include #include"def.h" #include"lib.h" sbitadc_cs=P1^0; sbitadc_rd=P1^1; sbitadc_wr=P1^2; /***ADC0804启动转换函数***/ INT8Ustart_ad() { INT8Utemp; adc_cs=0; adc_wr=1; delay (1); adc_wr=0; delay (1); adc_wr=1; delay (1);//启动AD adc_rd=1; delay (1); adc_rd=0; delay (1); temp=P2; delay (1); adc_rd=1; delay (1);//读取数据 returntemp; } 5.AD转换函数ADC_DIS.H头文件 #ifndef__ADC_DIS_H_ #define__ADC_DIS_H_ INT8Ustart_ad(); #endif 延时函数 #include #include"def.h" voiddelay(INT16Uz) { INT16Ux,y; for(x=0;x for(y=0;y<110;y++); } 6.LIB.H头文件 #ifndef__LIB_H_ #define__LIB_H_ #include"def.h" voiddelay(INT16Uz); #endif 7.DEF.H头文件 #ifndef__DEF_H_ #define__DEF_H_ typedefunsignedintINT16U; typedefunsignedcharINT8U; #endif 电气信息学院课程设计评分表 项目 评价 优 良 中 及格 差 设计方案合理性和创造性(10%) 开发板焊接及其调试完成情况*(10%) 硬件设计或软件编程完成情况(20%) 硬件测试或软件调试结果*(10%) 设计说明书质量(20%) 答辩情况(10%) 完成任务情况(10%) 独立工作能力(10%) 出勤情况(10%) 综合评分 指导教师签名: ________________ 日期: ________________ 注: 表中标*号项目是硬件制作或软件编程类课题必填内容; 此表装订在课程设计说明书的最后一页。 课程设计说明书装订顺序: 封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航标灯 控制