水温控制器课程设计.docx

上传人:b****5 文档编号:28420137 上传时间:2023-07-13 格式:DOCX 页数:16 大小:82.35KB
下载 相关 举报
水温控制器课程设计.docx_第1页
第1页 / 共16页
水温控制器课程设计.docx_第2页
第2页 / 共16页
水温控制器课程设计.docx_第3页
第3页 / 共16页
水温控制器课程设计.docx_第4页
第4页 / 共16页
水温控制器课程设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

水温控制器课程设计.docx

《水温控制器课程设计.docx》由会员分享,可在线阅读,更多相关《水温控制器课程设计.docx(16页珍藏版)》请在冰豆网上搜索。

水温控制器课程设计.docx

水温控制器课程设计

 

单片机原理及应用课程设计

 

专业:

电气工程及其自动化

设计题目:

水温控制器设计

班级:

***

学生姓名:

**

学号:

**

指导教师:

888

分院院长:

888

教研室主任:

高纯斌

 

电气工程学院

 

第一章课程设计内容与要求分析

1.1系统单元电路组成

1.1.1AT89C51系列单片机介绍

1.AT89C51系列基本组成及特性

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4K字节的快速可擦写的只读程序存储器(PEROM)和128 字节 的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51产品指令系统,片内有通用8位中央处理器(CPU)和闪存单元,功能强大AT89C51单片机具有很高性价比和应用性,可灵活应用于各种控制领域。

AT89C51基本功能描述如下:

AT89C51提供以下标准功能:

4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/记数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/记数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作直到下一个硬件复位。

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。

2.AT89C51系列引脚功能

AT89C51有40引脚双列直插(DIP)形式。

其与80C51引脚结构基本相同,其逻辑引脚图如图。

图1-1AT89C51逻辑引脚图

各引脚功能叙述如下:

1.电源和晶振

VCC——运行和程序校验时加+5V

GND——接地

XTAL1——输入到振荡器的反向放大器

XTAL2——反向放大器的输出,输入到内部时钟发生器

(当使用外部振荡器时,XTAL1接地,XTAL2接收振荡器信号)

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

2.I/O(4个口,32根)

P0口——8位、漏极开路的双向I/O口。

P1口——8位、准双向I/O口。

P2口——8位、准双向I/O口。

P3口——8位、准双向I/O口,具有内部上拉电路。

3.串行口

P3.0——RXD(串行输入口),输入。

P3.1——TXD(串行输出口),输出。

4.中断

P3.2——INT0外部中断0,输入。

P3.3——INT1外部中断1,输入。

5.定时器/计数器

P3.4——T0定时器/计数器0的外部输入,输入。

P3.5——T1定时器/计数器1的外部输入,输入。

6.数据存储器选通

P3.6——WR低电平有效,输出,片外存储器写选通。

P3.7——RD低电平有效,输出,片外存储器读选通。

7.控制线(共4根)

输入:

RST——复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

EA/Vpp——片外程序存储器访问允许信号,低电平有效。

在编程时,其上施加21V的编程电压。

输入、输出:

ALE/PROG——地址锁存允许信号,输出。

输出:

PSEN——片外程序存储器选通信号,低电平有效。

1.1.2I/O口分配

P1.0做A/D输入采集用

P2.0---P2.4做四个按键用

P2.5---P2.7做四个指示灯用

P1.3做继电器控制用

1.2继电器功能简介

继电器是一种电控制器件。

它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。

通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。

故在电路中起着自动调节、安全保护、转换电路等作用。

继电器具有动作快、工作稳定、使用寿命长、体积小等优点。

广泛应用于电力保护、自动化、运动、遥控、测量和通信等装置中。

1.3数码管功能简介

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;

按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。

常用的数码管如图2.3.1所示。

 

第二章控制系统程序设计

2.1硬件电路下载

#include

#defineucharunsignedchar

#defineuintunsignedint

sfrP1M0=0x91;

sfrP1M1=0x92;

sfrA_CONTR=0xBC;

sfrA_RES=0xBD;

sfrA_RESL=0xBE;

sfrA_P1ASF=0x9D;

sbitEADC=0xAD;

ucharnum[4];

ucharcodeS[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71};

sbitKeyFunction=P2^0;//定义功能键

sbitKeyMove=P2^1;//定义最大最小选择键

sbitKeyAdd=P2^2;//定义加数键

sbitKeyjian=P2^3;//定义减数键

sbitkey=P1^3;//定义继电器控制

sbitled1=P2^4;//加热:

亮不加热:

sbitled2=P2^5;//设置上限:

sbitled3=P2^6;//设置下限:

sbitled4=P2^7;//温度显示:

//外侧

//继电器:

4脚继电器7脚AD脚

//===================================================================uinttemp;

intAd;

uintset,Flag,min,max;

ucharAddFlag,SetTem1,SetTem2,SetTem3,SetTem4;

bitA_end;

bitFunctionFlag=0;

bitMoveFlag=0;

//==================================================================

延时函数

============================

voidDelayMs(intt)

{

uchari;

while(t--)

for(i=0;i<113;i++);

}

//===================================================================

