0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第5章 定时器与数码管基础(5.3)

137933yu 来源:137933yu 作者:137933yu 2025-12-02 15:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

5.3 数码管的学习

LED小灯是一种简单的LED,只能通过亮和灭来表达简单的信息。这节课学习一种能表达更复杂信息的器件——LED数码管

5.3.1 数码管的基本介绍

先提供一张数码管原理图,如图5-2所示。

wKgZO2kum-iAQGTxAAFipIBWdXA26.jpeg

图5-2 数码管原理图

这是比较常见的数码管的原理图,Kingst51开发板子上一共有6个数码管。前边有了LED小灯的学习,数码管学习就会轻松的多了。从图5-3可以看出,数码管共有a、b、c、d、e、f、g、dp这么8个段,而实际上,这8个段每一段都是一个LED小灯,所以一个数码管就是由8个LED小灯组成的。看一下数码管内部结构的示意图,如图5-3。

wKgZPGkum-iASawIAADqxAZ_sMU69.jpeg

图5-3 数码管结构示意图

数码管分为共阳和共阴两种,共阴数码管就是8只LED小灯的阴极是连接在一起的,阴极是公共端,由阳极来控制单个小灯的亮灭。同理,共阳数码管就是阳极接在一起。图5-2的数码管上边有2个com,这就是数码管的公共端。为什么有2个呢,一方面是2个可以起到对称的效果,刚好是10个引脚,另外一个方面,公共端通过的电流较大,初中物理知识有讲,并联电路电流之和等于总电流,用2个com可以把公共电流平均到2个引脚上去,降低单条线路承受的电流。

从开发板的电路图上能看出来,所用的数码管都是共阳数码管,一共有6个,如图5-4所示。

wKgZO2kum-mAUTKvAAHB0gg_s-s10.jpeg

图5-4 Kingst51数码管电路

6个数码管的com都是接到了正极上,当然了,和LED小灯电路一样,也是由74HC138控制三极管的导通来控制整个数码管的使能。先来看最右边的DS1这个数码管,原理图上可以看出,控制DS1的三极管是Q17,控制Q17的引脚是LEDS0,对应到74HC138上的就是U3的Y0输出,如图5-5所示。

wKgZPGkum-qAHzIMAAIfWJqObsc92.jpeg

图5-5 74HC138控制图

点亮DS1这个数码管首先要让LEDS0这个引脚输出低电平,相信读者现在可以根据前边学过的知识独立把ADDR0、ADDR1、ADDR2、ADDR3、ENLED这4个所需输入的值写出来了,真正根据74HC138的手册实际操作一次,不需要记住这些结论,但是只要遇到根据手册资料写一次,慢慢遇到同类芯片就知道如何去解决问题了。

数码管通常是用来显示数字的,板子上有6个数码管,习惯上称之为6位,那控制位选择的就是74HC138了。而数码管内部的8个LED小灯称之为数码管的段,数码管的段选择(即该段的亮灭)是通过P0口控制。

5.3.2 数码管的真值表

数码管的8个段,直接当成8个LED小灯来控制,那就是a、b、c、d、e、f、g、dp一共8个LED小灯。通过图5-2可以看出,如果点亮b和c这两个LED小灯,也就是数码管的b段和c段,其他的所有的段都熄灭的话,就可以让数码管显示出一个数字1,那么这个时候实际上P0的值就是0b11111001,十六进制就是0xF9。那么写一个程序进去,来看一看数码管显示的效果。

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main()

{

ENLED = 0; //使能U3,选择数码管DS1

ADDR3 = 1;

ADDR2 = 0;

ADDR1 = 0;

ADDR0 = 0;

P0 = 0xF9; //点亮数码管段b和c

while (1);

}

把这个程序编译一下,并下载到单片机中,就可以看到程序运行的结果是在最右侧的数码管上显示了一个数字1。

用同样的方法,可以把其他的数字字符都在数码管上显示出来,而数码管显示的数字字符对应给P0的赋值,叫做数码管的真值表。来列一下Kingst51开发板电路图的数码管真值表,注意,这个真值表里显示的数字都不带小数点的,如表5-7。

表5-7 数码管真值表

字符 0 1 2 3 4 5 6 7
数值 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8
字符 8 9 A B C D E F
数值 0x80 0x90 0x88 0x83 0xC6 0xA1 0x86 0x8E

可以把上边那个用数码管显示数字1程序中的P0的赋值随便修改成表5-7真值表中的数值,看看显示的数字的效果。

5.3.3 数码管的静态显示

在第3章学习了74HC138,了解到74HC138在同一时刻只能让一个输出口为低电平,也就是说在一个时刻内,只能使能一个数码管,并根据给出的P0的值来改变这个数码管的显示字符,可以将此理解为数码管的静态显示。

数码管静态显示是对应动态显示而言,静态显示对于一两个数码管还行,多个数码管,静态显示实现的意义就没有了。这节课先用一个数码管的静态显示来实现简单的秒表,为下节课的动态显示打下基础。

51单片机C语言编程有一个关键字code。前边课程定义变量的时候,一般用到unsigned char或者unsigned int这两个关键字,这样定义的变量都是放在单片机的RAM中,程序中可以随意去改变这些变量的值。但是还有一种数据,在程序中要使用,但是却不会改变它的值,定义这种数据时可以加一个code关键字修饰一下,这个数据就会存储到单片机的程序空间Flash中,这样可以大大节省单片机的RAM的使用量,毕竟单片机RAM空间比较小,而程序空间则大的多。那么现在要使用的数码管真值表,只会使用它们的值,而不需要改变它们,就可以用code关键字把它放入Flash中了,具体程序代码如下。

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

