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

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

3天内不再提示

51单片机数码管静态显示

小黄1176 来源:小黄1176 作者:小黄1176 2024-02-26 11:05 次阅读

数码管静态显示其实在实际应用中很少,除非项目中就只用到了一位数码管显示,否则的话静态显示非常占用IO口。但是,静态显示又是动态显示的基础,所以,在这里我打算跟大家分享一下,数码管静态显示的工作原理编程方法。

一、电路原理

wKgaomXb_mWAXi-lAAC5jucLeQc137.png

备注:这是一个6位数码管的电路,在本项目中我们只用到其中的一个,电路中74LS04电路在这里主要是用作驱动芯片,用于提高单片机IO口的驱动能力。

二、相关知识

1、数码管的结构

wKgZomXb_-qAI4ABAAB3ektUM2Q849.pngwKgZomXb_oSAFOOBAABc6aIbJ-8856.png

数码管内部结构其实就是由8颗LED按照8自形排列组成,而根据结构的不同,数码管可分为共阳极数码管和共阴极数码管,其中把所有LED的阴极连接到一起做引出端的成为共阴极数码管,其中把所有LED的阳极连接到一起做引出端的成为共阳极数码管。

2、取码方式

数码管的使用过程中,我们通过点亮数码管的不同笔段组合,来达到显示不同数字的效果,这就是取码,段码一般按照16进制书写。而共阴极数码管和共阳极数码管的的段码也不一样。

(1)共阴极数码管的取码方式

“0”的段码:取码时a为对应地位,h对应高位

wKgZomXb_qaAcYnnAANkqLskVDc840.png

“1”的段码:取码时a为对应地位,h对应高位

wKgZomXb_tKAPAM-AAOsa4fUWN4945.png

根据这种方式我们可以总结得出,共阴极数码管的段码表

0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07
0 1 2 3 4 5 6 7
0x7f 0x6f 0x77 0x7c 0x39 0x5e 0x79 0x71
8 9 A B C D E F

如果将段码表使用c语言数组的方式书写则为:

unsigned char table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~f

(2)共阳极数码管的取码方式

“0”的段码:取码时a为对应地位,h对应高位

wKgZomXb_vmAM_oZAAQWWlzpnfI995.png

“1”的段码:取码时a为对应地位,h对应高位

wKgZomXb_x6AF_ZvAAQqwMUhHsc988.png

根据这种方式我们可以总结得出,共阳极数码管的段码表

0xc0 0xf9 0xa4 0xb0 0x99 0x92 0x82 0xf8
0 1 2 3 4 5 6 7
0x80 0x90 0x88 0x83 0xc6 0xa1 0x86 0x8e
8 9 A B C D E F

如果将段码表使用c语言数组的方式书写则为:

unsigned char table[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~f

3、数显方式

如果我们想要在数码管上显示数字,只需要把相应的段码送到IO口,即可让数码管显示。

三、例程

​#include<  reg52.h  >

#define uint unsigned int
#define uchar unsigned char

sbit LED1=P2^0;

uchar table_K[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//共阴极数码管段码表

/*-------微秒延时--------*/
void delay_us(uint z)
{
	uint x;
	for(x=z;x>0;x--);
}
/*--------毫秒延时--------*/
void delay_ms(uint z)
{
  uint x,y;
	for(x=z;x>0;x--)
	   for(y=110;y>0;y--); 
}

/*----------主函数-----------*/
void main()
{
	uchar i=1;
	P0=0x00;P1=0xff;P2=0x00;P3=0x00;  //IO口状态初始化
	while(1)
	{
    LED1=1;
		for(i=0;i<  16;i++)  //循环16次 i从0~15
		{
			P0=table_K[i]; //把0~f的段码一次送到P0口
			delay_ms(1000);//等待1秒
		}
  }
}

审核编辑 黄宇

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

    关注

    269

    文章

    5649

    浏览量

    120700
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89949
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128750
收藏 人收藏

    评论

    相关推荐

    51单片机8位数码管显示学号程序编写思路

    51单片机是一种非常经典的单片机型号,具有广泛的应用领域。我们可以利用51单片机的IO口来控制8位数码管
    的头像 发表于 01-04 15:21 2092次阅读

    C51单片机数码管动态显示的原理是什么

    C51单片机数码管动态显示的原理是什么?
    发表于 11-08 07:57

    51单片机数码管驱动

    控制数码 的每一位的 ,位码是一个二进制数 ,它决定了哪些数码管亮起, 哪些熄灭。通过逐位的选择 ,就可以将段码显示出来 ,形成完整的 数字或字母。 4.示例代码调试 ChatGPT
    发表于 11-06 11:06

    BST-M51单片机数码管的基础学习

    BST-M51单片机数码管的基础学习 数码管 静态数码管 NPN三极
    发表于 11-05 23:38

    基于51单片机在LED数码管显示中的应用

    电子发烧友网站提供《基于51单片机在LED数码管显示中的应用.pdf》资料免费下载
    发表于 10-25 10:28 0次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>在LED<b class='flag-5'>数码管</b><b class='flag-5'>显示</b>中的应用

    基于51单片机的超声波测距仪设计数码管显示技术手册

    基于51单片机的超声波测距仪设计 数码管显示技术手册
    发表于 09-18 10:53 7次下载

    基于51单片机实现动态数码管显示

    前面我们已经介绍了如何使用51单片机控制静态数码管显示,在实际应用中通常都需要显示多位数值,如果
    发表于 07-17 14:29 7637次阅读
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>实现动态<b class='flag-5'>数码管</b><b class='flag-5'>显示</b>

    基于51单片机实现静态数码管显示

    前面我们已经介绍了如何控制51 单片机的IO 口输出高低电平,本教程我们通过另外一个实验来讲述51 单片机IO 口的输出。通过单片机的IO
    发表于 07-17 14:26 3424次阅读
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>实现<b class='flag-5'>静态</b><b class='flag-5'>数码管</b><b class='flag-5'>显示</b>

    基于51单片机数码管显示拨码开关编码仿真代码

    基于51单片机数码管显示拨码开关编码仿真设计资料
    发表于 05-22 16:02 2次下载

    基于89C51单片机的8位数码管动态扫描显示源程序

    基于89C51单片机的8位数码管动态扫描显示源程序
    发表于 05-16 10:49 7次下载

    基于89C51单片机的8位数码管静态显示其中之二源程序

    基于89C51单片机的8位数码管静态显示其中之二源程序
    发表于 05-16 10:48 1次下载

    基于89C51单片机的共阳数码管静态显示源程序

    基于89C51单片机的共阳数码管静态显示源程序
    发表于 05-15 11:10 1次下载

    基于ATmega8单片机四位数码管静态显示Proteus仿真源程序

    基于ATmega8单片机四位数码管静态显示Proteus仿真源程序
    发表于 05-05 09:18 2次下载

    基于AT89C51单片机数码管显示的频率计

    基于AT89C51单片机数码管显示的频率计Proteus仿真及程序
    发表于 05-04 15:03 3次下载

    如何读取数码管显示的字母?

    请问各位大佬,我有一个电路板,具有1个80C51单片机,然后电路板上有6个LED数码管,我想读出其中1个数码管显示的字母,有什么好的方法?
    发表于 05-04 13:33