分离函数

============================

voidSe(uintSa)

{

num[3]=Sa/1000;

num[2]=(Sa%1000)/100;

num[1]=((Sa%1000)%100)/10;

num[0]=Sa%10;

}

//===================================================================

显示函数

============================

voidDisp(uinttemper)

{

uchari;

Se(temper);

for(i=0;i<4;i++)

{

if(i==2)

{

SBUF=((S[num[i]])&0xfe);//加小数点

}

else

{

SBUF=S[num[i]];//将数据写入发送缓冲器SBUF//

}

while(!

TI);//等待发送完毕//

TI=0;//中断标志位清零//

}

}

//===================================================================

系统初始化函数

============================

voidIN()

{

SCON=0x10;

P1M0=0x01;

P1M1=0x01;

A_P1ASF=0x01;

A_CONTR=0x80;

EADC=1;

EA=1;

}

//===================================================================

A/D中断转换函数

============================

voidADC()interrupt5

{

A_CONTR&=0xe7;

temp=A_RES;

A_end=1;

}

//===================================================================

A/D平均函数

============================

floatAdAv(void)

{

floatValAv;

ucharnum;

ValAv=0;

for(num=100;num>0;num--)

{

ValAv+=temp;

}

ValAv/=100.00;

ValAv=25.00+(134.00-ValAv)/1.67;

return(ValAv);

}

//===============================================================================================

//k1键设置模式:

按一下进入设置模式按两下退出

//k2键设置最大最下:

按一下设置最大按两下设置最小

//k3键:

加1键

//k4键:

减1键

//===================================================================

按键扫描函数

============================

voidKeyScan()

{

if(KeyFunction==0)//功能键设定//

{

DelayMs(10);

if(KeyFunction==0)

{

while(KeyFunction==0);

FunctionFlag=~FunctionFlag;

}

}

if(KeyMove==0)

{

DelayMs(10);

if(KeyMove==0)

{

while(KeyMove==0);

MoveFlag=~MoveFlag;

}

}

if(KeyAdd==0)//加数键设定//

{

DelayMs(10);

if(KeyAdd==0)

{

while(KeyAdd==0);

Flag++;

if(Flag>99)

{Flag=99;}

}

}

if(Keyjian==0)//减数键设定//

{

DelayMs(10);

if(Keyjian==0)

{

while(Keyjian==0);

Flag--;

if(Flag<1)

{Flag=0;}

}

}

}

//===================================================================

按键处理函数

============================

voidKeyDeal()

{

if(FunctionFlag==1)//进入设置模式

{

if(MoveFlag==0)//设置上线

{

max=Flag*100;

if(max

{max=min+100;}

Disp(max+1);

led2=0;

led3=1;

led4=1;

}

else//设置下限

{

min=Flag*100;

if(min>max)

{min=0;}

Disp(min+2);

led2=1;

led3=0;

led4=1;

}

}

}

//===================================================================

继电器函数

============================

voidRelay1()//不加热

{

key=1;

led1=1;

}

//===============================================================================================

voidRelay2()//加热

{

key=0;

led1=0;

}

//===================================================================

主函数

============================

voidmain()

{

IN();

while

(1)

{

KeyScan();

//========================================

while(FunctionFlag)//设置循环

{

KeyScan();

KeyDeal();

DelayMs(200);

}

//========================================

led2=1;

led3=1;

led4=0;

A_CONTR|=0x08;

while(!

A_end);

A_end=0;

Ad=(int)(AdAv()*100);

Disp(Ad);

DelayMs(8000);

if(Ad>=max)

{

Relay1();

}

if(Ad<=min)

{

Relay2();

}

}

}

 

2.2硬件电路调试

下载完程序之后,可以参照4个功能键进行调试。

K1—功能键,每按下一次,在前2位LED上显示要设定的功能。

K2—转换键,每按一次在上下限之间转换。

K3—加1键

K4—减1键

单片机原理及应用课程设计总结

在本学期的期末,我们电自动化专业在新实验楼323进行了为期两周的单片机原理及应用的课程设计。

老师给出四个题目,我和小组成员佟学伟,马有生选择了温度控制系统设计。

课程设计是能培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼 实践能力的重要环节,是对学生实际工作力的具体训练和考察过程.随着科学技术发展 的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

回顾起此次单片机课程设计,我仍感慨颇多。

的确,从接题到定稿,从理论到实践,在一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅 可以巩固了以前所学过知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而 提高自己的实际动手能力和独立思考的能力。

 在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固比如说对于C语言的一些语句不是很了解,对单片机的知识也不是很透彻……通过这次课程设计之后,一定把以前所学过的知识重新温故。

 

总之,我们学到了在课堂上学不到的东西,学会了团队合作,学到了更多关于单片机和单片机实践的知识。

我们很感激。

 

8888888

2013.6.13

参考文献

[1]李广弟,朱月秀,王秀山编著.单片机基础.北京:

北京航空航天大学出版社,2001

[2]何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:

北京航空航天大学出版社,1999

[3]蔡美琴等编著.MCS-51单片机系统及应用.北京:

高等教育出版社.1992

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1