基于51单片机的电子时钟课程设计

2019-11-07来源: 51hei关键字:51单片机  电子时钟

第一章 设计目的及要求

1.目的

通过对电子时钟系统进行编程与Protues仿真,进一步掌握单片机的组成,P1、P0、P2、P3口的应用,蜂鸣器的应用,定时中断程序的编写及应用,对之前学习的单片机课程进行回顾与应用;初步掌握Protues仿真方法以及用keil软件编写程序的方法。


2.题目与要求

本次课程设计的题目为:电子时钟的设计,其具体要求为:

(1)能实现时、分、秒的显示;

(2)能实现12、24小时制的切换;

(3)能设定时间;

(4)能设定闹钟;

整个系统要设计键盘和显示器,利用单片机内部时钟完成定时器的定时设计。


第二章 理论基础

1.AT89C52芯片

AT89C52芯片的引脚图如图1所示。

图1 AT89C52芯片引脚


其中主要应用到的引脚口介绍:

(1)P0口的第一功能是作为一般I/O口使用,第二功能是在CPU访问外部存储器时,分时提供低8位地址和8位双向数据。

(2)P1口是8位准双向I/O口,51子系列中P1只能用作一般I/O口,52子系列中P1.0和P1.1引脚还具有第二功能。

(3)P2口是8位准双向I/O口,第二功能是在CPU访问外部存储器时,作为高8位地址总线,输出高8位地址。

(4)P3口是8位准双向I/O口,其第一功能是用作一般I/O口,第二功能是作为中断信号和外部数据存储器的读写控制信号。

(5)RES,复位信号高电平有效。


2.Keil的简单介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。此处简单介绍一下Keil 工程的建立等,以Keil μVision2界面为例。


(1)建立一个工程,选择菜单栏中的【Project】下的【New Project】,菜单栏如图2所示。

图2 菜单栏

(2)选择工程要保存的路径并且输入工程名,以电子时钟工程的建立为例,如图3所示。

图3 “保存新工程”对话框

(3)选择系统要用的单片机如图4(a)所示,选择添加启动文件如图4(b)所示。

图4(a)“选择单片机”对话框

图4(b)“添加启动文件”对话框

(4)建立文件,选择菜单【File】下的【New】,出现界面如图5所示。

图5 新建文件界面

(5)保存文件为“*.c”文件,并且添加文件到所建的工程下,保存文件截面图如图6所示,添加文件显示界面如图7所示,右键点击SourceGroup添加。

图6 保存文件界面

图7 添加文件界面


3.Protues的简单介绍

Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件,它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具,可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。


(1)Keil中生成*.HEX的界面如图8所示。

图8 生成HEX文件界面

(2)Protues中加载HEX文件,在Protues界面中双击AT89C51芯片,所示界面如图9所示。

              图9 加载HEX文件界面


第三章 设计原理以及方案

1.系统总体框图

本电子时钟主要由单片机、键盘、数码管显示接口电路、蜂鸣器电路和复位电路构成,设计的总体方案如图10所示:

图10 总体方案

2.硬件电路

2.1晶振电路

晶振电路如图11所示。

图11 晶振电路

2.2复位电路

复位电路如图12所示。

图12 复位电路


2.3蜂鸣器电路

蜂鸣器电路如图13所示。

图13 蜂鸣器电路

2.4数码管显示电路

数码管显示电路如图14所示。

图14 数码管显示电路

2.5键盘电路

键盘电路如图15所示。

图15 键盘电路

2.6总体电路

在Protues中仿真的总体电路图如图16所示。

图16 总体电路


3.软件系统设计

3.1单片机的使用情况

设计电子时钟使用单片机资源的情况如下:

P0口输出数码管段选信号,P2口输出数码管位选信号;调整功能选择键kgnxz:P3.0口,通过其选择调整时钟还是调整闹钟;调整秒 ksec:P3.1口,按一次使秒加1;调整分kmin:P3.2;按一次使分加1;调整小时khour:P3.3口,按一次使时加1;12与24小时制的转换键kzh:P3.4,默认24小时制,按一次键之后转换为12小时制。具体如下:


