毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx

上传人:b****6 文档编号:18800255 上传时间:2023-01-01 格式:DOCX 页数:22 大小:347.03KB
下载 相关 举报
毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx_第1页
第1页 / 共22页
毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx_第2页
第2页 / 共22页
毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx_第3页
第3页 / 共22页
毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx_第4页
第4页 / 共22页
毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx

《毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

毕业设计基于51单片机的四路定时控制器设计报告Word文档格式.docx

单片计算机即单片微型计算机。

(single-chipmicrocomputer),是集cpu,ram,rom,定时,计数和多种接接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。

而c语言已成为当前举世公认的高效简洁又贴近硬件的编程语言之一。

c语言现已成为专业化的单片机上的实用高级语言。

而且由于开发速度、软件质量结构化、可维护性方面的原因,使c语言渐渐有取代汇编的趋势。

这次我们做四路定时控制器作为微机原理与单片机的课程设计。

四路定时控制器主要应用于定时控制四个回路的电源通断。

四路定时器的设计背景是单片机的电子技术特征以及应用。

本系统采用的是STC10F08XE为中心器件来设计四路定时器的。

系统使用性强,操作简单,扩展性强。

设计主要包括硬件的设计和软件的设计。

一个完整的四路定时器相当于一个简单的单片机系统,该系统由四路定时器设置电路,单片机,显示电路等构成。

单片机是集成IC芯片,只需要根据实际设计要求选型。

其他部分都需要根据应用要求和性能指标自行设计。

设计时,首先设置时间和线路,然后开始计时,在达到设定时间的时候指示灯闪烁。

该四路定时控制器实现的功能是以当前时间为基准,以24小时为周期,可以任意设定哪个回路于某时刻开,到某时刻关。

如可以设置第一个回路在8:

30-11:

30开,14:

30-18:

00开,其他时间段为关。

能够通过按键任意设置某回路某时间段的开关状态,可以利用数码管直接显示。

整个系统通过软硬件的协调工作,具有读取方便、显示直观、功能多样、电路简洁、成本低廉、操作安全等诸多优点,具有广阔的市场前景,尤其在智能化家用电器和办公自动化设备等领域。

1概述

1.1单片机的电子技术特征

单片机是将CPU、RAM\ROM\定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。

1.2四路定时控制器基本功能

四路定时控制器是指应用定时器的功能控制四个回路的通断状况,同时可以用按键来设置每个通路的通断以及通断的时间和周期,利用定时器来控制单片机IO口的高低电平来间接控制继电器的通断。

1.3系统原理

采用STC10F08XE单片机为控制核心,基于STC10F08XE单片机所具备的的计数功能,达到实时时钟的制作,并通过四位共阴极数码管将时间直观的显示出来。

可以利用按键输入功能对显示时间进行调整。

其共设置了四个定时通道,每个定时通道都是相互独立的。

四个定时通道可以分别设置多个时间段的开关状态,每个通道都可以通过I/O口输出信号对电磁继电器进行控制,通过控制电磁继电器的通断进一步控制继电器所连接的其他电路的开关状态。

充分利用了弱电控制强电的效果。

1.4实际应用

被广泛地应用在各种领域。

例如,用来作家用电器的定时控制器;

在办公室中用作磁盘驱动、打印机、复印机、电话的控制;

它还可以作为电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统的控制器;

在工业中,像工业过程控制、过程监制以及机电一体化等控制系统;

它还可以构成一些智能仪表与集成智能传感器传统的控制器等。

2系统总体方案及硬件设计

2.1系统总体设计框架结构

图1系统总体设计框架

系统总体设计框架结构如图1所示。

2.2系统硬件电路

1)时钟电路设计

图2时钟的电路

时钟电路由振荡器及定时发生器和地址锁存允许信号ALE组成,如图2所示。

所用的时钟电路用的是11.0592Mhz的晶振,它的振荡周期约为0.0833µ

s,时钟周期是1/6µ

s,机器周期是1µ

s

2)按键电路设计

图3按键电路原理图

采用2x3键盘扫描,如图3所示,使用每一个按键。

3)数码管显示电路

图4数码管显示电路

显示块是由若干发光二极管组合而成的,一般的“8”字型显示块由a、b、c、d、e、f、g、h8个发光二极管组成,GND接1时均不亮,字位输出口和字形输出口采用高电压驱动,如图4所示。

4)继电器电路

1.继电器的基本工作原理:

继电器(是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。

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

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

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

图5继电器工作原理图

本次试验使用了电磁继电器,原理图如图5所示,电磁继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。

只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而生生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。

当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)释放。

这样吸合、释放,从而达到了在电路中的导通、切断的目的。

对于继电器的“常开、常闭”触点,可以这样来区分:

继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;

处于接通状态的静触点称为“常闭触点”。

继电器一般有两股电路,为低压控制电路和高压工作电路。

2.3系统硬件总电路

图6系统硬件仿真电路图

3软件设计

图7系统软件设计的步骤

4Proteus软件仿真

图8Proteus软件仿真

5课程设计体会

本次课程设计基本结束,回想这一过程,真是困难重重,但是也学到很多。

