多功能家庭计时器的设计.docx

上传人:b****4 文档编号:5136506 上传时间:2023-05-08 格式:DOCX 页数:28 大小:336.28KB
下载 相关 举报
多功能家庭计时器的设计.docx_第1页
第1页 / 共28页
多功能家庭计时器的设计.docx_第2页
第2页 / 共28页
多功能家庭计时器的设计.docx_第3页
第3页 / 共28页
多功能家庭计时器的设计.docx_第4页
第4页 / 共28页
多功能家庭计时器的设计.docx_第5页
第5页 / 共28页
多功能家庭计时器的设计.docx_第6页
第6页 / 共28页
多功能家庭计时器的设计.docx_第7页
第7页 / 共28页
多功能家庭计时器的设计.docx_第8页
第8页 / 共28页
多功能家庭计时器的设计.docx_第9页
第9页 / 共28页
多功能家庭计时器的设计.docx_第10页
第10页 / 共28页
多功能家庭计时器的设计.docx_第11页
第11页 / 共28页
多功能家庭计时器的设计.docx_第12页
第12页 / 共28页
多功能家庭计时器的设计.docx_第13页
第13页 / 共28页
多功能家庭计时器的设计.docx_第14页
第14页 / 共28页
多功能家庭计时器的设计.docx_第15页
第15页 / 共28页
多功能家庭计时器的设计.docx_第16页
第16页 / 共28页
多功能家庭计时器的设计.docx_第17页
第17页 / 共28页
多功能家庭计时器的设计.docx_第18页
第18页 / 共28页
多功能家庭计时器的设计.docx_第19页
第19页 / 共28页
多功能家庭计时器的设计.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

多功能家庭计时器的设计.docx

《多功能家庭计时器的设计.docx》由会员分享,可在线阅读,更多相关《多功能家庭计时器的设计.docx(28页珍藏版)》请在冰点文库上搜索。

多功能家庭计时器的设计.docx

多功能家庭计时器的设计

第一章多功能家庭计时器的设计

设计一个基于单片机的多功能家庭计时器,该计时器可实现多种时间方案,可以时间时分显示计时,可以秒表计时,暂停继续,可以实现秒倒计时,并且倒计时结束后能实现报警。

1.1课程设计的目的:

1、巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决实际课题设计的能力。

2、培养针对课题需要,选择和查阅有关手册、图表及文献资料的能力,提高组成系统、编程、调试的动脑动手能力。

3、通过对课题设计方案的分析、选择、比较,熟悉运用单片机系统开发、软硬件设计的方法内容及步骤。

4、掌握STC89C52,共阴极数码管,74LS138的接口电路,及使用方法。

1.2课程设计要求:

1、熟悉组成系统中的实验模块原理,画出实验原理图。

2、写出完整的设计任务书:

课题的名称、系统的功能、硬件原理图、软件框图、元件清单、程序清单、参考文献。

3、实现共多功能计时。

 

 

第2章设计方案

2.1系统主要功能

该系统只要实现时间计时功能,能通过4位数码管实现时分计时,秒表计时,秒倒计时并且实现报警功能。

2.2系统硬件构成及功能

多功能计时器的设计总体框图如图所示,主要有单片机AT89C52,电源,键盘模块,译码电路,显示模块构成。

按键模块:

由4个控制开关与单片机内部定时/计数功能组成的系统通过对单片机传输中断信号来实现时间的计时,暂停。

显示模块:

用共阴极数码管,分别显示时分,秒计时功能。

电源模块:

电源模块有220V市变电压经变压,整流,稳压得到+5V,+12V的电压,维持系统正常工作。

系统的总体框图如图1所示:

图1系统总体框图

2.2.1STC89C52单片机及其说明

STC89C52为8位通用微处理器

  

图2PDIP封装的AT89C52引脚图

采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

P0口

  P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的

  方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

  在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

  在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口

  P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑

门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

Flash编程和程序校验期间,P1接收低8位地址。

P2口

  P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑

  门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

  在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器时,P2口输出P2锁存器的内容。

  Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P3口

  P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

  P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能

  P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