(1)实现基本的走时间和显示时间的时、分、秒,上电自动显示初始时间00-00-00。

(2)当第一次按下第一个弹性按键时进入时间的调节状态,按下第二个按键时实现秒的加一调节,按下第三个按键时实现分的加一调节,按下第四个按键时实现小时的加一调节。

(3)当第二次按下第一个弹性按键时进入闹钟的调节状态(闹钟初始值设定为01-00-30),按下第二个按键时实现秒的加一调节,按下第三个按键时实现分的加一调节,按下第四个按键时实现小时的加一调节。

(4)当第三次按下第一个弹性按键时进入原显示时间的状态。

(5)按下第五个按键时实现24到12小时制的转换。

(6)当第五次按下第一个弹性按键时返回正常的显示时间走时状态。


3.2软件系统的各个模块

时钟系统的软件设计主要采用以下基本模块来实现,主程序、定时中断服务程序、键盘扫描程序模块、时钟显示模块、闹钟显示模块、转换模块、延时模块和蜂鸣器模块。


主程序:对中断程序初值进行设定,在各种情况下对子函数的调用,保证整个程序的顺序执行。


定时中断服务程序:用于电子时钟的准确运行。

键盘扫描程序模块:用于确定按键并在按键按下时调用相应的程序进行显示。

时钟显示模块:用于显示正常走表的时间。

闹钟显示模块:用于显示设定闹钟的时间。

转换模块:用于将默认的24小时制转换为12小时制。

延时模块:程序中调用延时子程序,用于按键消抖动,数码管消影等。

蜂鸣器模块:用于在设定的闹钟时间与走表的时间相等时,闹钟响起。


3.3软件系统程序流图

主程序的顺序流图如图17所示。

图17 主程序顺序流图


显示程序的顺序流图如图18所示。

图18 显示程序顺序流图

中断程序的顺序流图如图19所示。

图19 中断程序顺序流

第四章 仿真结果与分析

1.仿真结果

上电走表仿真结果图如图20所示。

图20 上电之后走表仿真结果图

按下一次kgnxz键,再分别调整时、分、秒各按键,使得显示时间为15-15-15仿真结果图如图21所示。

图21 调整时分秒仿真结果图

按下kzh键,使得显示时间为03-15-19仿真结果图如图22所示。

图22 24小时制转换为12小时制仿真结果图

按下第二次kgnxz键,再分别调整时、分、秒各按键,即调整的便是闹钟的设定时间(初始设定为01-00-30),仿真结果图如图23所示。

图23 闹钟显示仿真结果图

调整闹钟的设定时间为03-20-30,仿真结果图如图24所示。

图24 闹钟调整显示仿真结果图

按下第三次kgnxz键时,显示走表的时间,并且在到达设定的闹钟时间时蜂鸣器发出声音,即在蜂鸣器发声过程中P1.0口会由原高电平变为低电平,仿真结果图如图25所示。

图25 蜂鸣器发声仿真图


2.仿真结果分析

让手机中的秒表与Protues仿真中的秒同时开始,可以发现他们几乎是同步的(由于个人反应导致按下手机秒表瞬间有微小误差)。而闹钟设定值是完全没有误差的,当时间与设定闹钟时间完全相等时蜂鸣器就会发声。


第五章 总结

本次课程设计利用Keil以及Protues软件,完成了电子时钟系统的程序编写与电路图搭建,并对所设计的电子时钟系统进行了仿真测试。


完成本次课程设计的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚开始做课程设计时,仔细阅读设计的题目和要求,想到理论课学得也还差不多,以为没什么太大困难,所用的知识书上都有,各部分程序大都可以参考课本例题完成。开始前两天我就熟悉课本,参考课本内容在稿纸上把自己的思路和各部分程序写了下来,然后就是衔接起来在Keil中编写。经过三天的努力,毫无结果。埋头苦干的过程是痛苦的,尤其是在按自己觉得理论上合理的算法和程序做完,发现根本显示不了的时候,是迷茫,烦躁的。在第三天下午参考别人只是显示出来走表就可以的程序,并且接受别人建议按一步一步调试去编写的情况下,编写运行找错地不断循环中,终于在第五天完善了程序。