//用数组来存储数码管的真值表,数组将在下一章详细介绍

unsigned char code LedChar[] = {

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

};

void main()

{

unsigned char cnt = 0; //记录T0中断次数

unsigned char sec = 0; //记录经过的秒数

ENLED = 0; //使能U3,选择数码管DS1

ADDR3 = 1;

ADDR2 = 0;

ADDR1 = 0;

ADDR0 = 0;

TMOD = 0x01; //设置T0为模式1

TH0 = 0xB8; //为T0赋初值0xB800

TL0 = 0x00;

TR0 = 1; //启动T0

while (1)

{

if (TF0 == 1) //判断T0是否溢出

{

TF0 = 0; //T0溢出后,清零中断标志

TH0 = 0xB8; //并重新赋初值

TL0 = 0x00;

cnt++; //计数值自加1

if (cnt >= 50) //判断T0溢出是否达到50次

{

cnt = 0; //达到50次后计数值清零

P0 = LedChar[sec]; //当前秒数对应的真值表中的值送到P0口

sec++; //秒数记录自加1

if (sec >= 16) //当秒数超过0x0F(15)后,重新从0开始

{

sec = 0;

}

}

}

}

}


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45569

    浏览量

    673312
  • 数码管
    +关注

    关注

    32

    文章

    1894

    浏览量

    94407
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124446
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于单片机的综合应用程序数码管【C语言】定时器控制数码管

    基于单片机的综合应用程序数码管【C语言】定时器控制数码管
    发表于 01-06 13:44 27次下载

    LESSON3_数码管静态显示及定时器和中断应用

    LESSON3_数码管静态显示及定时器和中断应用
    发表于 02-18 18:21 0次下载

    LESSON3_数码管静态显示及定时器和中断应用

    数码管静态显示及定时器和中断应用 可以给初学者学习使用 如果有需要可以下载。
    发表于 03-14 10:40 1次下载

    LESSON3_数码管静态显示及定时器和中断应用

    LESSON3_数码管静态显示及定时器和中断应用。
    发表于 04-29 16:50 5次下载

    定时器扫描数码管(不闪烁)

    定时器扫描数码管(不闪烁) C51单片机源码,KEIL源文件,C语言编写
    发表于 06-20 16:36 7次下载

    LESSON3_数码管静态显示及定时器和中断应用

    数码管是如何显示出字符的 数码管静态显示与动态显示原理 中断概念 单片机的定时器应用
    发表于 07-01 17:17 1次下载

    基于8051的Proteus仿真-定时器控制数码管显示

    基于8051的Proteus仿真-定时器控制数码管显示
    发表于 09-01 23:33 19次下载

    基于SOPC的定时器控制数码管显示

    运行在DE1上,通过程序的控制使数码管显示,从而实现时钟的功能,实验结果表明,基于SOPC的系统环境下,可以利用定时器控制数码管显示。此外,还可以根据不同的用户需求实现不同的功能,方便了对数码
    发表于 11-13 17:07 12次下载
    基于SOPC的<b class='flag-5'>定时器</b>控制<b class='flag-5'>数码管</b>显示

    定时器1秒计数,数码管显示0-999程序代码【下载】

    定时器1秒计数,数码管显示0-999
    发表于 12-20 14:23 18次下载

    数码管显示的原理静态显示及中断概念单片机的定时器应用视频教程

    本文档的主要内容详细介绍的是数码管显示的原理静态显示及中断概念单片机的定时器应用视频教程包括了:1.数码管是如何显示出字符的,2.数码管静态显示与动态显示原理,3.中断概念,4.单片机
    发表于 03-26 14:35 17次下载
    <b class='flag-5'>数码管</b>显示的原理静态显示及中断概念单片机的<b class='flag-5'>定时器</b>应用视频教程

    使用一个定时器控制数码管从左到右每位依次显示的程序免费下载

    本文档的主要内容详细介绍的是使用一个定时器控制数码管从左到右每位依次显示的程序免费下载。
    发表于 07-29 17:36 1次下载
    使用一个<b class='flag-5'>定时器</b>控制<b class='flag-5'>数码管</b>从左到右每位依次显示的程序免费下载

    定时器控制数码管动态显示的仿真电路图免费下载

    本文档的主要内容详细介绍的是定时器控制数码管动态显示的仿真电路图免费下载
    发表于 01-07 11:41 12次下载
    <b class='flag-5'>定时器</b>控制<b class='flag-5'>数码管</b>动态显示的仿真电路图免费下载

    定时器控制数码管动态显示的仿真电路图免费下载

    本文档的主要内容详细介绍的是定时器控制数码管动态显示的仿真电路图免费下载
    发表于 01-07 11:41 12次下载
    <b class='flag-5'>定时器</b>控制<b class='flag-5'>数码管</b>动态显示的仿真电路图免费下载

    使用定时器控制数码管显示的程序和工程文件免费下载

    本文档的主要内容详细介绍的是使用定时器控制数码管显示的程序和工程文件免费下载。
    发表于 06-10 16:54 5次下载
    使用<b class='flag-5'>定时器</b>控制<b class='flag-5'>数码管</b>动<b class='flag-5'>管</b>显示的程序和工程文件免费下载

    使用定时器控制数码管动态显示的程序和工程文件免费下载

    本文档的主要内容详细介绍的是使用定时器控制数码管动态显示的程序和工程文件免费下载。
    发表于 06-10 16:54 19次下载
    使用<b class='flag-5'>定时器</b>控制<b class='flag-5'>数码管</b>动态显示的程序和工程文件免费下载