单片机00到99秒表的课程设计

发布者:温暖微笑最新更新时间:2019-11-26 来源: 51hei关键字:单片机  秒表  复位功能 手机看文章 扫描二维码
随时随地手机看文章

这是我上个月做的单片机秒表课程设计,这个课程设计是实现00到99秒的一个秒表,
并且有开始和复位功能,
用了一个星期的时间,
附件里面包含秒表的单片机源程序,proteus仿真电路图和课设文档,
都是自己做的,请大家多多指教。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
 

秒表的设计与仿真


一、设计要求

设计一个2位的LED数码显示的“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。

二、方案论证

方案一:

数字电路来实现秒表的设计。由NE555定时器组成的多谐振荡器通过开关控制,把脉冲送到计数器,通过计数器计数,在送入译码器进行译码,最后送入数码管进行显示。框图如下:


(见附件)

优点:用到了之前学习的数电的相关知识,用NE555等一系列芯片就可以实现秒表的数字电路,显示直观,读取方便,精度高,不需要软件编程。

缺点:使用的硬件非常多,使用的空间非常大,电路十分复杂,从经济上也不是很划算。

方案二:

用单片机控制秒表来实现,采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等来设计计时器,将软件和硬件结合起来。其中软件部分采用的是C语言编写程序,包含了显示程序,中断,延时程序等等,硬件用的Proteus软件来连接的秒表电路,主要使用了AT80C51芯片,晶振,电容等基本器件。框图如下:(见附件)


优点:利用了单片机的定时功能,只需要少量的连线再加上软件编程控制,就可以实现秒表的设计电路,节省了花费,提高了技术的精度,更加容易修改。

缺点:除了连接硬件电路,增加了软件的编程,需要额外掌握软件的编程技术,还要考虑到硬件的连接来进行编程。

通过上面两种方案的比较,可以发现单片机使用的硬件更加少,计时的精度也很高,节省了很大的空间,修改时只需要修改部分程序和部分接线就可以改变计数方式和技术范围,所以这次的秒表的设计应该选择单片机设计的方案二。

三、理论设计

硬件部分

1.按键电路:

1.1 当按下K1键时给P1.6接口一个低电平,单片机工作,数码管开始显示,进行开始功能。

1.2 当按下K2键时给P1.7接口一个低电平,单片机工作,数码管清零,进行复位功能。

2.复位电路:

2.1按键按下给单片机的RST接口一个高电平,让单片机系统复位。

3.晶振电路:

3.1晶振电路为单片机合格的时钟信号流,给整个电路的时序提供一个基本时钟,这里晶振频率为11.0592MHz。


4.显示电路:

4.1采用两个共阳LED数码管,通过单片机的P0接口和P3接口来驱动显示出秒数的个位和十位。

软件部分

  •    软件流程图如下:

(见附件)

四、电路仿真及仿真结果分析

仿真结果:将Keil生成的。hex文件添加到AT80C51中后,运行仿真电路如图所示,会显示出00到99s的秒表功能,系统可以正常工作。

五、心得体会

通过这次课程设计,认识到自己有很多不足之处,需要根据课程的设计要求找到合适的方案,设计好程序流程图,以此来写出相应的程序,还地添加一些额外程序来试系统变得更加稳定,程序应该由各种子程序组成,并加上注释,这样程序出错时或者仿真运行显示不出正确的结果时,可以更加方便的找到出错的地方。这次的秒表设计,仿真硬件电路不是很麻烦,主要都是需要写出适合的正确的程序来进行驱动,通过这次的课程设计,更加系统的锻炼了自己。


单片机源程序:

#include

typedef unsigned char uint8;

typedef unsigned int  uint16;

/*七段共阴管显示定义*/ 

