《单片机课程设计报告》水塔水位.docx
- 文档编号:24815971
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:29
- 大小:814.76KB
《单片机课程设计报告》水塔水位.docx
《《单片机课程设计报告》水塔水位.docx》由会员分享,可在线阅读,更多相关《《单片机课程设计报告》水塔水位.docx(29页珍藏版)》请在冰豆网上搜索。
《单片机课程设计报告》水塔水位
《单片机课程设计》报告
(2013-2014学年第一学期)
课程设计题目:
水塔水位控制
目录
一、课程设计性质和目的-1-
二、课程设计的内容及要求-1-
三、课程设计的进度及安排-3-
四、设计所需设备及材料-4-
五、设计思路及原理分析-7-
六、流程图及程序编写-9-
七、调试运行-14-
八、结果及分析-15-
九、心得体会-15-
十、参考文献-16-
十一、致谢-16-
十二、附录-17-
(一)数字时钟……………………………….……..-17-
(二)桥式整流器………………………………….-25-
一、课程设计性质和目的
单片机课程设计是《单片机原理与接口技术》课程与实验结束后的一门综合性实践课。
所选题目《水塔水位控制》紧密结合所学的主要内容,加深巩固所学知识,同时对所学内容进行扩展,有一定的深度和广度,能充分发挥学生的能动性和想象力。
通过电路设计、安装、调试等一系列环节的实施,提高学生的单片机应用系统的设计能力。
二、课程设计的内容及要求
(一)课程设计的内容
本次单片机课程设计所选题目为《水塔水位控制》,要求学生结合所学的单片机原理与接口技术、C语言程序设计和数字电子技术等课程知识,以51单片机为平台,设计一个水塔水位控制系统,实现水塔水位的自动控制。
本次单片机课程设计所设计的水塔水位控制,要求实现以下的功能:
1、当水塔水位低于警戒水位B点时,电机自动运转,为水塔供水;
2、当水塔水位高于警戒水位B点,低于警戒水位C点时,电机维持原状,继续运转为水塔供水;
3、当水塔水位高于警戒水位C点时,水塔内的水即将溢出,此时电机停转,停止为水塔供水;
4、随着水塔的水逐渐被消耗,水位重新回到高于警戒水位B点,低于警戒水位C点时,电机维持原状,保持静默状态;直至水位降低到警戒水位B点以下,电机才开始运转,为水塔供水;(可参考图2-1)
图2-1
(二)课程设计的要求
1、软件使用
(1)运用keil软件设计水塔水位控制及数字时钟的程序
(2)运用proteus软件绘制水塔水位控制及数字时钟的仿真原理图并实现其仿真;
(3)运用protel软件绘制桥式整流器的原理图并实现其仿真;
(4)运用protel软件绘制水塔水位控制的原理图;
2、焊接工艺的学习:
(1)熟悉、掌握焊接技巧及焊接过程应当注意的事项;
(2)通过焊接、拆卸废弃电路板元器件的练习熟悉焊接技艺;
(3)清点实验材料的元器件,并明确每个元器件的属性及对应集成电路的位置;
(4)根据所设计的原理图,依次焊接到电路板上;
3、实验要求:
(1)在焊接过程中务必注意使用安全,谨防被电烙铁烫伤或引起火灾;
(2)要求独立完成课程设计的所有内容;
(3)在焊接过程中要求认真、细心、谨慎操作;
(4)课程设计过程不得迟到、早退、旷课;
三、课程设计的进度及安排
详见表3-1课程任务分配进度表
表3-1课程任务分配进度表
时间/地点
设计进度
12月23日
(星期一)上午
MD504
了解本次单片机课程设计的目的、内容及设计要求等事项;
绘制数字时钟和水塔水位控制的proteus原理图并仿真;
开始数字时钟的单片机程序设计;
12月24日
(星期一)下午
JB112
领取本次课程设计所需的电子元件,并进行清点;
利用废旧面包板进行焊接练习;
查阅本次课程设计所用的电子元件的技术参数等资料;
根据设计大纲,在面包板上对水塔水位控制进行初步的电路设计;
12月25日
(星期三)下午
MD504
检查数字时钟和水塔水位控制的proteus原理图并仿真;
继续数字时钟的单片机程序设计;
12月26日
(星期四)上午
JB112
根据已领取的电子元件,进行水塔水位电路的设计、焊接;
完成部分电子元件技术参数的补充;
12月27日
(星期五)上午
MB404
完成数字时钟的单片机程序设计,并结合其proteus原理图进行仿真调试;
开始水塔水位控制的程序设计及仿真;
12月30日
(星期一)下午
MD504
完成水塔水位控制的程序设计,并结合proteus原理图进行仿真调试;
熟悉protel软件的操作,开始绘制桥式整流器的protel仿真原理图;
12月30日
(星期一)晚上
JB112
(调星期二课)
完成水塔水位电路的设计、焊接,利用单片机最小系统进行调试;
12月31日
(星期二)晚上
MD504
(调星期三课)
完成桥式整流器protel原理图的绘制,并实现仿真;
完成水塔水位控制protel原理图的绘制
1月2日
(星期四)下午
MD504
整理本次课程设计的所有内容;
编写课程设计报告
1月3日
(星期五)下午
JB112
进行课程设计答辩
四、设计所需设备及材料
1、设计所用设备:
电脑、电烙铁、单片机最小系统、吸锡器、螺丝刀、万用表、钳子、镊子、焊锡、锉刀、烙铁架、电池;
2、元件清单详见表4-1水塔水位控制元件清单
表4-1水塔水位控制元件清单
序号
元件
具体型号
数量
1
万能电路板
1块
2
继电器
松乐SRD-12VDC-SL-C
1个
3
LED灯
1只
4
稳压二极管
IN4007二极管
1只
PNP三极管
1只
5
光耦
EL4N25245
1个
6
电阻
100Ω
1只
7
电阻
300Ω
2只
8
电阻
4.7KΩ
2只
导线
若干
普通单排插针
间距2.54MM1*40P
1条
3、相关元件说明
(1)继电器
本次课程设计的继电器采用松乐SRD-12VDC-SL-C,其相关参数如下所示:
外形尺寸:
15.7*10.6*12.4
额定电压:
3-48VDC
线圈于触点间耐压:
1500VAC/1m
触点于触点间耐压:
1000VAC/1m
触点形式:
1a,1c触点定额负载:
1A120VAC3A250VAC
触点接触电阻:
≤50mΩ线圈功耗:
0.36W,0.45W
吸合电压:
≤75%释放电压:
≥5%
如图4-1所示,电磁继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。
只要在线圈A、B两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点C(常开触点)吸合。
当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置E,使动触点与原来的静触点(常闭触点)释放。
这样吸合、释放,从而达到了在电路中的导通、切断的目的。
对于继电器的“常开、常闭”触点,可以这样来区分:
继电器线圈未通电时处于断开状态的静触点C,称为“常开触点”;处于接通状态的静触点称为“常闭触点”D。
继电器有两股电路,AB为低压控制电路,CE为高压工作电路。
(2)光耦
本次课程设计的光耦型号为EL4N25。
电器以光为媒介传输电信号。
它对输入、输出电信号有良好的隔离作用。
耦合器一般由三部分组成(如图4-2所示):
光的发射、光的接收及信号放大。
电信号由1、2管脚输入,驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后,由4、5管脚输出。
这就完成了电—光—电的转换,从而起到输入、输出、隔离的作用。
由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。
图4-2光耦管脚图图4-3PNP三极管
(3)PNP三极管
如图4-3所示,在电路中,PNP三极管用作开关,当基极B低电平时,三极管导通,高电平通过,到达光耦。
当基极B高电平时,三极管截断,C点为低电平,电路被断开。
(4)稳压二极管
当把稳压管接入电路以后,若由于电源电压发生波动,或其它原因造成电路中各点电压变动时,负载两端的电压将基本保持不变。
五、设计思路及原理分析
水塔水位控制原理图如图2-1所示,图中两条虚线表示正常工作情况下水位升降的上下限警戒水位,在正常供水时,水位应控制在两条虚线代表的水位之间。
B点代表下限警戒水位,C点代表上限水位,A接+5V,B、C接地。
图2-1
水塔水位控制系统利用水的导电性,判断相应点电平的变化,依靠单片机控制电机的运转与否,实现水位的平衡。
当水塔水位在下限警戒水位以下或水塔内没有水的时候,B、C两点与A点断开,均为低电平,电机运转为水塔供水。
水位上升至B点,此时B点与A点导通,B点为高电平,电机继续运转为水塔供水;水位上升至上限警戒水位C点,此时B、C点与A点导通,均为高电平,电机停转,停止为水塔供水。
如图5-1,用80C51设计一个单片机最小控制系统。
其中P1.0接水位下限警戒水位传感器;P1.1接水位上限传感器;P1.2输出经Q0电流放大后接光电耦合器,接通继电器,带动电机控制水泵工作;P1.3输出接LED,当出现故障时LED亮;P1.4输出接蜂鸣器,当出现故障时报警。
图5-1水塔水位控制硬件图
两个水位信号由P1.0和P1.1输入,这两个信号共有四种组合状态。
如表5-1所示。
其中第三种组合(b=1、c=0)正常情况下是不能发生的,但在设计中还是应该考虑到,并作为一种故障状态。
表5-1水塔水位信号状态表
C(P1.1)
B(P1.0)
操作
0
0
电机运转
0
1
维持原状
1
0
故障报警
1
1
电机停转
六、流程图及程序编写
1、水塔水位控制程序流程图(如图6-1所示)
图6-1水塔水位控制程序流程图
2、水塔水位控制程序
#include
sbitP1_0=P1^0;//B点感应位
sbitP1_1=P1^1;//C点感应位
sbitP1_2=P1^2;//电机控制位,低电平电机运转
sbitP1_3=P1^3;//故障灯控制位
sbitP1_4=P1^4;//蜂鸣器控制位
unsignedchari;//状态变量
voiddelay1s();//延时1秒程序声明
voiddelay0_2s();//延时0.2秒程序声明
voidmain()
{
P1_0=0;//B点感应位
P1_1=0;//C点感应位
P1_2=1;//电机控制位,低电平电机运转
TMOD=0x22;
while
(1)//死循环
{
if(P1_0==0)//判断B点是否为低电平,若为低电平,则水位太低需供水或电路故障;
{
if(P1_1==0)//B点为低电平,此时判断C点是否为低电平,若为低电平,即水位太低,电机需运转供水;
{
P1_2=0;//电机运转
P1_3=P1_4=0;//保持故障电路静默;
delay1s();
}
else//此时B点为低电平,C点为高电平,电路故障;
{
P1_2=1;//关闭电机;
P1_3=P1_4=1;//执行故障电路,LED灯亮,蜂鸣器发声;
delay0_2s();
}
}
else//此时B点为高电平,
{
if(P1_1==1)//若C点为高电平,水位已满,电机需停转;
{
P1_2=1;//关闭电机;
P1_3=P1_4=0;//保持故障电路静默;
delay1s();
}
else//若C点为低电平,电机维持原状;
{
delay1s();//程序状态不变,仅延时1S
P1_3=P1_4=0;//保持故障电路静默;
}
}
}
}
voiddelay1s()//延时1秒子函数
{
unsignedinti;//延时采用定时器T1,工作方式2;
TMOD=0x22;
TH1=6;
TL1=6;
for(i=0;i<4000;i++)
{
TR1=1;
while(!
TF1)
TF1=0;
}
}
voiddelay0_2s()//延时0.2秒子函数
{
unsignedintj;//延时采用定时器T0,工作方式2;
TMOD=0x22;
TH0=6;
TL0=6;
for(j=0;j<800;j++)
{
TR0=1;
while(!
TF0)
TF0=0;
}
}
3、proteus仿真图(如图6-2、图6-3、图6-4所示)
图6-2水塔水位控制仿真图(未运行)
图6-3水塔水位控制仿真图(正常运行)
图6-4水塔水位控制仿真图(故障)
七、调试运行
(一)软件调试
1、根据设计要求,利用Keil软件,编写程序,并编译生成hex文件;在编写程序的过程,程序基本没有出现语法的错误。
2、根据原理图,从元件库中查找得到相应的元件,并绘制成proteus原理图;
3、将生成的hex文件导入到proteus原理图中的单片机,开始仿真,观察系统是否达到了预期的效果。
4、刚开始仿真时,系统并不能运行。
因此,对原理图进行排查,检查各个元件的接线是否合理,确定各个元件的属性是修改合适。
通过检查,发现原理图的一些元件用错了,有些电阻的电阻值太大了等等,均及时作了修改。
重新仿真后,系统还是不能运行。
于是开始检查程序,确定是否存在逻辑错误。
检查发现,程序确实存在逻辑上的错误,比如B、C点的高低电平输出设置错了,没有设置P1口的初始值等等。
通过反反复复的调试、检查、修改,结合程序和原理图,最终系统可以正常运行,实现预期的全部效果。
(二)硬件调试
1、在开始焊接电路之前,利用万用表逐一检查各个元件是否完好,能否正常使用;并确定各个元件的管脚应该如何连接和电路的布线;
2、根据设计好的原理图,利用已有的元件,焊接好电路;
在焊接的过程中,由于焊接技术不够娴熟,导致电路板上的多个金属贴片脱落,无法实现焊锡的附着,不得不用导线代替,同时也影响了电路的美观。
同时,由于疏忽,将二极管的管脚装反了,出现了错误,后来不得不修改电路的布线。
这些小错误时刻提醒我在焊接时必须全神贯注,认真确认每一步的焊接。
通过一个多小时的辛勤付出,我终于完成了电路的焊接。
3、将调试好的hex文件下载到单片机最小系统中,并将电路的相关管脚与单片机最小系统对应连接起来,通过B、C管脚电平的改变,判断电机是否按照设计的要求工作。
八、结果及分析
水塔水位控制系统调试结果如下:
将B、C管脚接至低电平,电机运转;
将B管脚接至高电平,C管脚接至低电平,电机继续运转;
将B、C管脚接至高电平,电机停止运转;
将B管脚接至低电平,C管脚接至高电平,电机停止运转,LED灯亮。
可以发现,水塔水位控制系统正常工作,实现了预期的效果。
(实物及焊接电路如图8-1、图8-2所示)
图8-1实物图图8-2焊接电路图
九、心得体会
在整个课程设计过程中,我自己能够克服重重困难,利用自身所需的专业知识独立完成程序设计、软件仿真和电路焊接等内容,这给予我一种强烈的成就感,感觉功夫没有白费,自己的动手能力是有了较大进步的。
通过此次单片机课程设计,我对单片机知识有了进一步的认识,提高了将所学的单片机知识应用实际设计中的能力,逻辑思维能力也到了较多的锻炼,丰富了设计经验,为今后的单片机应用铺下基础;另一方面,我更加熟悉了Keil软件、protel软件和proteus软件的使用,焊接元器件等动手能力也适当提高了,认识了一些常用元件。
,
通过此次课程设计,我也深刻认识到认真、细心对动手实践的重要性。
一个小小的疏忽都将导致研究的产品不能正常运行,每一个步骤,每一个焊点都应该做到完美无暇,这才是工科学生应有的素养。
在以后学习的道路上,我必将以严谨、认真、务实、勤奋的作风面对专业的学习。
十、参考文献
【1】李庆常.数字电子技术基础.北京:
机械工业出版社,2008.
【2】王静霞.单片机应用技术,电子工业出版社,2009.
【3】徐玮.C51单片机高效入门,机械工业出版社,2006
【4】张永枫主.单片机应用实训教程,清华大学出版社,2008.
【5】阎石.数字电子技术基础.北京:
高等教育出版社,2006.
【6】杨素行.模拟电子技术基础简明教程.北京:
高等教育出版社,2006.
十一、致谢
本次单片机课程设计就是在CJK老师的亲切关怀与悉心指导下完成的。
从程序设计到电路板的焊接、调试,CJK老师都始终给予我细心的指导和不懈的支持。
S个星期以来来,CJK老师给我以精心指导,在课程设计遇到困难的时候,给了我许多有益的指导和建议。
在此谨向CJK老师致以诚挚的谢意和崇高的敬意。
同时感谢同学们在课程设计过程中给予我的帮助。
十二、附录
(一)数字时钟
1、内容要求
(1)用7段8位的LED数码管设计出一个数字时钟,要求显示分(2位)、秒(2位)及十分之一秒即0.1秒(1位)。
按下启动按钮启动数字时钟,按下停止按钮暂停计时,当再次按下启动按钮时,从当前值继续计时,当按下复位按钮时,时钟复位。
(2).通过设定定时按键,对时钟的分钟进行设定,每按一次,分钟设定加1,开始时,LED灯D1处于熄灭状态,当启动计时后,计时到达设定时间,时钟复位,且LED灯D1处于一直亮的状态。
2、分析
数字时钟程序由多个函数组成,包括主函数、数码管显示函数、系统计时中断函数、按钮定时函数和延时子函数。
系统计时中断函数采用定时中断方式,当启动按钮按下时,系统开启中断,开始计时,通过数码管显示函数显示时间;当停止按钮按下时,系统关闭中断,暂停计时,数码管依旧保持当前时间;当复位按钮按下时,系统关闭中断,停止计时,时间清零。
按钮定时函数由外部中断1实现,为最高级中断。
当复位按钮按下时,执行外部中断,定时次数加一。
3、程序
#include
unsignedcodeled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//段码、共阳极字型码:
0-9
voidxianshi();//显示子函数的声明
voiddelay();//延时子函数的声明
unsignedcharm,n;//定义数码管显示分钟的变量m,延时函数中的变量n
unsignedchara,b,c;//定义变量的状态位:
分位a,、秒位b、十分之一秒位c
unsignedchard,k;//定义数码管扫描次数k,定时中断计数d,
unsignedcounter;//定义定时按钮按下的次数counter
sbitP3_0=P3^0;//定义启动按钮位
sbitP3_1=P3^1;//定义停止按钮位
sbitP3_2=P3^2;//定义复位按钮位
sbitP3_3=P3^3;//定义定时按钮位
/****************主函数****************/
voidmain()
{
TMOD=0x00;//设定定时器0在工作方式1下
TH1=3192/256;//设置定时器初值
TL1=3192%256;
ET1=1;//开放定时器T1中断允许位
IT1=1;//置外部中断位下降沿触发方式
EX1=1;//开放外部中断1中允许位
EA=1;//开放中断总允许位
P0=0x00;//LED灯初始化
a=b=c=0;
while
(1)
{
if(P3_0==0)//判断启动按钮是否按下
{
TR1=1;//若启动按钮按下,开启定时器T1,时钟开始计时
}
if(P3_1==0)//判断停止按钮是否按下
{
TR1=0;//若启动停止按下,关闭定时器T1,时钟停止计时
}
if(P3_2==0)//判断启动按钮是否按下
{
TR1=0;//若启动按钮按下,关闭定时器T1,时钟停止计时
counter=a=b=c=0;//将时钟内的所有变量清零
}
if(P3_3==0)//判断启动按钮是否按下
{
m=counter;//将计数的次数counter赋予显示分钟的变量m,使其显示定时的时间
a=0;
}
if(a!
=0&&counter!
=0)//判断定时器分钟的变量a与定时的时间counter是否相等
{
if(a==counter)//如果两者相等,即定时时间到,关闭定时器T1,LED灯亮
{
TR1=0;
P0=0x01;
}
}
if(counter==0)//判断定时按钮是否被按下
{
m=a;//若没被按下,数码管分钟则显示实际时间的分钟;
}
else
{
m=counter;//若按下,则显示定时的时间分钟
}
xianshi();//执行显示程序
P0=0x00;//使LED灯始终保持静默状态
}
}
/**********数码管显示函数**********/
voidxianshi()
{
for(k=0;k<10;k++)
{
P1=~0x01;//十分之一秒位
P2=~led[c];
delay();
P1=~0x02;//横杠
P2=0x40;
delay();
P1=~0x04;//秒位之个位
P2=~led[b%10];
delay();
P1=~0x08;//秒位之十位
P2=~led[b/10];
delay();
P1=~0x10;//横杠
P2=0x40;
delay();
P1=~0x20;//分位之个位
P2=~led[m%10];
delay();
P1=~0x40;//分位之十位
P2=~led[m/10];
delay();
}
}
/**********系统计时中断**********/
voidtime()interrupt3//用中断方式定时,采用定时中断1,工作方式0
{
d++;//定时器计数溢出,变量d加一,直至10
if(d==4)
{
d=0;//定时器溢出10次,计数时间到达0.1s,变量d清零,十分之一秒变量c加一
c++;
if(c==10)//十分之一变量c到达10,时间到达1s,变量c清零,秒钟变量b加一
{
c=0;
b++;
if(b==60)//秒钟变量b到达60,时间到达1分钟,变量b清零,分钟变量a加一
{
b=0;
a++;
if(a==60)//分钟变量b到达60,时间到达60分钟,变量a清零
{
a=0;
}
}
}
}
}
/********按钮定时函数********/
voiddingshi()interrupt2//采用外部中断1
{
EX1=0;//关闭外部中断1
counter++;//按键按下一次,计数次数加一
EX1=1;//开启外部中断
}
/*********延时子函数***********/
voiddelay()
{
unsignedcharn;
for(n=0;n<2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课程设计报告 单片机 课程设计 报告 水塔 水位