在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示,  我们就拿带小数点的八段数码管来说 , 其实我们没必要说对数码管很陌生,因为数码管无非就是八块发光二极管集成在了一起,另外数码管有共阴极和共阳极数码管之分,说起共阴,共阳,大家可能会有所陌生,这里我们简单介绍一下:

共阴极数码管:    将八只发光二极管的负极通过一根总线连接在了一起 , 然后每只二极管的正极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入高电平时,二极管点亮。(换句话说,也就是说想让哪一只二极管点亮,就给哪只二极管高电平。下面编程我们就以共阴数码管为例)

共阳极数码管:    将八只发光二极管的正极通过一根总线连接在了一起 , 然后每只二极管的负极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入低电平时,二极管点亮。

好了,数码管的基本知识我们说完了,下面来说一些编程相关的,首先,我们知道数字数码管而言,那肯定是显示数字的,那么我们怎么编程实现呢?其实很简单,你想啊,数码管由八段发光二极管组成,那么我们就拿着上面的图,来画一画,比如说,显示数字 “1 ” ,那也就是让 b 和 c 亮,编程的话,即是0x06,0x06转换为二进制 ,是00000110,这样一来给了 b 和 c 段高电平,实现了点亮数字 “1”;下面我们就把数码管所能够显示的数字以及符号通过一个表格整理出来(以共阴极数码管为例);

显示数字 十六进制 二进制 显示数字 十六进制 二进制
0 0x3f 00111111 B 0x7c 01111100
1 0x06 00000110 C 0x39 00111001
2 0x5b 01011011 D 0x5e 01011110
3 0x4f 01001111 E 0x79 01111001
4 0x66 01100110 F 0x71 01110001
5 0x6d 01101101 H 0x76 01110110
6 0x7d 01111101 L 0x38 00111000
7 0x07 00000111 P 0x73 01110011
8 0x7f 01111111 n 0x37 00110111
9 0x6f 01101111 u 0x3e 00111110
A 0x77 01110111      

这里附上一个LED代码查询小软件:

(链接: https://pan.baidu.com/s/1lCDKtCwwabfYE7dWZ2iA-g 提取码: 5fgm),需要的可以下载使用,很方便。

接下来我们还要来介绍一款芯片,也就是74HC573锁存器。

你可能会问,我们静态显示数码管,直接对利用单片机的I/O口对数码管的引脚输出高低电平就好了嘛,为什么还要用到这款芯片?这里我们解释一下,单片机直接控制数码管确实很好,但是我们要明白一点,单片机一共也就 4 x 8 = 32个I/O口,而且我们单片机开发板上都不是只有单个数码管的,都是有六个八个数码管在一块的,如果都用单片机来控制,那一块单片机岂不是什么都干不了了吗,要知道,我们一块51单片机开发板上是由很多模块组成的,有很多功能需要实现,如果一个数码管显示模块就把我们的I/O口资源给用完了,那还有什么意义呢。相反,如果用上锁存器,我们只需要用到单片机的两个I/O口就可以了,完全足够了。

下面,我们来简单介绍一下这款芯片: 对于74HC573,形象一点,我们只需要将其理解为一扇大门,只不过这扇大门是单向的,其中11引脚(LE)控制着门的开、关状态,高电平为大门打开,低电平为大门关闭。D0-D7为输入,Q0-Q7为输出,在LE = 1,即输入高电平时,输入端=输出端,输入是什么,输出也就原封不动的输出;在LE = 0 ,即输入高电平时,大门关闭,实现锁存,不再输出。了解之后,我们按照电路图,来进行编程,代码实现。

如上图所示,在实现数码管的静态显示中,我们用到了两个锁存器,两个I/O口,P1.6和P1.7,分别是位选和段选。关于位选和段选我们解释一下:

位选,位选,也就是位置的选择,一块单片机开发板上,有8个数码管,依次是1、2、3.....8, 这样的话,比如说我们想让第三个亮,就可以通过位选锁存器来实现;

至于说段选,就很好理解了,就是我们常说的控制一个数码管中的  a,b,c...g 段,使其显示数字,这就是段选,即选择数码管的哪一笔段。好了,下面开始编程:

/* ***************************************************** */
// 工  程   : 51单片机开发板
// 文件名   : smg.c
// 处理器   : STC89C52RC
// 编译环境 : Keil4 C51
// 系统时钟 : 11.0592MHZ
// 版    本 : V1.0
// 设计者   :朱豪男
// 生成日期 : 2018-10-14
// 修改日期 :
// 简单描述 : 数码管静态显示程序
/* ***************************************************** */
#include <reg52.h>#define uchar unsigned char
#define uint  unsigned int
#define data  P0                        //P0口宏定义
/* ***************************************************** */
// 数码管位选数组定义
/* ***************************************************** */
uchar code  leddata[] =
{               0x3F,  //"0"0x06,  //"1"0x5B,  //"2"0x4F,  //"3"0x66,  //"4"0x6D,  //"5"0x7D,  //"6"0x07,  //"7"0x7F,  //"8"0x6F,  //"9"0x77,  //"A"0x7C,  //"B"0x39,  //"C"0x5E,  //"D"0x79,  //"E"0x71,  //"F"0x76,  //"H"0x38,  //"L"0x37,  //"n"0x3E,  //"u"0x73,  //"P"0x5C,  //"o"0x40,  //"-"0x00,  //熄灭0x00  //自定义};
};
/* ***************************************************** */
// 位定义
/* ***************************************************** */
sbit du = P1^7;                //段选定义
sbit we = P1^6;                //位选定义
/* ***************************************************** */
// 函数名称:DelayMS()
// 函数功能:毫秒延时
// 入口参数:延时毫秒数(ValMS)
// 出口参数:无
/* ***************************************************** */
void delay(uint z)
{uint x,y;for(x = 0; x < z; x++)for(y = 0; y < 113; y++);
}
/* ***************************************************** */
// 函数名称:main()
// 函数功能:数码管静态显示
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void main(void)
{uchar i;we = 1;                   //位选开data = 0x00;                  //送入位选数据we = 0;                    //位选关while(1){ for(i = 0;i < 16 ; i++){du = 1;               //段选开data = leddata[i];           //送入段选数据 du = 0;               //段选关delay(500);               //延时}}
}

代码很好理解,我们简单介绍一下,首先我们定义了个数码管位选数组,也就是十六进制代码,这便是后来数码管显示数字的核心,接着,我们用 sbit 定义了位选和段选端口,分别是 P1.6 和 P1.7 ,定义了一个延时函数,其实这一串代码很有意思,开关开关思想,贯穿始终,首先我们把位选打开,送入位选数据后,关闭锁存器,实现锁存,进入循环,随之打开段选锁存器,送入段选数据后,再次关闭段选,接下来,这个延时操作对于我们实际看到数码管的显示效果特别重要,因为程序在段选后之后,会马上消隐,显示的时间之后几个微秒,这显然不太合理,我们需要在关闭段选后加上延时,这样一来,才会让每位数码管亮度保持均匀。

(附上效果视频,链接: https://pan.baidu.com/s/1lAu0QkltthlfjndZ-DfX8g 提取码: 2hqs)

51单片机之数码管静态显示相关推荐

  1. 51单片机八位数码管1到F动态滚动显示仿真及程序

    51单片机八位数码管1到F动态滚动显示仿真及程序 动态滚动显示仿真及程序 #include<reg51.h> #define uchar unsigned char #define uin ...

  2. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  3. 51单片机实现数码管显示小数

    51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...

  4. 51单片机学习 数码管 倒计时

    51单片机学习 数码管 倒计时 简介 1.硬件部分 普中单片机 开发板 (138译码器控制)数码管 2.软件部分 keil软件 硬件部分 138译码器 简介 74LS138 为3 线-8线译码器,共有 ...

  5. 单片机学习笔记————51单片机实现数码管中的倒计时程序

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

  6. 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...

  7. 51单片机控制数码管显示

    前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...

  8. 让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)

    51单片机数码管的显示 一.八段数码管基础部分 1.八段数码管的共阴极和共阳极 2.八段数码管的位码和段码 二.八段数码管动态显示 1.八个八段数码管动态扫描0到7流水显示 2.八个八段数码管动态扫描 ...

  9. 【51单片机】数码管的静态显示

    数码管的静态显示 锁存引脚高电平表示直通状态,为低电平表示锁存状态 段锁存定位显示数字,位锁存定位用哪段数码管 12M的晶振接两个30pf的电容,6M的晶振接20pf的电容 三态:高电平,低电平,高阻 ...

最新文章

  1. 引用-ZIGBEE-ZSTACK网络配置相关问题
  2. HALC: High throughput algorithm for long read error correction
  3. 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone
  4. 【项目实战课】NLP入门第1课,人人免费可学,基于TextCNN的新闻文本分类实战...
  5. 猜数字游戏python程序gui_python GUI 猜数字游戏
  6. keras从入门到放弃(二十一)LSTM处理 RNN文本分类
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的bbs论坛管理系统
  8. 解决easyExcel和poi版本冲突问题
  9. Python中MySQL查询结果返回类型
  10. 蓝桥杯2019年软件类省赛:真题+解答
  11. Ubuntu安装和显卡驱动安装
  12. python 正则匹配指定号段手机号
  13. Contest2609 - 高级语言程序实践--第8次作业--计信A2107-2113
  14. MSP MCU I2C入门指南
  15. 文件夹删除不掉-需要管理员权限删除
  16. Cocoa/Cocoa Touch
  17. 【成都站报名】美团点评、蚂蚁金服、腾讯专家共论前端热点技术
  18. 速来围观!公众号图文排版中可以添加微信聊天记录啦!
  19. 想去阿里大厂去面试测试工程师?想月薪15k?这篇文章一定对你有所帮助
  20. Nacos Committer 张龙:Nacos Sync 的设计原理和规划

热门文章

  1. DLT698.45之数据类型(RSD)
  2. javascript 符号_掌握javascript es6符号
  3. firefox打印记录一下
  4. lg g5 h868 android 7,LG G5 (H868)全网通智能手机
  5. 公式编辑神器-MathType
  6. fopen中mode参数 r, w, a, r+, w+, a+ 具体区别(转)
  7. uni-app 上拉加载函数 onReachBottom 不触发
  8. HTML 复选框元素-复选框(checkbox)
  9. 【隐私计算笔谈】MPC系列专题(一):安全多方计算应用场景一览
  10. PolarDB 阿里云国产化数据库:linux系统下的详细安装步骤手册