基于51单片机带LED灯显示的水箱液位定点控制系统设计论文Word下载.docx
《基于51单片机带LED灯显示的水箱液位定点控制系统设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机带LED灯显示的水箱液位定点控制系统设计论文Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
附1实物照片12
附2源程序代码14
1概述
1.1课程设计的意义
本次课程设计是在我们学过单片机后的又一次实践,可增加我们的动手能力。
特别是对单片机的系统设计有很大帮助。
本课程设计由两个人共同完成,在锻炼了自己的同时也增强了自己的团队意识和团队合作精神。
1.2设计的任务
水箱液位定点控制系统设计
1)显示:
4个绿色LED竖排显示高、中、低、超低液位;
1个双色LED代表模拟水泵(红色亮开/绿色亮停);
1个黄色LED超低液位报警,要求闪亮(1秒亮,1秒暗)
2)可选操作:
A按键(按下启动)——低液位LED灭时,启动水泵开启并保持;
当高液位LED亮时,停止水泵运转。
B按键(按下启动)——超低液位LED灭时发出报警信号(黄色LED闪亮),同时启动水泵开启并保持;
3)模拟液位信号产生:
应用单片机内定时器编程设定输出模拟液位信号——
a.停泵后5秒,高位LED灭;
10秒后,中位LED灭;
15秒后,低位LED灭;
20秒后,超低LED灭。
b.开泵后5秒,超低LED亮;
10秒后低位LED亮;
15秒后中位LED亮;
20秒后高位LED亮。
4)控制驱动设定:
用高位信号驱动延时3秒停泵;
用低位(常规)或超低(报警)信号驱动延时3秒开泵。
2系统总体方案及硬件设计
2.1水箱液位定点控制系统方案论证
2.1.1方案
系统功能要求,决定控制系统采用AT89S51单片机,该电路采用LED显示水箱动态液位。
以AT89S51和其他一些外围元器件组成的具有LED显示水箱液位定点控制。
本文采用AT89S51作为核心元件,AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器,既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价AT89s51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。
2.2系统总体设计
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。
图2.2—1 总体设计方框图
图2.2—2系统仿真图
2.3系统模块
系统由单片机最小系统、LED显示电路、按键等组成。
2.3.1主控制器
单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
晶振采用12MHZ。
复位电路采用上电复位。
图2.3.1—1晶振电路
图2.3.1—2复位电路
2.3.2显示电路
显示电路采用4位共阳极LED数码管,P0作为段码输出并作为各色LED的显示。
图2.3.2LED显示电路
2.3.3按键
P3.2口和P3.3口。
作为两个按键的输入端口。
与P3.2连接的是A按键,A按键(按下启动):
低液位LED灭时,启动水泵开启并保持;
与P3.2连接的是B按键,B按键(按下启动):
超低液位LED灭时发出报警信号(黄色LED闪亮),同时启动水泵开启并保持;
图2.3.3按键与单片机的连接
2.3.4报警
本设计采用黄色LED闪烁报警。
若超低液位LED灭时发出报警信号。
图2.3.4报警电路
3实验仿真
进入protuse后,连接好电路,并将程序下载进去,并运行。
图4—1LED显示仿真
4总结与体会
通过这次对带LED灯显示的水箱液位定点控制系统的设计与制作,让我了解了设计电路的程序,也让我了解了关于水箱液位定点控制系统的原理与设计理念,要设计一个电路要先用仿真程序仿真尝试验证可行性之后才实际接线的。
但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。
而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。
所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
查考文献
【1】陈海宴.51单片机原理原理及应用——基于Keil与Proteus北京航天航空大学出版社
【2】马忠梅,张凯,等.单片机的C语言应用程序设计(第四版)北京航空航天大学出版社
【3】张俊谟.单片机中级教程——原理与应用(第二版)北京航空航天大学出版社
【4】张毅,张宝芳,曹丽等.自动检测技术及仪表控制系统(第二版)化学工业出版社
附1实物照片
图1实物全照
图2工作状态
图3电路板背面
附2源程序代码
#include<
regx51.h>
#defineucharunsignedchar
#defineOFF1//灯灭
#defineON0//灯亮
sbitHigh_level=P0^0;
//高液位
sbitMiddle_level=P0^1;
//中液位
sbitLow_level=P0^2;
//低液位
sbitUltra_Low_level=P0^3;
//超低液位
sbitRED=P0^5;
//水泵运行指示灯
sbitGREEN=P0^6;
//水泵停止指示灯
sbitAlert=P0^4;
//报警指示
uchartime=0;
ucharcount=0;
ucharsign;
//按键标志位
ucharflag=0;
//闪烁标志位
/*计时*/
voidTime_count()interrupt1using1
{
TH0=(65536-50000)/256;
//50ms
TL0=(65536-50000)%256;
time++;
if(time==20)//1s定时
{
time=0;
flag=1;
count++;
//每1s计时
}
}
voidStyle(void)//这个模拟环境
if(count<
23)
RED=ON;
//开启水泵
GREEN=OFF;
}
if(count>
=5&
&
count<
10)
{
Ultra_Low_level=ON;
//超低液位LED亮
if(count>
=10&
15)
Low_level=ON;
//低液位LED亮
=15&
20)
Middle_level=ON;
//中液位LED亮
=20&
High_level=ON;
//高位LED亮
=23)
GREEN=ON;
//水泵停止LED亮
RED=OFF;
=28&
33)
High_level=OFF;
//高液位LED灭
=33&
38)
Middle_level=OFF;
//中液位LED灭
=38&
43)
Low_level=OFF;
//低位LED灭
=43&
46)
Ultra_Low_level=OFF;
//超低液位LED灭
=46)
//水泵打开LED亮
count=0;
//一个循环
voidAlert_LED(void)//发出警报信号,黄色LED灯亮
if(flag==1)
Alert=!
Alert;
flag=0;
/*A按键信号控制*/
voidA_key()interrupt0using0
TR0=!
TR0;
sign='
A'
;
/*B按键信号控制*/
voidB_key()interrupt2using2
{
TR0=!
sign='
B'
/*初始化*/
voidInitial(void)
EA=1;
//总允许打开
ET0=1;
//定时器0源允许打开
EX0=1;
//外部中断0源允许打开
EX1=1;
//外部中断1源允许打开
IT0=1;
//打开外部中断0
IT1=1;
//打开外部中断1
TR0=0;
TMOD=0X01;
//设置定时器方式1
//50ms
High_level=OFF;
Middle_level=OFF;
Low_level=OFF;
Ultra_Low_level=OFF;
Alert=OFF;
//警报LED亮
RED=OFF;
//
GREEN=ON;
//水泵停止
/*主程序*/
voidmain()
Initial();
//初始化
while
(1)
if(sign=='
)
Style();
if(Ultra_Low_level)//超低液位LED灭
{
Alert_LED();
//发出警报信号,黄色LED灯亮
}
else
Alert=OFF;
}//***********************结束**************************//