目录

一、硬件介绍

1、原理

2、多位数码管驱动

二、数码管显示控制

1、静态显示

(1)单个数码管

(2)多个数码管显示

(3)显示数字使用编码方式

2、动态显示

(1)原理

(2)代码实现

(3)测试

工程下载链接


一、硬件介绍

1、原理

数码管有单位数码管、双位数码管和其它多位数码管。如下图所示

单个的数码管共10个引脚,显示不同的数字需要7个引脚,小数点占用1个引脚,公共端占用1个,厂家为了生产方便同意10个引脚,3和8引脚都是公共端。根据公共端接线不同分共阴和共阳。单个的数码管的原理如下

比如:

显示数字“8”,则需要点亮a、b、c、d、e、f、g引脚

显示数字“5”,则需要点亮a、c、d、f、g引脚

2、多位数码管驱动

当多位数码管应用于某一系统时,他们的“位选”是可独立控制的,而“段选“是连接在一起的,通过”位选“信号控制哪几个数码管亮。而在同一时刻,位选选通的所有数码管上显示的数字都是一样的(因为他们8段数码都连在一起的),这种显示方式叫静态显示

位和段分别用两个74HC573驱动和控制,P0同时使用上拉电阻。单片机可以控制锁存器的锁存端,进而控制锁存器的数据输出。当锁存使能低电平时11引脚)为高电平时,锁存器输出数据随输入数据变化而变化。当锁存器使能端(11引脚)为高电平时,输出数据为之前状态数据,输出数据不随输入变化。

六位的数码管显示电气原理图

二、数码管显示控制

数码管采用共阴极方式,即程序中给数码管3和8公共引脚低电平,再给其它段码高电平则段码点亮。

1、静态显示

(1)单个数码管

任务:在左边第二个数码管上显示数字8

位选:

对于要启用的对应数码管,该位为低电平即0。不用的即1。从左往右依次为数码管1-数码管6。没有数码管7和数码管8,则这两个位都写1。

如,对于只启用第二个数码管,则六个数码管的值分别如下:

数码管1:1

数码管2:0

数码管3:1

数码管4:1

数码管5:1

数码管6:1

预留位7:1

预留位8:1

1111 1101即0xFD

段选:

需要点亮的段为1,不点亮的则是0

如,显示数字8,即

a=1

b=1

c=1

d=1

e=1

f=1

g=1

dp=0(小数点)

二进制表示就是0111 1111,16进制表示为0x7F

代码

#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charunsigned char m,n;
sbit dula=P2^6;                    //段选锁存器-使能控制
sbit wela=P2^7;                    //位选锁存器-使能控制void Delay_ms(uint xms)
{uint i,j;  for(i=xms;i>0;i--)for(j=110;j>0;j--);
}void main()
{wela=1;                       //位选锁存器使能//P0=0xFE;                    //1111 1110 :启用第一个数码管-左边第一个P0=0xFD;                 //1111 1101 :启用第二个数码管-左边第二个wela=0;dula=1;                      //段选锁存器使能P0=0X7F;                  //0111 1111 :显示数字8              dula=0;while(1){}
}

实验结果

(2)多个数码管显示

显示6个数码管的话,即将位选的6个数码管都置为0,即1100 0000、16进制为0xC0。即可将六个全部都显示。

显示其它个数数码管同样原理即可。

(3)显示数字使用编码方式

任务:从0到F间隔0.5秒依次显示

数码管编码

根据该原理图,将0-F字符如下表格进行编码。

共阴极数码管编码

注意:

①本原理图数码管为共阴极显示,共阳极数码管编码就不一样了

②如果需要点亮小数点,则需要对表格重新编码。

定义数组

