单片机课程设计秒计时器设计文档格式.docx

上传人:b****5 文档编号:21719723 上传时间:2023-01-31 格式:DOCX 页数:23 大小:237.49KB
下载 相关 举报
单片机课程设计秒计时器设计文档格式.docx_第1页
第1页 / 共23页
单片机课程设计秒计时器设计文档格式.docx_第2页
第2页 / 共23页
单片机课程设计秒计时器设计文档格式.docx_第3页
第3页 / 共23页
单片机课程设计秒计时器设计文档格式.docx_第4页
第4页 / 共23页
单片机课程设计秒计时器设计文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

单片机课程设计秒计时器设计文档格式.docx

《单片机课程设计秒计时器设计文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计秒计时器设计文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

单片机课程设计秒计时器设计文档格式.docx

1设计理论5

1.1设计指标5

1.2方案论证5

2AT89S51介绍6

2.1主要性能特点6

2.2管脚说明6

3系统硬件电路9

3.1单片机最小应用系统9

3.1.1复位电路11

3.1.2时钟电路12

3.2显示电路13

3.2.1数码管的结构和分类13

3.2.2显示驱动方式14

3.3键控电路15

3.3.1矩阵式键盘的工作原理15

3.3.2矩阵式键盘的按键识别方法15

4软件程序设计17

4.1程序流程图17

4.2单元程序设计19

4.3源程序23

5心得体会24

6参考文献25

1设计理论

1.1设计指标

(1)该倒计时器应具有基本倒时功能;

(2)具有暂停,复位功能;

(3)时间可以任意调整;

(4)时间用数码管显示,初始值为99S,扫描时间为1MS。

1.2方案论证

采用单片机程序设计制作,它是利用芯片AT89S51的特殊功能,上电两个数码管将显示99,P3口控制4X4矩阵按键开关,输入数字。

通过P0口对两片74HC273进行控制,一片输出字型码,一片输出字位码。

P2.4和P2.5控制74HC02,来确定字位和字形码地址。

其系统框图如图1所示。

2AT89S51介绍

AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

2.1主要性能特点

1、4kBytesFlash片内程序存储器;

  

2、128bytes的随机存取数据存储器(RAM);

3、32个外部双向输入/输出(I/O)口;

4、5个中断优先级、2层中断嵌套中断;

5、6个中断源;

6、2个16位可编程定时器/计数器;

7、2个全双工串行通信口;

8、看门狗(WDT)电路;

9、片内振荡器和时钟电路;

10、与MCS-51兼容;

11、全静态工作:

0Hz-33MHz;

 

12、三级程序存储器保密锁定;

13、可编程串行通道;

14、低功耗的闲置和掉电模式。

2.2管脚说明

VCC:

电源电压输入端。

GND:

电源地。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

PDIP封装的AT89S51管脚图

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口除了作为普通I/O口,还有第二功能:

P3.0RXD(串行输入口)  

P3.1TXD(串行输出口)  

P3.2/INT0(外部中断0)  

P3.3/INT1(外部中断1)  

P3.4T0(T0定时器的外部计数输入)  

P3.5T1(T1定时器的外部计数输入)  

P3.6/WR(外部数据存储器的写选通)  

P3.7/RD(外部数据存储器的读选通)  

P3口同时为闪烁编程和编程校验接收一些控制信号。

I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。

读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。

只有读端口时才真正地把外部的数据读入到内部总线。

89C51的P0、P1、P2、P3口作为输入时都是准双向口。

除了P1口外P0、P2、P3口都还有其他的功能。

RST:

复位输入端,高电平有效。

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

ALE/PROG:

地址锁存允许/编程脉冲信号端。

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

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:

外部程序存储器的选通信号,低电平有效。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

EA/VPP:

外部程序存储器访问允许。

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;

当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

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

XTAL2:

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

3系统硬件电路

3.1单片机最小应用系统

单片机最小系统是单片机在发挥具体测控功能时所必须的组成部分。

单片机最小应用系统方框图,如图3所示

图3单片机最小系统应用框图

3.1.1复位电路

单片机在开机时都需要复位,以便CPU及其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。

单片机复位电路工作原理:

当通电瞬间稳压电源给电容充电。

RESET为复位输入端,当RESET引脚持续两个机器周期以上的高电平时,使单片机完成复位操作,随着电容充电结束,将使电容与电阻之间将呈现低电平,单片机复位结束。

复位操作的主要功能是把PC初始化为0000H,使单片机程序存储器从0000H单元开始执行程序。

本设计主要采用上电自动复位电路,其电路图如图4所示

3.1.2时钟电路

本篇论文选择的方案中采用的是内部振荡方式。

采用内部方式时在XTAL1和XTAL2引脚上接石英晶体和微调电容可以构成振荡器,如图5所示。

图中C1、C2起稳定振荡频率、快速起振的作用。

内部振荡方式所得的时钟信号比较稳定,实用电路中使用较多。

振荡频率的选择范围为1MHz~12MHz。

3.2显示电路

显示器件有很多种,常用的有发光二极管,数码管,液晶显示器等,本文采用通用型的LED数码管。