RST

  复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/

  当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

  对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

  如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条

  MOVX和MOVC指令才能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

  程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

/VPP

  外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接

  地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

  如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

  Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1

  振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2

振荡器反相放大器的输出端。

特殊功能寄存器

  在STC89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器(SFE),SFR的地址空间映象如表2所示。

  并非所有的地址都被定义,从80H—FFH共128个字节只有一部分被定义,还有相当一部分没有定义。

对没有定义的

  单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。

  不应将数据“1”写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。

  STC89C52除了与STC89C51所有的定时/计数器0和定时/计数器1外,还增加了一个定时/计数器2。

定时/计数器2的控制和状态位位于T2CON、T2MOD,寄存器对(RCAO2H、RCAP2L)是定时器2在16位捕获方式或16位

  自动重装载方式下的捕获/自动重装载寄存器。

数据存储器

  AT89C52有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM和特殊功能寄存器的地址是相同的,但物理上它们是分开的。

  当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节

  RAM还是访问特殊功能寄存器。

如果指令是直接寻址方式则为访问特殊功能寄存器。

间接寻址指令访问高128字节RAM,堆栈操作也是间接寻址方式,所以,高128位数据RAM亦可作为堆栈区使用。

2.2.2资源分配

晶振采用12MHZ。

P0口的P0.0-P0.7分别与数码管7段连接

P2口与74LS138的ABC数据输入端相连。

P1口用来控制按键的输入

2.2.374LS138译码模块

74LS138芯片原理

图374LS138管脚图

74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下:

    当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为

低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低

电平译出。

   利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;若外接一个反

相器还可级联扩展成32线译码器。

   若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器

3线-8线译码器74LS138的功能表

 

2.2.4定时计数模块T0/T1

 

1.组成:

三个16位的可编程定时器/计数器:

定时器/计数器T0、T1和T2。

每个定时器均有两部分构成:

THx和TLx

特殊功能寄存器T2MOD和T2CON主要对T2进行控制。

特殊功能寄存器TMOD和TCON主要对T0和T1进行控制。

引脚P3.5、P3.4、P1.0输入计数脉冲。

定时器T0、T1和T2是3个中断源,可以向CPU发出中断请求。

定时器/计数器T2增加了两个8位的寄存器:

RCAP2H和RCAP2L。

特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。

2.定时器功能:

每个定时器都可由软件设置为定时工作方式或计数工作方式或其他灵活多样的可控功能方式。

这些功能由特殊功能寄存器TMOD和TCON所控制。

定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。

每个定时器/计数器还有四种工作模式。

其中模式0-2对T0和T1是一样的,模式3对两者不同。

TMOD控制

TCON控制:

TR1(TCON.6)—T1运行控制位。

TimerRun

可通过软件置1(TR1=1)或清0(TR1=0)来启动或关闭T1。

在程序中用指令“SETBTR1”使TR1位置1,定时器T1便开始计数。

CLRTR1

TR0(TCON.4)—T0运行控制位。

其功能和操作情况同TR1。

GATE=0时,用软件使TR1置1启动定时器1,若用软件使TR1清0,则停止定时器1。

GATE=1时,用软件TR1置1,如果检测到引脚INT1(P3.3)输入高电平时启动定时器1。

2.2.5数码管显示模块

本设计采用7段共阴极4位数码管显示,当某一段输入为高电平,位选为低电平时,相应的数码管的段位会亮,如图,由P0口加上拉电阻,控制0-9数字以及dp点,通过38译码器实现对4位数码管的位选。

2.3系统的软件设计模块

2.3.1软件延迟

本设计采用软件延迟,通过软件实现数码管的轮流亮,以及数字的控制,定时计数

voiddelay(x)//延时子程序

{

inti;

while(x--)

{

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

}

}

2.3.2

定时/计数设计

本设计通过定时器每50ms产生一次定时中断,当计数为20次时,为1000ms,即1s,来实现时间的计时。

voidtimer0()interrupt1//中断函数