uint8 code dispcode[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

/*定义并初始化变量*/

uint8 seconde=0;// second 调整定义

uint16  mstcnt=0;//minite调整定义

sbit key1=P1^6;        //定义P1.6端口为按键1

sbit key2=P1^7;//定义p1.7端口为按键2

/*函数声明*/

void delay(uint8 k ); //延时子程序

void time_pro( ); //时间处理子程序

void display( ); //显示子程序

void keyscan( ); //键盘扫描子程序

/*延时子程序*/

void delay (uint8 k)

{

uint8 j;

while((k--)!=0)

{

for(j=0;j<125;j++)

{;}

}

/*时间处理子程序*/

void time_pro(void)

if(seconde==99)//秒钟设为99进制

{

seconde=0;

}

}

/* 显示子程序*/

void display(void)

{

P0=dispcode[seconde/10]; //显示秒的十位

delay(4);

P3=dispcode[seconde%10]; //显示秒的个位

delay(4);

}

/*键盘扫描子程序*/

void keyscan (void)

if(key1==0) //按键1为开始键

delay(60);

if(key1==0)

EA=1;

delay(60);

seconde++;

}

if(seconde==99)

{seconde=0;

}

if(key2==0) //按键2为复位键

delay(60);

if(key2==0)

{      

delay(60);

seconde=0;

delay(60);

EA=0;

}

}

}

/*1s定时子程序 */

void timer0(void) interrupt 1 using 0