首先是实验程序,刚开始一片茫然,不知道该如何开始。

在网上搜到部分资料后,经过和宿舍同学探讨学习后开始有点眉目,最后参考部分材料后得出了最终程序。

其次,在焊接电路板时,出现了元器件焊反的情况,但在同学的帮助下成功了。

最后,在Protues仿真实验中有出现数码管显示数字成零不断跳动,而且LED灯自动跳变,相当于是中断不停执行、判断键值,特别不稳定的情况。

但经过大量的修正最终正常。

虽然这次实验没有创新,但是也是自己动手查资料,修改程序,达到了实验要求。

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

有时,只有经过自己亲手试验,才能更深层次的懂得实验原理和每部分电路的功能。

我也很感谢教育过我的老师和周围同学,在遇到困难的时热情的帮助我度过难关,并让我学到了很多。

此次课程设计,我学到了很多,对以后的学习生活都有很大帮助。

今后我也会更加注重理论与实际相结合,多动手,多思考,全面提高自己的能力。

[1]余发山,王福忠,杨凌霄,王莉。

微机原理与单片机接口技术.北京:

煤炭工业出版社。

2013.8.

[2]左金生.电子与模拟电子技术[M].北京:

电子工业出版社.2004:

105-131.

[3]尹勇.单片机开发环境μVision2的开发指南[M].北京:

北京航空航天大学出版社,2004:

173-199.

[4]张俊谟.单片机中级教程--原理与应用.北京:

北京航空航天大学,2006.

[5]霍孟友.单片机原理与应用.北京:

机械工业出版社,2003.

源程序代码

#include<

reg52.h>

intrins.h>

#defineuintunsignedint/*0~2^16-1*/

#defineucharunsignedchar/*0~2^8-1*/

#defineN46080/*N=50000*f0/12,定时50ms*/

#defineM20/*定时M*0.05s*/

uintshi,fen;

#definenum3(X2)((X2)/10)

#definenum2(X2)((X2)%10)

#definenum1(X1)((X1)/10)

#definenum0(X1)((X1)%10)

sbitW1=P0^3;

sbitW2=P0^2;

sbitW3=P0^1;

sbitW4=P0^0;

sbitled=P3^5;

sbitH1=P3^6;

sbitH2=P3^7;

sbithuiluA=P2^0;

sbithuiluB=P2^1;

sbithuiluC=P2^2;

sbithuiluD=P2^3;

sfrP1M1=0x91;

//和后面的main函数中的

sfrP1M0=0x92;

//P1M1P1M0合在一起增加亮度

sfrP2M1=0x95;

sfrP2M0=0x96;

uintnum/*T0_timer*/,num0/*T0_timer*/,num1,key/*matrixkeyscan*/;

//定义全局变量

uchark2=0,k3=0,k5=1,k6=0;

//按键计数

ucharA0_shi=12,A0_fen=30,A1_shi=13,A1_fen=30,

B0_shi=12,B0_fen=30,B1_shi=13,B1_fen=30,

C0_shi=12,C0_fen=30,C1_shi=13,C1_fen=30,

D0_shi=12,D0_fen=30,D1_shi=13,D1_fen=30;

//继电器定时起点、终点

ucharcodeduanxuan[]={0x3f,/*显示0*/0x06,/*显示1*/0x5b,

/*显示2*/0x4f,/*显示3*/0x66,/*显示4*/0x6d,/*显示5*/0x7d,

/*显示6*/0x07,/*显示7*/0x7f,/*显示8*/0x6f,/*显示9*/0x77,

/*显示A*/0x7c,/*显示B*/0x39,/*显示C*/0x5e,/*显示D*/0x79,

/*显示E*/0x71/*显示F*/};

voiddelay_ms(uintxms)//*延时子函数程序*/

{

uinti,j;

for(i=xms;

i>

0;

i--)

for(j=250;

j>

j--);

//*该层循环延时约1ms*/

}

/****************************************************/

typedefunsignedcharBYTE;

typedefunsignedintWORD;

/*DeclareSFRassociatedwiththeIAP*/

sfrIAP_DATA=0xC2;

//Flashdataregister

sfrIAP_ADDRH=0xC3;

//FlashaddressHIGH

sfrIAP_ADDRL=0xC4;

//FlashaddressLOW

sfrIAP_CMD=0xC5;

//Flashcommandregister

sfrIAP_TRIG=0xC6;

//Flashcommandtrigger

sfrIAP_CONTR=0xC7;

//Flashcontrolregister

/*DefineISP/IAP/EEPROMcommand*/

#defineCMD_IDLE0//Stand-By

#defineCMD_READ1//Byte-Read

#defineCMD_PROGRAM2//Byte-Program

#defineCMD_ERASE3//Sector-Erase

/*DefineISP/IAP/EEPROMoperationconstforIAP_CONTR*/

//#defineENABLE_IAP0x80//SYSCLK<

30MHz

//#defineENABLE_IAP0x81//SYSCLK<

24MHz

//#defineENABLE_IAP0x82//SYSCLK<

20MHz

