第四组基于51单片机的时间显示系统.docx
- 文档编号:26289365
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:24
- 大小:264.95KB
第四组基于51单片机的时间显示系统.docx
《第四组基于51单片机的时间显示系统.docx》由会员分享,可在线阅读,更多相关《第四组基于51单片机的时间显示系统.docx(24页珍藏版)》请在冰豆网上搜索。
第四组基于51单片机的时间显示系统
《单片机应用技术》
设计说明书
题目∶
基于51单片机的电子钟
院系∶
机电工程系
专业班级∶
电气1111班
姓名∶
沈涛孙燕菊方凌霄
学号∶
250341
指导教师∶
祖一康
2013年6月05日
摘要
如今,信息正是一个高度发展的产业,而数字技术是信息的基础,数字技术是目前发展最快的技术领域之一,数字技术在数字集成电路集成度越来越高的情况下,开发数字系统的使用方法和用来实现这些方法的工具已经发生了变化,但大规模集成电路中的基本模块结构仍然需要基本单元电源电路的有关概念,因此用基本逻辑电路来组成大规模或中规模地方法仍然需要我们掌握。
二进制数及二进制代码是数字系统中信息的主要表示形式,与,或,非三种基本逻辑运算是逻辑代数的基础,相应的逻辑门成为数字电路中最基本的元件。
数字电路的输入,输出信号为离散数字信号,电路中电子元器件工作在开关状态。
除此之外,由与,或,非门构成的组合逻辑功能器件编码器,译码器,数字分配器,数字选择器,加法器,比较器以及触发器是常用的器件。
与模拟技术相比,数字技术具有很多优点,这也是数字技术取代模拟技术被广泛使用的原因。
此次课设更是加深了我们对数字技术的理解和认识。
本设计所实现的数字式电子钟作时间显示是电子设计技术中最基本的设计实验之一。
该数字计时系统的逻辑结构较简单,是由控制电路,复位电路,单片机T0定时器,字符显示电路构成的。
其中控制电路是由开关以及电阻组成的电路部分。
复位电路是由直流电源,电阻以及开关组成的电路部分。
第一章整体设计方案
1.1目的
1.1.1利用单片机定时器中断和定时器计数方式实现秒定时。
1.1.2通过LED显示程序的调整,熟悉单片机与LED的接口技术,熟悉LED动态显示的控制过程。
1.1.3通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。
1.1.4进一步学习单片机开发系统的整个流程。
1.2元件
1.2.1实训设备:
单片机开发系统、微机、万用表、电烙铁等。
1.2.2实训器件:
名称
数量
4位7段数码管
2
电阻10k
4
排阻1k
1
键盘开关
5
单片机锁座
1
电容10微法
1
电容30皮法
2
锁存器74HC573
1
DIP20插座
1
6孔排孔
4
晶振12M
1
3孔排孔
1
STC89C52
1
万能板
1
导线
若干
USB公口
1
1.2.3重要器件资料
●单片机STC89c52
STC89C52是一款基于MCS-51系列单片机是8位单片机产品,80C52是其中89C51的升级版的典型代表,8051的基本模块包括以下几个部分:
(1)CPU:
80C51的CPU是8位的,另外80C51内部有1个位处理器
(2)R0M:
4KB的片内程序存储器,存放开发调试完成的应用程序
(3)RAM:
256B的片内数据存储器,容量小,但作用大
(4)I/O口:
P0-P3,共4个口32条双向且可位寻址的I/O口线
(5)中断系统:
共5个中断源,3个内部中断,2个外部中断
(6)定时器/计数器:
2个16位的可编程定时器/计数器
(7)通用串行口:
全双工通用异步接收器/发送器
(8)振荡器:
80C51的外接晶振与内部时钟振荡器为CPU提供时钟信号
(9)总线控制:
80C51对外提供若干控制总线,便于系统扩展
80C51的引脚如下图:
80C51单片机引脚图
●4位八段数码管管脚接线图
实际中使用的是共阴极4位八段数码管
●锁存器74HC573
八进制3态非反转透明锁存器,高性能硅门CMOS器件SL74HC573跟LS/AL573的管脚一样。
器件的输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
×\u36755X出能直接接到CMOS,NMOS和TTL接口上×\u25805X作电压范围:
2.0V~6.0V×\u20302X输入电流:
1.0uA×CMOS器件的高噪声抵抗特性
74HC573的真值表
INPUTS输入
Outputs输出
OE
LE
D
Q(HC573)
Q(HC563)
H
X
X
Z
Z
L
L
X
NOCHANGE*
NOCHANGE*
L
H
L
L
H
L
H
H
H
L
74HC573的管脚图
74HC573的引脚功能表
PINNo引脚号
SYMBOL符号
NAMEANDFUNCTION名称及功能
1
OE
3StateoutputEnableInput(ActiveLOW)3态输出使能输入(低电平)
2,3,4,5,6,7,8,9
D0toD7
DataInputs数据输入
12,13,14,15,16,17,18,19
Q0toQ7
3StateLatchOutputs3态锁存输出
11
LE
LatchEnableInput锁存使能输入
10
GND
Ground接地(0V)
20
VCC
PositiveSupplyVoltage电源电压
1.3步骤
1.3.1要求:
利用万能板,以2个4位LED,右边2位显示秒,中间2位显示分,左边两位显示时,时分秒中间用一个短横线隔开,实现时间显示。
以一个按键开关实现清零功能,第二个开关进行小时加1功能,第三个开关实现分钟加1功能,第四个开关实现秒钟加1功能。
1.3.2方法:
用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器0方式1计数,实现秒钟00--59计数,分钟0—59计数,时钟00—23计数。
1.3.3实验线路分析:
采用万能板,其原理图参见附录。
两个4位7段LED数码管分别由单片机的P0口、P1口和P3口控制,使数码管显示时分秒的字样。
用一个清零计数,三个按钮调整时分秒,数码管管脚图参见附录。
另外加上一个复位电路,使其能正常复位。
另外在加上一个晶体振荡电路就够成了整个秒表的电路。
1.3.4软件设计:
软件整体设计思路是主程序进行初始化,以按键开关按下的次数确定计时系统是否作计数改变,LED八段数码管通过中断的方式进行显示。
返回到初始状态重新开始。
秒定时采用定时器T0中断方式进行,60秒计数由定时器0采用方式1完成,再进行分累计计时,中断及计数的开启随单片机工作开始而开始。
由上述设计思路可设计出软件流程图如图7.1所示。
1.3.5程序编制:
编程时第一个按键为“清零”,第二个按键为“秒加1”,第三个按键为“分加1”,第四个按键为“时加1”。
4位LED显示的数据由显示缓冲数组“ucharhuangchong[]”中的数据决定,数组里面的数据由“buffer()”函数赋值。
第二章硬件电路设计
硬件电路的设计应从两个方面予以考虑。
一是根据应用系统总体设计的参数范围、测控速度与精度等技术指标要求选择单片机。
不同系列单片机或同一系列不同型号单片机芯片内部提供的资源状况各不相同,如ROM、RAM容量,定时/计数器、I/O接口、中断系统等硬件配置,应选择性价比最适合的单片机型。
二是在已选定单片机型号的基础上,根据应用系统的功能要求扩展单片机外部设备的配置,如键盘、打印机、A/D、D/A、报警电路、驱动电路及通用/专用I/O接口等。
2.1硬件电路的设计原则如下:
2.1.1在性价比满足应用系统要求的基础上,选择更可靠、更熟悉的单片机,缩短研制周期。
2.2.2尽可能选择较成熟的典型应用电路,以提高系统的可靠性。
2.2.3单片机内部的资源与外部扩展资源应在满足应用系统设计要求的基础上留有余地,为进一步升级和扩展其功能提供方便。
2.2.4应充分结合软件方案统筹考虑硬件结构,通常硬件功能较完善,其相应的软件就简单,但硬件成本较高;而硬件功能略低,其相应的软件就复杂。
实际中应尽量以软件替代硬件来降低成本。
2.2.5整个系统的相关器件应尽可能做到性能匹配,如电平、速度的匹配等。
2.2.6充分考虑整个系统的抗干扰设计,如选择具有抗干扰设计的单片机并充分筛选芯片与器件,在电路中采取隔离和屏蔽措施等。
2.2.7根据以上设计原则,选择较熟悉的MCS-51系列单片机中具有内部程序存储器的89C52单片机;为实现LED数码显示和键盘控制,直接将开关键盘接到单片机的P1.0口—P1.3,是单片机直接控制按键。
其中:
按第一次,定时器启动,即数码管开始显示数。
按第二次,定时器停止,即数码管上显示的数停止,显示当前的秒数。
按第三次,使数码管上的数复位。
2.2电路原理图
第三章软件系统设计
待硬件电路接线完成后,通常可先编写简单的测试程序对硬件电路进行测试,排除硬件电路设计中存在的错误。
然后根据设计任务的要求确定系统程序的整体结构,尽可能采用模块化程序设计的方法,将任务划分为相对独立的功能模块,明确各模块的功能、时间顺序和相互关系,如系统管理、数据与信息采集、报警处理、误差处理、标度变换、数据处理、输出控制等;列出详细的资源划分表,确定各模块的出口和入口状态;建立必要的数学模型,正确描述出系统中输入和输出间的数学关系;画出各程序模块的详细流程图;根据流程图逐一编写程序;最后将各个模块连接成完整的程序。
3.1软件设计的基本原则
3.1.1程序整体结构清晰、简洁、流程合理,主程序尽可能简单明了。
3.2.2各种功能的实现应采用模块化、子程序化,以便于编制、阅读、连接、移植、修改和调试。
3.3.3对各子程序的入口、出口条件,占用的资源要明确,以便于分析、调试和共享。
3.3.4程序存储区、数据存储区、寄存器区、位寻址区、堆栈区应规划合理,做到既节约资源又不会发生相互间的冲突。
3.3.5运行状态标志化管理,对各功能程序的运行结果、操作状态应设置状态标志,以便查询和实现运行控制。
3.3.6运用软件或软硬件相结合等方法抑制干扰,提高系统的抗干扰能力。
3.3.7必要时可结合硬件采取加密措施。
3.3.8资源分配:
选用定时/计数器T0,定时方式1工作,每隔50ms溢出中断一次。
3.2程序流程框图
3.3程序清单
/******************************************************************/
/*公司名称:
鄂东职院电气1111班*/
/*文件名:
电子表电子表型号:
ST2013520*/
/*创建人:
沈涛日期:
2013-05-23*/
/*修改人:
沈涛日期:
2013-05-23*/
/*功能描述:
能够记录北京时间并显示作为时钟使用*/
/*其他说明:
作为课程设计使用,未经许可不得做它用*/
/*版本:
ST2013520
/******************************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitSHI_SET=P1^0;//设置秒的按钮
sbitFEN_SET=P1^1;//设置分的按钮
sbitMIAO_SET=P1^2;//设置时的按钮
sbitRESET=P1^3;//从新开始的按钮
unsignedcharmiao,fen,shi,TCNT,restar=0;//行扫描,创建时分秒,TCNT循环20次为1S,?
?
函数
ucharcodescan[8]={0xfe,0xfd,0xfb,0xf7,0xef,
0xdf,0xbf,0x7f};//数码管显示的位选段码表
ucharcodetable[13]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x40,0x39,0x00};//数码管显示的段选段码表
ucharhuanchong[8];//显示缓冲区,计算出的数码管显示字符存入里面
/******************************************************************
*
*函数名:
delay
*功能描述:
延时函数
*函数说明:
做短暂延时用
*初始化命令:
无
*调用函数:
无
*全局变量:
us
*输入:
无
*返回:
us
*设计者:
沈涛日期:
2013-05-23
*修改者:
沈涛日期:
2013-05-23
*版本:
ST2013520
*******************************************************************/
voiddelay(uintus)
{
while(us--);
}
/*******************************************************************
*
*函数名:
SHAOMIAO
*功能描述:
扫描显示函数
*函数说明:
做短暂延时用
*初始化命令:
无
*调用函数:
delay
*全局变量:
i,huanchong[]
*输入:
无
*返回:
us
*设计者:
沈涛日期:
2013-05-23
*修改者:
沈涛日期:
2013-05-23
*版本:
ST2013520
********************************************************************/
voidSHAOMIAO()
{
uchari,xianshi;
for(i=0;i<8;i++)
{
P3=0XFF;//7SEG-MPX4-CC为共阴极,禁止显示
//wei=1;//打开位选,将位选信号送出
xianshi=table[huanchong[i]];//显示缓冲函数调用
P0=xianshi;//显示缓冲
P3=scan[i];//开始第一个显示
//wei=0;//打开锁存,保持输出
delay(50);//短暂延时
}
}
/*******************************************************************
*
*函数名:
Timer0
*功能描述:
定时计数器0中断函数
*函数说明:
做定时用
*初始化命令:
无
*调用函数:
无
*全局变量:
TCNT,shi,fen,miao
*输入:
无
*返回:
无
*设计者:
沈涛日期:
2013-05-23
*修改者:
沈涛日期:
2013-05-23
*版本:
ST2013520
*******************************************************************/
voidTimer0(void)interrupt1using1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TCNT++;
if(TCNT==20)
{
miao++;//秒钟增加1
TCNT=0;//重新开始计数
if(miao==60)//如果满了60秒
{
fen++;//分钟增1
miao=0;//重新开始秒钟计时
if(fen==60)//如果满了60分钟
{
shi++;//时钟增1
fen=0;//分钟重新计数
if(shi==24)//如果满了24小时
{
shi=0;//计时清零
fen=0;//分钟清零
miao=0;//秒清零
TCNT=0;//1S计数清零
}
}
}
}
}
/******************************************************************
*
*函数名:
buffer
*功能描述:
显示内容处理函数
*函数说明:
给显示数组动态赋值
*初始化命令:
无
*调用函数:
无
*全局变量:
TCNT,shi,fen,miao
*输入:
无
*返回:
无
*设计者:
沈涛日期:
2013-05-23
*修改者:
沈涛日期:
2013-05-23
*版本:
ST2013520
********************************************************************/
voidbuffer()//时分秒的值按序存入显示缓冲区数组
{
SHAOMIAO();//先进行扫描显示
huanchong[6]=miao/10;
huanchong[7]=miao%10;
huanchong[5]=10;//分秒之间的间隔
huanchong[3]=fen/10;
huanchong[4]=fen%10;
huanchong[2]=10;//时分之间的间隔
huanchong[0]=shi/10;
huanchong[1]=shi%10;
}
/*****************************************************************
*
*函数名:
KEY_SCAN
*功能描述:
独立按键扫描和键值处理函数
*函数说明:
按键按下做出相应反应
*初始化命令:
无
*调用函数:
delay();buffer();
*全局变量:
miao,fen,shi,TCNT,restar,SHI_SET,FEN_SET,MIAO_SET,RESET
*输入:
无
*返回:
无
*设计者:
沈涛日期:
2013-05-23
*修改者:
沈涛日期:
2013-05-23
*版本:
ST2013520
********************************************************************/
voidKEY_SCAN()
{
buffer();//先进行显示内容处理
P1=0XFF;//键盘初始保持高电平
restar=0;//重新开始赋初值
if(MIAO_SET==0)//如果秒设置按键按下
{
delay(100);//程序抖动
if(MIAO_SET==0)
{
miao++;//秒增1
if(miao==60)//如果秒钟计时满,
{
miao=0;//秒归零
}
while(MIAO_SET==0)
{
buffer();//禁止程序继续执行导致加数多
}
}
}
//分析同上面秒钟
if(FEN_SET==0)
{
delay(100);
if(FEN_SET==0)
{
fen++;
if(fen==60)
{
fen=0;
}
while(FEN_SET==0)
{buffer();}
}
}
//分析同秒钟
if(SHI_SET==0)
{
delay(100);
if(SHI_SET==0)
{
shi++;
if(shi==24)
{
shi=0;
}
while(SHI_SET==0)
{buffer();}
}
}
//时间重新开始计时,全部清零
if(RESET==0)//当按键按下
{
delay(100);//软件消除抖动
if(RESET==0)
{
restar=1;//重新将此值1
}
}
}
/*********************************************************************
*
*函数名:
main
*功能描述:
主函数
*函数说明:
按键按下做出相应反应
*初始化命令:
无
*调用函数:
KEY_SCAN();
*全局变量:
miao,fen,shi,TCNT,restar,SHI_SET,FEN_SET,MIAO_SET,RESET
*输入:
无
*返回:
无
*设计者:
沈涛日期:
2013-05-23
*修改者:
沈涛日期:
2013-05-23
*版本:
ST2013520
*******************************************************************/
voidmain()
{
while
(1)
{
shi=0;//赋初值
fen=0;//赋初值
miao=0;//赋初值
TCNT=0;//赋初值
TMOD=0X01;//
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0X82;//总中断允许并且T0中断允许
TR0=1;//T0运行控制位
while
(1)
{
KEY_SCAN();
if(restar==1)
break;
}
}
}
第四章系统调试
4.1输入源程序
4.1.1输入源程序输入源程序时,应以西文方式输入字母和符号,且中文注释前要加分号。
4.1.2对源程序进行汇编和纠错根据自动汇编提供的错误信息逐条纠正错误,直至汇编信息提示“错误(0)”、“汇编结束”。
4.1.3确定调试方案
在调试程序前一定要认真分析源程序,明确各功能程序运行的预期结果。
然后结合源程序应达到的结果,确定出如何通过某些关键参数和实验现象检验程序运行结果正确与否。
例如:
程序运行过程中路径的变化。
并针对具体的分析和观察对象选择较合适的调试方法。
如用protues和keil进行联合调试,单步运行、跟踪运行、连续运行、快速运行至光标处、设置断点等调试方法。
4.2调试程序
4.2.1调试主程序。
主程序运行后,在无任何按键输入时观察有无显示,时钟是否工作,其时、分、秒显示的变化过程是否正确。
若运行结果不正确,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。
例如:
若定时/计数器的初始化出错,则时钟将不能工作;若显示程序出错,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 基于 51 单片机 时间 显示 系统