99s倒计时课程设计报告.docx
- 文档编号:25781772
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:25
- 大小:451.16KB
99s倒计时课程设计报告.docx
《99s倒计时课程设计报告.docx》由会员分享,可在线阅读,更多相关《99s倒计时课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
99s倒计时课程设计报告
单片机课程设计任务书
设计主要内容和要求:
1.系统上电,数码管显示“99”.
2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。
3.设置按键S13,当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢计时。
4.当停止计时时,按下S14键,可以设置秒数,按键S1-S10分别对应数字0-9;先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。
按下S13键启动计时。
5.设置按键S15,当S15按下时,数码管显示为“99”,秒表从新开始计时。
6.设计过程中,应使用硬件平台指定的资源进行设计。
摘 要
单片微型计算机简称单片机,是典型的嵌入式微控制器(MicrocontrollerUnit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内单片微型计算机简称单片机,是典型的嵌入式微控制器(MicrocontrollerUnit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
仅有CPU的专用处理器发展而来。
本实验是基于MCS51系列单片机所设计的,可以实现键盘按键与数字动态显示并可以倒数的计数器。
本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个电秒计时器,包括以下功能:
通过单片机系统实现秒表计时功能,可以进行暂停计时、恢复计时、设定时间和清零等操作。
该计数器系统主要由计数器模块、LCD显示器模块、键盘模块、复位模块等部分组成。
关键词:
AT89C51单片机、C语言编程、键盘模块、LCD显示器。
2AT89S51介绍5
2.1主要性能特点5
3系统硬件电路7
3.1单片机最小应用系统7
3.1.1复位电路9
3.1.2时钟电路9
3.2显示电路10
3.2.1数码管的结构和分类10
3.3键控电路11
3.3.1矩阵式键盘的工作原理12
3.3.2矩阵式键盘的按键识别方法12
4软件程序设计与仿真13
4.1程序流程图14
4.2程序设计15
4.3电路仿真18
5心得体会20
6参考文献21
1设计理论
1.1设计指标
(1)该倒计时器应具有基本倒时功能;
(2)具有暂停,复位功能;
(3)时间可以任意调整;
(4)时间用数码管显示,初始值为99S,扫描时间为1MS。
1.2方案论证
采用单片机程序设计制作,它是利用芯片AT89S51的特殊功能,上电两个数码管将显示99,P3口控制4X4矩阵按键开关,输入数字。
通过P0口对两片74HC273进行控制,一片输出字型码,一片输出字位码。
P2.4和P2.5控制74HC02,来确定字位和字形码地址。
其系统框图如图1所示。
2、AT89S51介绍
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外部必须被拉高。
图2管脚图
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单元开始执行程序。
本设计主要采用上电自动复位电路,其电路图如图5所示
图(5)复位电路图
3.1.2时钟电路
本篇论文选择的方案中采用的是内部振荡方式。
采用内部方式时在XTAL1和XTAL2引脚上接石英晶体和微调电容可以构成振荡器,如图5所示。
图中C1、C2起稳定振荡频率、快速起振的作用。
内部振荡方式所得的时钟信号比较稳定,实用电路中使用较多。
振荡频率的选择范围为1MHz~12MHz。
图(6)振荡电路图
3.2显示电路
显示器件有很多种,常用的有发光二极管,数码管,液晶显示器等,本文采用通用型的LED数码管。
3.2.1数码管的结构和分类
LED数码管根据LED的接法不同分为共阴和共阳两类,它们的发光原理是一样的,只是它们的电源极性不同而已,其结构图分别如图6所示,本设计使用共阳数码管。
图7
3.3键控电路
键盘是微机应用系统中使用最广泛的一种数据输入设备,按照键盘按键的结构形式,可分为独立式键盘和矩阵式键盘。
本文主要采用矩阵式键盘,此键盘控制电路主要是用于调整时间,其电路结构图如图所示。
图8、矩阵键盘
3.3.1矩阵式键盘的工作原理
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
3.3.2矩阵式键盘的按键识别方法
确定矩阵式键盘上何键被按下介绍一种“行扫描法”。
图(9)4X4矩阵按键
行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
1、判断键盘中有无键按下将全部行线R0-R3置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。
图(9)4X4矩阵按键
4软件程序设计与仿真
4.1程序流程图系统程序流程图如图10所示。
4.2程序设计
#include
#include
unsignedcharcodeTab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedcharcodejp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
unsignedchara[]={0,0};
unsignedcharint_time;
unsignedcharsecond;
unsignedcharc;
unsignedcharzt;
unsignedcharcount;
unsignedcharcount2;
sbitsound=P2^6;
//函数功能:
数码管动态扫描延时
voiddelay(unsignedchars)
{
unsignedchari,j;
for(i=0;i
for(j=0;j<200;j++)
;
}
//数码管显示子程序
voidDisplaySecond(unsignedchark)
{
P2=0xfe;
P0=Tab[k/10];
delay(50);
P2=0xfd;
P0=Tab[k%10];
delay(50);
P2=0xff;
}
//扫描键盘的值
voidsm(void)
{unsignedchark,j,n,a,m;
m=0xfe;
P1=0xf0;
k=P1;
k=k&0xf0;
if(k!
=0xf0)
{delay(30);
if(k!
=0xf0)
{for(j=0;j<4;j++)
{P1=m;n=P1;
for(a=0;a<16;a++)
{if(jp[a]==n)
c=a;//键值保存在C中
while(P1==jp[a]);
}
m=_crol_(m,1);
}
}
}
}
//按键函数
voidaj(void)
{
if(P1!
=0xf0)
{
delay(30);
if(P1!
=0xf0)
{
if(c==0)//按下暂停/开始键
{
count++;
if(count==1)
{
TR0=0;
zt=1;
}
if(count==2)
{
TR0=1;
zt=0;
count=0;
}
}
if(c==1)//按下设置键
{
if(zt==1)
{
second=0;
zt=1;
count2=0;
}
}
if(c<10)//按下数字键
{
if(zt==1)
{
count2++;
if(count2==1)
{
a[0]=c;
second=a[0]*10+a[1];
}
if(count2==2)
{
a[1]=c;
second=a[0]*10+a[1];
}
}
}
if(c==2)//按下重新开始键
{
DisplaySecond(second=99);
}
}
P1=0xf0;
}
}
//主函数
voidmain(void)
{
TMOD=0x01;
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;
EA=1;
ET0=1;
TR0=1;
int_time=0;
second=99;
sound=0;
while
(1)
{
sm();
aj();
DisplaySecond(second);
}
}
//函数功能:
定时器0的中断服务子程序
voidinterserve(void)interrupt1using1
{
TR0=0;
int_time++;
if(int_time==20)
{
int_time=0;
second--;
if(second==-1)
{
second=0;
sound=1;
}
}
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;
TR0=1;
}
4.3电路仿真
(1)开始计时
(2)设置初值
(3)从新开始
5.心得体会
这一单片机课程是我们专业一个很重要的课程,因为单片机方面的很多知识都应用在机电一体化中。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
了解到单片机的重要性,一开始我就决定了一定要好好学这门课。
经过一个周多的努力,设计基本完成了,在设计的过程中,学到很多有用的知识。
在本次设计中,我深深体会到做一个电子成品是多么的不容易,它是需要付出很多的艰辛劳动。
其中包括方案的比较,成品性能的比较等等诸多因素。
但再复杂的产品都是从简单而来的,我们只有现在打好基础,发挥创新能力,才能与时俱进。
我意识到单片机的重要性也从心里面想过要学好这门课程,在学习的过程中我尽力的克服了由本能产生的对抽象知识的抵制情绪,上课认真听讲,做好笔记,最后总算对单片机有一个比较全面的了解。
特别是在实验的实践过程中,我发现要学好单片机不仅仅要认认真真学习书本上的理论知识,更要学得透彻,还要实际操作单片机。
理论联系实际,这样的学习才不会变得更加生动,更容易调动学习积极主动性。
同时在这次设计中,我发现毕设计的内容都是我们平时我们书本里涉及到的知识,可是我发现自己掌握的并不扎实,自身存在太多问题了,幸好有指导老师和同学的帮助,才能顺利完成这次毕业设计。
通过这次设计我会在以后的学习和工作中不断地完善自己的不足。
当今一个充满机遇与智慧的社会,要想占有一席之地,那么需要有付出艰辛的努力和不怕困难的心理准备。
虽然单片机这门课程已经结课了,但是老师传授给我的知识将使我终身受益!
让我感受到了单片机的强大,实用与前景。
我表示要把这门课程的结束当做是另外一个征程的开始,单片机的学习可以用这么一句话形容——路漫漫其修远兮,吾将上下而求索。
6、参考文献
【参考文献】:
【1】《单片机原理及接口技术》主编:
徐煜明韩雁电子工业出版社2005.1出版
【2】《单片机原理与运用》主编:
董少明中国铁道出版社2007.11出版.
【3】《8051单片机实践与应用》主编:
吴金戌沈庆阳;清华大学出版社2002年出版
【4】《模拟电子技术》主编:
杨毅德重庆大学出版社2004年出版
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 99 倒计时 课程设计 报告