3.2.1数码管的结构和分类

LED数码管根据LED的接法不同分为共阴和共阳两类,它们的发光原理是一样的,只是它们的电源极性不同而已,其结构图分别如图6所示,本设计使用共阳数码管。

(a)共阴结构

3.2.2显示驱动方式

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

本文主要采用动态显示驱动。

由于数码管要点亮需要3—10mA的电流,但单片机不能提供如此大的电流故需要加74HC273加以驱动,单片机输出端引脚的电压约为5V,如果直接加载到数码管上将烧坏数码管,因此在这部分电路中一并加限流电阻,根据理论计算和实际的经验限流电阻取470Ω,其电路图如图7所示一片作为输出字形,一片作为输出字位

3.3键控电路

键盘是微机应用系统中使用最广泛的一种数据输入设备,按照键盘按键的结构形式,可分为独立式键盘和矩阵式键盘。

本文主要采用矩阵式键盘,此键盘控制电路主要是用于调整时间,其电路结构图如图9所示。

3.3.1矩阵式键盘的工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而

图(9)4X4矩阵按键

是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。

行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

3.3.2矩阵式键盘的按键识别方法

确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1、判断键盘中有无键按下将全部行线R0-R3置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:

依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。

4

4软件程序设计

4.1程序流程图系统程序流程图如图10所示。

4.2单元程序设计

1.打开中断和定时器

TMOD=0X11;

ET0=1;

ET1=1;

EA=1;

TH0=0X3C;

TL0=0XB0;

TH1=0xfc;

TL1=0x18;

TR1=1;

TR0=1;

2.中断0

time()interrupt1

{

change=0;

shi=0;

ge=0;

if(--t)

return;

else

{

t=20;

if(n==1||n==0)

{

P1_6=0;

n=0;

return;

}

n--;

}

}

3.矩阵按键输入

voidget_key()

TR1=0;

zxm=0x00;

//消隐显示

key_value=0;

zwm=0x0e;

k=key;

//预取key值

if((key&

0x0f)==0x0e)key_value=1;

if((key&

0x0f)==0x0d)key_value=5;

0x0f)==0x0b)key_value=9;

0x0f)==0x07)key_value=13;

zwm=0x0d;

0x0f)==0x0e)key_value=2;

0x0f)==0x0d)key_value=6;

0x0f)==0x0b)key_value=10;

0x0f)==0x07)key_value=14;

zwm=0x0b;

0x0f)==0x0e)key_value=3;

0x0f)==0x0d)key_value=7;

0x0f)==0x0b)key_value=11;

0x0f)==0x07)key_value=15;

zwm=0x07;

0x0f)==0x0e)key_value=4;

0x0f)==0x0d)key_value=8;

0x0f)==0x0b)key_value=12;

0x0f)==0x07)key_value=16;

zwm=0x00;

while((key&

0x0f)!

=0x0f);

k=10000;

while(--k);

4.数码管显示

display()interrupt3

TH1=0Xfc;

TL1=0X18;

if(dis)

zxm=0;

zwm=0x80;

zxm=zx[n%10];

}

zwm=0x40;

zxm=zx[n/10];

dis=~dis;

5.输入时间

if(key_value==13)TR0=~TR0;

if(key_value==15)

n=99;

t=20;

TR0=1;

P1_6=1;

if(key_value==14)change=1;

if(key_value!

=0)

if((key_value<

11)&

&

(change==1)&

(shi==0)&

(ge==0))

{

n=(key_value-1)*10;

shi=1;

continue;

}

(shi==1)&

n=n+key_value-1;

ge=1;

(ge==1))

n=99;

t=20;

TR0=1;

4.3源程序

系统总源程序见附录二

5心得体会

这次单片机秒计时设计使得我更加深刻的加深了对51单片机实际应用方面的知识,提高了自己的动手能力,增强了自身的编程能力,积累了一些宝贵的学习经验。

通过这次试验,我进一步的51了解了单片机的各管脚以及开发板各部分功能的应用。

对单片机的秒计时,有了进一步的了解。

知道了解和掌握单片机指令系统中高级语言C语言程序设计的基本知识和方法,4X4矩阵按键扫描原理和编程。

对51单片机的中断指令有了新的了解。

6参考文献

[1]康华光电子技术基础模电部分(第五版)北京高等教育出版社2006.1

[2]孙树朴电力电子技术徐州中国矿业大学出版社2000.3

[3]谭浩强C程序设计(第三版)北京清华大学出版社2005

[4]胡汉才单片机及其接口技术(第三版)北京清华大学出版社2010.5

附录1

附录2

#include<

AT89X51.h>

unsignedcharxdatakeyat0xf7ff;

unsignedcharxdatazwmat0xdfff;

unsignedcharxdatazxmat0xefff;

unsignedcharcodezx[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

unsignedchart=20,n=99,key_value;

unsignedintk;

bitdis=1,change=0,shi=0,ge=0;

voidget_key();

voidwait();

voidmain()

while

(1)

get_key();

if(key_value==13)TR0=~TR0;

if(key_value!

0x

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

当前位置:首页 > 解决方案 > 解决方案

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

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