{

TH0=0xff;

TL0=0x19;

TMOD = 0x01;//定时器0方式1,250us中断一次

mstcnt++;

if(mstcnt==4000)

{

seconde++;

mstcnt=0; //对计数单元的清零

}

/*主函数*/

void main(void)

{     

P0=0xff; //初始化p0口,全设为1使数码管

TMOD = 0x01; //time0为定时器,方式1

TH0=0xff; //预置计数初值

TL0=0x19;

EA=0; 

ET0=1; 

TR0=1; 

while (1)

{

keyscan( ); //按键扫描

time_pro( ); //时间处理

display( ); //显示时间

}

}



关键字:单片机  秒表  复位功能 引用地址:单片机00到99秒表的课程设计

上一篇:51单片机控制LCD12864显示汉字
下一篇:基于单片机的ADC0809数字电压表设计报告(汇编语言)

推荐阅读最新更新时间:2024-11-10 17:14

MSP430单片机的ADC详解
ADC模数转化器是430单片机的重要的片上外设,而且在开发当中也常常需要用到ADC,下面根据使用手册结合我个人的学习感悟,总结一下430的ADC的使用要点。 430的ADC的特点: 1、是一个12位的逐次比较式的ADC,即转化结果为0-4096。 2、独立于CPU,可以通关软件配置自己的时钟源。 3、有8个转化通道,并且可以通关软件配置它的正负参考电压。 4、转化速率 =200KSPS,即每秒转化200K次。 5、有16个12位的转化结果存储单元。 6、转化结果为Nadc。 转化结果和VR+与VR-有关,因此,在使用ADC的时候要配置正确。 7、转化使用的时钟信号有四个: 分别是:MCLK
[单片机]
MSP430<font color='red'>单片机</font>的ADC详解
单片机入门程序五
;*****************************************; ;实验名称:两位数码管动态显示0-99实验 ; ;作者: 龙谊 ; ;版本: VER 1.0 ; ;说明: 采用共阴极数码管 ; ;修改: 无 ; ;编程语言: 汇编语言 ; ;*****************************************; ORG 00H ST
[单片机]
【PIC18单片机学习笔记】一、程序的烧录
Windows 10 20H2 PICkit 3 v3.10 MPLAB X IDE v5.45 PIC18F46J50 编程器 所用编程器为PICkit 3.5 按图示连接好编程器和开发板 烧录软件 所用烧录软件为PICkit 3 v3.10 初次使用需要给编程器更新固件,选择Tools - Download PICkit Operating System 选择PICkit 3 v3.10安装目录下的固件 PK3OSVxxxxxx.hex 烧录 准备程序 我这里以点灯为例 main.c #include xc.h void main(void) { TRISD &= ~(0x01 2
[单片机]
【PIC18<font color='red'>单片机</font>学习笔记】一、程序的烧录
基于单片机的多周期完全同步测频技术
频率测量是电子测量中经常遇到的问题,如何提高频率测量的准确度是关键。通常采用的方法有低频端测周高频端测频和多周期同步测量频率。采用低频端测周高频端测频时存在中界频率测量误差很大即测量死区问题,也就是说不论低端和高端测量准确度有多高,中界频率测量误差总是最大。因此从理论上讲频率的测量准确度很难提高到某个数量级;多周期同步测频法则不存在这样的问题,只要周期数足够大,测量的准确度总可以提高到一定程度。但多周期同步测量实际上只是对被测信号进行同步,对时钟信号并未同步,因此它只是一种准同步。本文根据多周期同步测频原理及测量误差,提出完全同步频率测量的新方法,最后使用单片机实现这种测量,使测量频率的准确度大大提高。 1 多周期同步测频原理及误
[单片机]
基于<font color='red'>单片机</font>的多周期完全同步测频技术
51单片机的一些开发实用技巧
一.C语言中嵌入汇编语言 单片机开发中,通常我们使用C语言编写主程序,这样可以充分借助C语言工具提供的运算库函数及强大的数据处理能力。但C语言的可控性不及汇编语言,在有些对时序要求严格的处理上,我们还需用灵活性更强的汇编语言来编写。上海AVR单片机培训这样就产生了C语言和汇编语言混合编程的问题,一般分成三种方式:1.汇编语言调用C语言函数;2. C语言调用汇编语言;3. C语言中嵌入汇编语言。这里我们主要介绍第3种,即C语言中嵌入汇编语言。 下面的一段程序是主程序调用精确的205μS延时子程序并使P1.0交替输出高、低电平的方波。 /*------------程序名test.c------------*/ #include P
[单片机]
51<font color='red'>单片机</font>的一些开发实用技巧
实验9 红外接收单片机解码
1.实现对红外遥控器的解码,并用其实现一些简单的控制 /******************************************************************************* * lcd1602显示遥控器接p3.2 * * * 按下上面的按键分辨显示遥控器上面的按键数据 * * * 连接方法:使用红外功能时 J1跳线短接 * * ***
[单片机]
ATMEL单片机、CPLD下载线硬件简介
介绍 本应用文档描述了 Atmel? ATMEL 单片机 、CPLD下载线接口;使用 AT89SISP 编程器给 AT89SX微控制器在线编程的接口。 AT89ISP 软件Atmel 的在线编程软件已经在我们的网站上提供了下载,具体的操作方法请在软件说明中查询(提供下载),软件可以在 Windows? 9x/ME/2000/NT? 操作系统上运行。Atmel ISP 软件提供可以编写的微控制器的芯片有以下几种:AT89S51、AT89S52、AT89S53、AT89LS53、AT89LS8252、AT89LS8252等几种。可以提供用户目标板使用的晶振输入(用户使用的晶振可能不太一样)。 AT89ISP 电缆 为了使用At
[单片机]
ATMEL<font color='red'>单片机</font>、CPLD下载线硬件简介
51单片机是如何存储程序和数据的
简介:(单片机基础知识之单片机存储器)在学校很少用到外扩ROM/RAM的情况,都是用C语言编程,不差空间,代码太大了,买个大ROM的芯片就行了。现在工作了,单位是做SoC的,采用了51的IP核,才算对51的代码/数据空间有了清晰的认识。 在学校很少用到外扩ROM/RAM的情况,都是用C语言编程,不差空间,代码太大了,买个大ROM的芯片就行了。现在工作了,单位是做SoC的,采用了51的IP核,才算对51的代码/数据空间有了清晰的认识。 MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved