简易数字钟的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三单元简易数字钟的设计

数字钟是一种用数字显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无需机械传动等优点。因而得到了广泛的应用。小到人们日常生活中的电子手表,大到车站、码头、机场等公共场所的大型数字电子钟,数字钟到处可见。

在数字电路的学习中,已经学习过用计数器芯片搭建数字钟。51单片机内部集成了定时器/计数器,这为构建数字钟带来了方便。在本单元中,学习如何用51单片机来构建一个功能数字钟。

【任务要求】

➢在6个数码管上显示时、分、秒,共6位数字。

➢通过单片机内部定时器控制走时,走时准确。

➢系统有四个按键,功能分别是调整时间,加,减,确定。在按下调整键时候,显示“时”的两位数码管以1 Hz 频率闪烁。如果再次按下调整键,则“分”开始闪

烁,“时”恢复正常显示,依次循环,直到按下确定键,恢复正常的显示。在数码

管闪烁的时候,按下加或者减键可以调整相应的显示内容。按键支持短按和长按,

即短按时,所修改的数字每次增加1或者减小1,长按时候以一定速率连续增加或

者减少10。

【学习知识点】

➢数码管的原理,驱动程序的实现。

➢51单片机内部定时器的原理及应用

➢独立按键的原理及程序的实现。

【内容安排】

第一节:数码管显示原理及应用实现

第二节:独立按键检测原理及应用实现

第三节:计时的原理及实现

第四节:基于定时器的程序改进

第五节:数字钟的构建

第一节数码管显示原理及应用实现

1.1 数码管显示原理

数字钟要把时间显示到数字显示装置上,常用的数字显示装置有数码管、液晶、LED、CRT显示器等。在单片机系统设计中,LED数码管是最基本的显示装置。在数字钟的设计中我们用数码管对中的小时、分和表来进行显示。

LED数码管能显示各种数字或符号,由于它具有显示清晰、亮度高、寿命长、价格低廉等特点,因此使用非常广泛。图1.1是几个数码管的图片:a图为单位数码管, b图为双位数码管,c图为四位数码管。

a 单位数码管

b 双位数码管

c 四位数码管

图1.1 数码管图片

那么数码管是如何的工作呢?还记得我们小时候玩过的“火柴棒游戏”吗,几根火柴组合起来,可以拼成各种各样的图形,数码管实际上就是利用这个原理做成的。

图1.2 单个数码管引脚标号,共阴和共阳的内部连接图

单个数码管由8个发光二极管组成,其中7个长条形的发光管排列成一个“日”字形,我们称之为“段”,另一个圆点形的发光管在数码管的右下角作为小数点用,图1.2中的a 图是数码管的段标号以及外接引脚排列图,由图可以看出,单个数码管共有10个引脚,其中8个发光二极管的一端分别与数码管的8八个引脚相接,8个发光二极管的另外一端汇集在一起,称之为公共端,与数码管上下排引脚当中的那个引脚相连,称之为“公共端”。公共端既可以接地,也可以接高电平。公共端接地的数码管,是将发光二极管的阴极连接在一起接地,点亮数码管,各段需加高电平,称之为“共阴极数码管”;公共端接高电平的数码管,是将发光二极管的阳极连接在一起接高电平,点亮数码管,各段需加低电平,称之为“共阴极数码管”;图1.2中的b图和c图分别是共阴极数码管和共阳极数码管内部原理图。1.2 单个数码管的控制

我们以共阴极的数码管为例,先介绍如何控制一个8段数码管显示“0”-“F”16个数字或数字。

例1.1 单个数码管显示“0”-“F”

1)硬件电路设计

图1..4 单个LED数码管控制电路

图1.3 单个数码管显示控制电路

由于51单片机I/O高电平驱动能力有限,故在数码管与单片机之间串入锁存器74HC573,增加段的驱动能力,段限流电阻330Ω。

2)软件设计

为了获得“0”-“F”16个不同字符,数码管各段所加的电平不同,因此I/O口输出的编码也不同。因此首先要建立一个编码表,见表3.1。

表3.1 LED数码管字型字段编码表

有了字型段码对照表,就可以用软件的方式进行8段码的译码。如要显示字型“1”,P0输出值为0x06;显示字型“2”,P0口输出值为0x5B。

#include

#define uchar unsigned char

#define uint unsigned int

#define port_seg P1

uchar code seg_7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0-F的字码放在数组中,数组名前面的code表示把数组的元素放在Flash中,而不是//RAM,这样可以节省RAM的空间。

//************************************************************************ // ms延时子函数

//************************************************************************ void delayms(uint xms)//1ms的延时函数

{

uint i,j;

for(i=0;i<112;i++)

for(j=0;j

}

//************************************************************************ // 主函数

//************************************************************************ void main(void)

相关文档
最新文档