uchar code table[]=
{//0-9   A-F,共阴极数码管显示编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};

代码

 #include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charsbit dula=P2^6;                 //段选锁存器-使能控制
sbit wela=P2^7;                    //位选锁存器-使能控制
uchar num;uchar code table[]=
{//0-9   A-F,共阴极数码管显示编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};void Delay_ms(uint xms)
{uint i,j;  for(i=xms;i>0;i--)for(j=110;j>0;j--);
}void main()
{wela=1;                       //位选锁存器使能//P0=0xFE;                    //1111 1110 :启用第一个数码管-左边第一个//P0=0xFD;                   //1111 1101 :启用第二个数码管-左边第二个P0=0xC0;                 //1100 0000wela=0;P0=0X7F;                    //0111 1111 :显示数字8              while(1){for(num=0;num<16;num++){dula=1;                     //段选锁存器使能P0=table[num];dula=0;                        //段选锁存器去使能Delay_ms(500);                //500毫秒延时}}
}

2、动态显示

(1)原理

数码管动态显示又叫数码管的动态扫描显示。通俗的说就是先在第一个数码管显示一个数字然后关闭再在在很短的时间延迟后在第二个数码管上显示数字再关闭,再延迟一段时间再在第三个数码管上显示数字,依次类推。

这个延迟时间要设置的非常小,测试的时候从500毫秒到10毫秒内,现象为轮流点亮6个数码管数码管到数码管一起变得闪烁显示数字。最后设置1毫秒延时,因为视觉暂留效应,人的眼睛是看不出来的,所以看起来像是静态显示的一样。

(2)代码实现

#include <reg51.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charsbit dula=P2^6;                 //段选锁存器-使能控制
sbit wela=P2^7;                    //位选锁存器-使能控制
uchar num;
uchar index;uchar code table[]=
{//0-9   A-F,共阴极数码管显示编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};void Delay_ms(uint xms)
{uint i,j;  for(i=xms;i>0;i--)for(j=110;j>0;j--);
}void main()
{uint delayTime=1;         //延时时间-毫秒while(1){//第一个数码管显示num=1;dula=1;P0=table[num];dula=0;P0=0xFF;             //消影功能-将所有数码管段都置高电平,都熄灭,就不会有亮点带到下一位数码管上了wela=1;P0=0xfe;wela=0;Delay_ms(delayTime);         //第二个数码管显示num=2;dula=1;P0=table[num];dula=0;P0=0xFF;wela=1;P0=0xfd;                  //1111 1101wela=0;Delay_ms(delayTime);//第三个数码管显示num=3;dula=1;P0=table[num];dula=0;P0=0xFF;wela=1;P0=0xfb;                   //1111 1011wela=0;Delay_ms(delayTime);//第四个数码管显示num=4;dula=1;P0=table[num];dula=0;P0=0xFF;wela=1;P0=0xf7;                   //1111 0111wela=0;Delay_ms(delayTime);//第五个数码管显示num=5;dula=1;P0=table[num];dula=0;P0=0xFF;wela=1;P0=0xef;                   //1110 1111wela=0;Delay_ms(delayTime);//第六个数码管显示num=6;dula=1;P0=table[num];dula=0;P0=0xFF;wela=1;P0=0xdf;                   //1101 1111wela=0;Delay_ms(delayTime);}}

(3)测试

分别设置delayTime不同的值,依次编译生成HEX文件下载。

500毫秒运行效果:

uint delayTime=500;

100毫秒运行效果:

uint delayTime=100;

20毫秒运行效果:

uint delayTime=20;

5毫秒运行效果:

uint delayTime=5;

1毫秒运行效果:

uint delayTime=1;

工程下载链接

https://download.csdn.net/download/panjinliang066333/86504920

C51单片机使用3-数码管显示相关推荐

  1. c51时钟数码管显示流程图_基于单片机89C51的数码管显示时钟设计.doc

    基于单片机89C51的数码管显示时钟设计 基于单片机的数字时钟 摘 要单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉.但是却很少知道它的内部结构以及工作原理.由单片 ...

  2. 51单片机入门——动态数码管显示详解

    51单片机:动态数码管显示 - 模块图 - 显示原理 – 消抖 静态数码管技术 + 人眼视觉停留 显示原理类似于以前的 胶片机放影视,也就是只要我切换的速度足够快你就看不出来其实我是一次次显示的(滑稽 ...

  3. 【51单片机】七段数码管显示实验+详细讲解

    [51单片机]七段数码管显示实验 前言 一.兵马未动,粮草先行--认识七段数码管 1.关于显示器 2.七段数码管 3.七段数码管的结构 4.数码管显示方法 二.数码管显示程序 1.静态显示 效果 2. ...

  4. 51单片机c语言按键扫描程序,单片机按键扫描数码管显示C语言程序

    电子科学与技术 单片机按键扫描数码管显示C语言程序 按键扫描数码管显示程序共定义了6个键的功能:K1.K2.K3.K4以及K5.K8组成的一对复合键,其中K2,K3为连击键,K5为上档键.在正常工作模 ...

  5. 单片机学习笔记————51单片机实现带数码管显示的象棋比赛专用计时器

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

  6. 51单片机静态动态数码管显示

    51单片机静态动态数码管显示 通过此实训了解动态数码管的显示原理,掌握编码方法.共阴极和其阴极数码管的不同之处及常用设计方法. 实训设备 这里使用的377锁存器模块控制的数码管下面就是电路图 显示内容 ...

  7. 基于单片机病房呼叫系统数码管显示房号设计-基于单片机工业生产现场的光照强度控制设计-基于单片机多功能智能台灯设计-基于单片机二维码LCD显示设计-基于单片机多功能时钟闹钟万年历控制系统设计【毕设分享】

    1641基于单片机病房呼叫系统数码管显示房号设计 设计思路:此设计实现的功能通过按键模拟房号,当按键按下时会将房号编号发送到数目管上进行显示,并通过声光进行提示.包含的电路有:数码管显示电路.按键电路 ...

  8. 51单片机双机串口数码管显示排队叫号仿真设计( proteus仿真+程序+报告+讲解视频)

    51单片机双机串口数码管显示排队叫号仿真设计 1.主要功能: 2.仿真 3.程序 4.设计报告 1.1 设计背景与意义 1.2 设计目的 1.3 设计要求及内容 1.4 本文结构安排 2 总体设计方案 ...

  9. avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机8位数码管显示的程序实现(两种方法介绍)...

    描述 本文为大家介绍两个AVR单片机8位数码管显示的程序实现. AVR单片机595驱动8位数码管的显示的电路实现 主程序代码 #include > #include //GCC中的延时函数头文件 ...

  10. 单片机学习笔记————51单片机实现带数码管显示的加法简易计算器

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

最新文章

  1. 使用OpenCV开发机器视觉项目
  2. python程序员年薪百万_想要成为年薪百万的Python程序员,这套面试题别错过
  3. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
  4. 【牛客 - 370 I 】Rinne Loves Xor(按位前缀和,异或)
  5. 查看Jar包中Class类的编译环境jdk版本
  6. js底部广告飘窗代码
  7. godaddy ssl_免费在线Linux培训,GoDaddy切换到OpenStack等
  8. Chapter 2 Open Book——5
  9. 进程同步与互斥:POSIX有名信号量
  10. 货币转换函数:CURRENCY_CONVERTING_FACTOR
  11. 系统集成项目管理工程师教程重点、笔记和试题大全
  12. 深入理解prach的频域和时域数据
  13. XP操作系统安装的硬盘空间要求
  14. 天池大数据竞赛平台-东电网智慧现场作业挑战赛:识别高空作业及安全带佩戴Baseline(非官方)
  15. 哈希函数 英语单词_使用Hash表实现英文单词表并实现单词查询操作
  16. ESP32学习实例(四),WIFI模块的初步学习和遇到的问题,以及解决方法
  17. Akka学习笔记:Actors介绍
  18. 水果忍者VR原型 二
  19. SQL语言的分类及(DDL、DML、DQL)使用语法
  20. 学生白嫖阿里云服务器方法

热门文章

  1. java jama包_Java调用Jama包完成矩阵运算
  2. Pandas超全总结
  3. Windows下串口逻辑端口号大于10无法打开问题
  4. 某一个输入的位数不确定的正整数按照标准的三位分节格式输出
  5. Riak的一个PHP扩展
  6. 大容量充电宝哪种好?充电宝小巧容量大推荐
  7. SpringMVC知识整理
  8. 蒸汽减温的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 杰理之开机手动释放dac上电的噗噗声【篇】
  10. AV多媒体管理控制中心,AV媒体矩阵