#defineENABLE_IAP0x83//SYSCLK<

12MHz

//#defineENABLE_IAP0x84//SYSCLK<

6MHz

//#defineENABLE_IAP0x85//SYSCLK<

3MHz

//#defineENABLE_IAP0x86//SYSCLK<

2MHz

//#defineENABLE_IAP0x87//SYSCLK<

1MHz

/*StartaddressforSTC10F08XEseriesEEPROM*/

#defineIAP_ADDRESS0x0000

/*---------------------

DisableISP/IAP/EEPROMfunction

MakeMCUinasafestate

----------------------*/

voidIapIdle()

{

IAP_CMD=0;

//Clearcommandregister

IAP_TRIG=0;

//Clearcommandtrigger

IAP_CONTR=0;

//CloseIAPfunction

IAP_ADDRH=0x80;

//Dataptrpointtonon-EEPROMarea

IAP_ADDRL=0;

//ClearIAPaddresstopreventmisuse

ReadonebytefromISP/IAP/EEPROMarea

Input:

addr(ISP/IAP/EEPROMaddress)

Output:

Flashdata

BYTEIapReadByte(WORDaddr)

BYTEdat;

//Databuffer

IAP_CONTR=ENABLE_IAP;

//OpenIAPfunction,andsetwaittime

IAP_CMD=CMD_READ;

//SetISP/IAP/EEPROMREADcommand

IAP_ADDRL=addr;

//SetISP/IAP/EEPROMaddresslow

IAP_ADDRH=addr>

>

8;

//SetISP/IAP/EEPROMaddresshigh

IAP_TRIG=0x5a;

//Sendtriggercommand1(0x5a)

IAP_TRIG=0xa5;

//Sendtriggercommand2(0xa5)

_nop_();

//MCUwillholdhereuntilISP/IAP/EEPROM

//operationcomplete

dat=IAP_DATA;

//ReadISP/IAP/EEPROMdata

IapIdle();

//closeISP/IAP/EEPROMfunction

returndat;

//ReturnFlashdata

/*----------------------------

ProgrameonebytetoISP/IAP/EEPROMarea

addr(ISP/IAP/EEPROMaddress)

dat(ISP/IAP/EEPROMdata)

-

-----------------------------*/

voidIapProgramByte(WORDaddr,BYTEdat)

IAP_CMD=CMD_PROGRAM;

//SetISP/IAP/EEPROMPROGRAMcommand

IAP_DATA=dat;

//WriteISP/IAP/EEPROMdata

Eraseonesectorarea

addr(ISP/IAP/EEPROMaddress)

voidIapEraseSector(WORDaddr)

IAP_CMD=CMD_ERASE;

//SetISP/IAP/EEPROMERASEcommand

/************数码管显示函数******************/

voiddisplays(ucharX2,X1)

W1=0;

P1=duanxuan[num0(X1)];

delay_ms(5);

W1=1;

P1=0x00;

//消影

W2=0;

P1=duanxuan[num1(X1)];

W2=1;

W3=0;

P1=duanxuan[num2(X2)]|0x80;

W3=1;

W4=0;

P1=duanxuan[num3(X2)];

W4=1;

/**************定时器初始化*****************/

voidT_initialize()//

EA=1;

//开放ALL中断允许Enable

ET0=1;

//开放T0中断允许Enable*/

TMOD=0x11;

//定时器0、1,工作方式1,仅受TCON中TR控制*/

TH0=(65536-N)/256;

TL0=(65536-N)%256;

ET1=1;

//开放T1中断允许Enable*/

TH1=(65536-N)/256;

TL1=(65536-N)%256;

TR0=1;

//定时器计时开始

/************时钟实时时间、定时段设置(显示放后边)****************/

voidclk_weixuan()//

switch(k5){

case1:

{switch(k2){case0:

;

break;

case1:

{if(key==1){A0_shi++;

if(A0_shi==24)A0_shi=0;

/*shi=0~23*/}

if(key==4){if(A0_shi==0)A0_shi=24;

A0_shi--;

/*shi=23~0*/}}break;

case2:

{if(key==1){A0_fen++;

if(A0_fen==60)A0_fen=0;

/*fen=0~59*/}

if(key==4){if(A0_fen==0)A0_fen=60;

A0_fen--;

/*fen=0~59*/}}break;

case3:

{if(key==1){A1_shi++;

if(A1_shi==24)A1_shi=0;

if(key==4){if(A1_shi==0)A1_shi=24;

A1_shi--;

case4:

{if(key==1){A1_fen++;

if(A1_fen==60)A1_fen=0;

if(key==4){if(A1_fen==0)A1_fen=60;

A1_fen--;

case5:

{IapEraseSector(0x0000);

IapProgramByte(0x0000,A0_shi);

IapProgramByte(0x0001,A0_fen);

IapProgramByte(0x0002,A1_shi);

IapProgramByte(0x0003,A1_fen);

k2=0;

}break;

}}break;

case2:

{if(key==1){B0_shi++;

if(B0_shi==24)B0_shi=0;

/*shi=0~

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

当前位置:首页 > 经管营销

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

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