{

TH0=(65535-50000)/256;//T0装初值,

TL0=(65535-50000)%256;

cunt++;//每进中断服务程序一次,cunt加1

}

2.3.3

键盘控制模块

本设计通过4按键,分别控制时分显示,秒表计时,秒倒计时,以及秒表的暂停和继续。

voidkeyscan()//键盘扫描函数

{

if(k1==0)

{

delay(5);

if(k1==0)//检测k1确实被按下防抖动

{

count++;

while(!

k1);//检测松手

delay

(1);//检测确实松手

while(!

k1);

if(count==1)

TR0=0;//暂停定时器

if(count==2)

{

TR0=1;//定时器继续计时

count=0;

}

}

}

}

2.3.4数码管显示模块

本设计通过位选数码管,实现时间的轮流显示,通过延迟函数,当延迟时间很短时,由于人眼有视觉停留,所以人眼看的所有的数码管都是亮的。

通过内部的计数器,实现时间的计时,倒计时。

时分显示模块

voiddisplay1(uintnum)//数码管动态显示子程序(带参数)

{

ucharhou1,hou2,min1,min2,sec1,sec2;//时、分、秒变量定义

sec1=num%10;//计数分割

sec2=num%60/10;

min1=num%600/60%10;

min2=num%3600/600%10;

hou1=num/3600%10;

hou2=num/36000;

P0=tab1[sec1];//P0口段选输出,秒输出

P2=0x00;//P2口位选输出,选择数码管最低位选通

delay

(1);//显示延时

P2=0xff;//去消隐

P0=tab1[sec2];//秒输出

P2=0x01;//数码管次低位选通

delay

(1);

P2=0xff;

P0=tab1[min1+1];//分输出

P2=0x02;//数码管第三位选通

delay

(1);

P2=0xff;

P0=tab1[min2+1];//分输出

P2=0x03;//数码管第四位选通

delay

(1);

P2=0xff;

}

 

 

第三章问题与总结

 

4.1问题

(1)在绘制电路图时电路出现错误,经过观察和调整,得以原理图成功制出。

(2)在编写程序时程序也出现了问题,出现许多提示错误,经过和同学讨论,最后程序才成功编写完成,仿真效果也随之出来。

(3)本来以为仿真图出来,接下来就是简单的手工问题,可过程远比我想象的要复杂的多,第一次焊了一块板,差不多快完成时发现连线连成“蜘蛛网”,甚是难看,在同学的建议下我选择了重新焊,在第二次的焊板过程中发现第一次焊时有许多地方的引脚是错误,结果总不会如自己所意料的,第二次焊结束时所想要的效果还是没有出来,当时的心很失落,用电压表查电路、查看板有无虚焊,在焊完漏掉的线路后效果仍旧没出来,我的心更加失望,在快要绝望准备放弃时,我抱着试一试的心理重新烧了一下程序,结果出来了,心中的石头落下了。

4.2总结

本次的设计中利用STC89C52和74LS138以及定时器完成电路的设计,用开关来控制各种计时方式的转换,用单片机输出后,经过38译码器译码,实现数码管的时间显示。

通过这次课程设计,我进一步了解了定时器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的知识,而且重新温习了刚学不久的c语言,使我学得了许多知识,使我获益匪浅。

这次课程设计,使我的动手能力得到了很大的提高,更使我们懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是我们得到的理论知识得到验证,更能增加对理论知识的理解。

参考文献

1.《单片机原理及应用技术》范力旻电子工业出版社

2.《单片机C语言应用100例》王东峰王会良电子工业出版社

3.《51系列单片机设计实例》楼然苗李光飞北航出版社

附录1

元器件清单

名称

型号参数

数量

Cpu芯片

STC89c52

1

8段共阴极数码管

LG5011AH

4

按键

按钮

4

瓷片电容

20Pf

2

晶振

12MHZ

1

电解电容

10uf

1

电阻

10k

1

9脚排阻

10k

1

发光二极管

LED

1

译码器

74HC138

1

电源

直流5V

1

 

附录2

程序清单

#include//加载头文件

#defineucharunsignedchar//宏定义无符号字符型