通过这次课程设计,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。学习理论课时也是有实践课的,但当时自己只是追求明白课本例题的程序,几乎很少在Protues上去画例题中的仿真图,导致自己对Protues的应用不熟悉,而且也没深入想过课本上那些小的程序之间的联系应用。所以学习知识不能太局限于理论,要与实践结合。学会了单片机的一般设计过程,通常都要进行系统扩展与配置,因此,要完成一个单片机的设计工作,必须依次做到下述工作:


  • 硬件电路的设计、组装与调试;

  • 应用软件的编写、调试;

  • 完整应用软件的调试、固化和脱机运行。

而在进行硬件系统设计时我们应当尽量做到:

  • 尽可能的选择典型电路,并符合单片机的常规使用方法;

  • 在充分满足系统功能要求前提下,留余地以便于二次开发;

[1] [2]
关键字:51单片机  电子时钟 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479234.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机外部中断程序(给P3.2管脚低电平,led会显示取反状态)
下一篇:dht11和ds18b20温湿度控制 单片机程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

通过软件程序消除单片机由外界干扰产生的异常复位的影响
前言:首先简单介绍一下外界干扰对单片机的2点影响:(1)异常复位在刚上电或外部复位引脚为复位电平时,单片机系统进入一个预定的状态——复位状态。在复位状态下,控制寄存器的值是确定的,而数据寄存器的值是随机的,程序计数器也被赋予一个确定的值。但多数情况下控制寄存器的初始值并非我们需要的,不确定的数据寄存器的值也是无法使用的,需要初始化把它们设置成一个预期的、确定的且安全的状态。初始化完成后,系统进入待命状态。系统在工作过程中,因来自电源的干扰,也可能执行复位操作,称为异常复位,这时如不采取措施,记录工作过程的数据又会被初始化,从而造成异常停机。(2)程序跑飞所谓程序跑飞是程序没按预定的顺序执行。因为单片机执行了不该执行的指令,该指令
发表于 2019-11-16
通过软件程序消除单片机由外界干扰产生的异常复位的影响
avr单片机双通信C程序
将下面2个程序分别烧录进2个单片机中.单片机U1//ICC-AVR application builder : 2013-6-14 10:17:58// Target : M16// Crystal: 8.0000Mhz#include <iom16v.h>#include <macros.h>#define LED1_ON PORTD|=(1<<PD4)#define LED1_OFF PORTD&=~(1<<PD4)#define LED2_ON PORTD|=(1<<PD5)#define LED2_OFF PORTD&=~(1<<PD5
发表于 2019-11-16
51单片机MPX4115压力传感器+ADC0832仿真课设程序
单片机源程序如下:#include<math.h>#include<absacc.h>#include<intrins.h>#include<reg51.h>#define uchar unsigned char#define uint unsigned  int#define ulong unsigned long#define BUSY  0x80                  //常量定义          
发表于 2019-11-16
基于51单片机的波形发生器的设计
1 引言1.1 题目要求及分析题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。1.1.1 示意图图1:系统流程示意图1.2 设计要求(1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。(2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。(3) 系统具有存储波形功能。(4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。(5) 系统输出波形幅度范围0~5V。(6) 系统具有显示输出波形的类型、重复频率和幅度的功能
发表于 2019-11-16
基于51单片机的波形发生器的设计
接近开关的51单片机驱动程序
今天用做了个小东西:数码管显示接近开关变化值接近开关通过外部中断0连接单片机;数码管示数增加到50后清零;#include <reg51.h>              // 引用标准库的头文件#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define NoOp   0x00             // 空操作寄存器 #define Digit0 0x01
发表于 2019-11-16
基于STC15W408AS单片机内部EEPROM读写接口函数
#include "reg51.h"#include "intrins.h"#define uint unsigned int#define uchar unsigned char#define ulong unsigned longtypedef uchar BYTE;typedef uint WORD;sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pullsfr P1M0 = 0x92;    
发表于 2019-11-16
小广播
何立民专栏 单片机及嵌入式宝典

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

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