#defineuintunsignedlongint//宏定义无符号长整型

sbitk1=P1^3;

sbitled=P3^2;

sbitk2=P1^0;

sbitk3=P1^1;

sbitk4=P1^2;

uintnum;//定义num和cunt为全局变量,全局更改有效

ucharcunt,count,count1;

uchartab1[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};//数码管段选编码高电平有效

codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};

ucharPre_KeyNo=16,KeyNo=16;

voiddelay(x)//延时子程序

{

inti;

while(x--)

{

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

}

}

voidkeyscan()//键盘扫描函数

{

if(k1==0)

{

delay(5);

if(k1==0)//检测k1确实被按下防抖动

{

count++;

while(!

k1);//检测松手

delay

(1);//检测确实松手

while(!

k1);

if(count==1)

TR0=0;//暂停定时器

if(count==2)

{

TR0=1;//定时器继续计时

count=0;

}

}

}

}

voiddisplay1(uintnum)//数码管动态显示子程序(带参数)

{

ucharhou1,hou2,min1,min2,sec1,sec2;//时、分、秒变量定义

sec1=num%10;//计数分割

sec2=num%60/10;

min1=num%600/60%10;

min2=num%3600/600%10;

hou1=num/3600%10;

hou2=num/36000;

P0=tab1[sec1];//P0口段选输出,秒输出

P2=0x00;//P2口位选输出,选择数码管最低位选通

delay

(1);//显示延时

P2=0xff;//去消隐

P0=tab1[sec2];//秒输出

P2=0x01;//数码管次低位选通

delay

(1);

P2=0xff;

P0=tab1[min1+1];//分输出

P2=0x02;//数码管第三位选通

delay

(1);

P2=0xff;

P0=tab1[min2+1];//分输出

P2=0x03;//数码管第四位选通

delay

(1);

P2=0xff;

}

voiddisplay2(uintnum)

{

ucharhou1,hou2,min1,min2,sec1,sec2,miao;//时、分、秒变量定义

keyscan();

sec1=num%10;//计数分割

sec2=num%60/10;

min1=num%600/60%10;

min2=num%3600/600%10;

hou1=num/3600%10;

hou2=num/36000;

P0=tab1[cunt];//P0口段选输出,毫秒输出

P2=0x00;//P2口位选输出,选择数码管最低位选通

delay

(1);//显示延时

P2=0xff;//去消隐

P0=tab1[sec1];//秒输出

P2=0x01;//数码管次低位选通

delay

(1);

P2=0xff;

P0=tab1[sec2];//秒输出

P2=0x02;//数码管第三位选通

delay

(1);

P2=0xff;

P0=tab1[min1];//分输出

P2=0x03;//数码管第三位选通

delay

(1);

P2=0xff;

}

voiddisplay3(uintnum)

{

ucharhou1,hou2,min1,min2,sec1,sec2,miao,sec11,sec22,min11,min22;//时、分、秒变量定义

led=0;

sec1=num%10;//计数分割

sec2=num%60/10;

min1=num%600/60%10;

min2=num%3600/600%10;

hou1=num/3600%10;

hou2=num/36000;

miao=9999-min2*1000-min1*100-sec2*10-sec1;

sec11=miao%10;//计数分割

sec22=miao%60/10;

min11=miao%600/60%10;

min22=miao%3600/600%10;

hou1=miao/3600%10;

hou2=miao/36000;

P0=tab1[sec11];//P0口段选输出,秒输出

P2=0x00;//P2口位选输出,选择数码管最低位选通

delay

(1);//显示延时

P2=0xff;//去消隐

P0=tab1[sec22];//秒输出

P2=0x01;//数码管次低位选通

delay

(1);

P2=0xff;

P0=tab1[min11];//分输出

P2=0x02;//数码管第三位选通

delay

(1);

P2=0xff;

P0=tab1[min22];//分输出

P2=0x03;//数码管第三位选通

delay

(1);

P2=0xff;

led=0;

while(min22==0&&min11==0&&sec11==0&&sec22==0)

{

led=~led;

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2