动态数码管涉及到很多写法;原理其实和点LED差不多,都是通过寄存器,找到引脚,对二极管进行点亮。

相比之下,管子多了,因此无法一次控制这么多,那不得写死你。
这是就需要借助芯片控制

38译码器

通过P22,P23,P24来控制数码管,一次只能控制一个数码管//注意,这是第几个就是一个8,位选;
ABC输入,右边的LED是输出端
二进制转化为十进制
000 0 控制第一个
001 1 控制第二个
010 2
011 3
前面的数是对应ABC来控制后面的LED,这涉及进制转换,后期会讲。

P00,P01,P02这些就是段选,控制内部的小数码管;

有一位大佬曾说过,单片机就是通过软件控制寄存器(那些P口)从而来控制硬件的;

/**************************************************************************************
实验现象:下载程序后"动态数码管模块"从左至右显示0-7
接线说明: 单片机-->动态数码管模块(具体接线图可见开发攻略对应实验的“实验现象”章节)注意事项:
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;      //对数据类型进行声明定义
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值/*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能         : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{u8 i;for(i=0;i<8;i++){switch(i)   //位选,选择点亮的数码管,{case(0):LSA=1;LSB=1;LSC=1; break;//显示第0位case(1):LSA=0;LSB=1;LSC=1; break;//显示第1位case(2):LSA=1;LSB=0;LSC=1; break;//显示第2位case(3): LSA=0;LSB=0;LSC=1; break;//显示第3位case(4):LSA=1;LSB=1;LSC=0; break;//显示第4位case(5):LSA=0;LSB=1;LSC=0; break;//显示第5位case(6):LSA=1;LSB=0;LSC=0; break;//显示第6位case(7):LSA=0;LSB=0;LSC=0; break;//显示第7位 }P0=smgduan[i];//发送段码delay(100); //间隔一段时间扫描    P0=0x00;//消隐}
}/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{   while(1){   DigDisplay();  //数码管显示函数    }
}

这种写法我是不太喜欢的,不灵活。要改动的话要在大函数中改,说实话,这是我第一次感受到子函数非常好用

#include <REGX52.H>//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//延时子函数
void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location)       //位码输出{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number]; //段码输出Delay(1);             //显示一段时间P0=0x00;               //段码清0,消影
}void main()
{while(1){Nixie(1,1);       //在数码管的第1位置显示1
//      Delay(20);Nixie(2,2);       //在数码管的第2位置显示2
//      Delay(20);Nixie(3,3);       //在数码管的第3位置显示3
//      Delay(20);}
}

这种是比较灵活的,可以比较简单的调节。C语言要学好,很好的利用子函数。

另外还有一个消隐的问题

Nixie(1,1);      //在数码管的第1位置显示1
Delay(20);
Nixie(2,2);     //在数码管的第2位置显示2      Delay(20);
Nixie(3,3);     //在数码管的第3位置显示3
Delay(20);

这个延时放在子函数比较好,
位选 段选 清零 位选 段选 位选 段选
计算机程序是一步步执行的,但是他的速度太快了,上一位的数据跟着段选命令蹿到了下一位,就会出现问题,
这时清零,就没有数据可以被带到下一位了,就不会出问题了。

嘿嘿,下面的代码能显示1314520;

#include <REGX52.H>
void Delay(unsigned int xms)        //@12.000MHz
{unsigned char i, j;while(xms--){i = 12;j = 169;do{while (--j);} while (--i);
}
}unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;  }P0= NixieTable[Number];
//  Delay(1);P0=0x00;}void main()
{while(1){Nixie(1,1);
//          Delay(100);Nixie(2,3);
//          Delay(100);Nixie(3,1);
//          Delay(100);Nixie(4,4);
//          Delay(100);Nixie(5,5);
//          Delay(100);Nixie(6,2);
//          Delay(100);         Nixie(7,0);
//          Delay(100);}
}

动态数码管原理解释及多种写法,消影相关推荐

  1. 51单片机静态数码管和动态数码管原理及实验

    数码管实验 数码管 多位数码管,即是两个或两个以上单个数码管并列集中在一起形成一体的数码管.当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位 ...

  2. 51单片机~动态数码管的显示,消影,消抖,静态扫描,动态扫描,由浅入深,原理代码

    动态数码管的显示,由浅入深,原理 (一)视觉暂留: code存储在程序存储器里,表示只读,不加code的数组存在内存里可读可写. #include"reg52.h"typedef ...

  3. 单片机原理与应用技术(三)———动态数码管显示汇编语言

    一.数码管基础知识 1.数码管结构 一般数码管通常由八段LED灯组成,又分成共阳数码管和共阴数码管(如下图所示).共阴极数码管即为LED阴极连接在一起为公共阴极,共阳极数码光即为LED阳极连接在一起为 ...

  4. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

  5. 数字IC-1.8 子模块组建整模块-动态数码管设计代码实例

    感谢野火开源教程的支持!EmbedFire – 东莞野火电子技术有限公司 本实验采用阳极6位数码管,其中段选是共用的. 一.实验目标 让六位数码管显示从十进制数 0 开始计数,每 0.1s 加 1,一 ...

  6. 【STC单片机学习】第七课:单片机控制静态/动态数码管

    [朱老师课程总结 侵删] 第一部分.章节目录 1.7.1.什么是数码管 1.7.2.静态数码管的初步驱动 1.7.3.静态数码管显示数字 1.7.4.让数码管依次显示0到f 1.7.5.动态数码管 1 ...

  7. 6.0 动态数码管 _ [AT89C51/2] [从零开始的单片机]

    数码管简介 上一个实验是静态数码管实验,动态和静态所用的数码管都一样,在开发板上是2个四位一体的共阴数码管,唯一的区别是要不断更改输入的电平,从而达到动态的效果. 这里所说的动态并不完全是动态.这里的 ...

  8. kafka原理_Kafka动态配置实现原理解析

    总 第19篇 2019年 第15篇 一.问题导读Apache Kafka在全球各个领域各大公司获得广泛使用,得益于它强大的功能和不断完善的生态.其中Kafka动态配置是一个比较高频好用的功能,下面我们 ...

  9. Objective-C中,ARC下的 strong和weak指针原理解释

    Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是& ...

最新文章

  1. Android组件化初探
  2. JS调用打印机打印Web页面
  3. 26 WM配置-策略-入库策略6-定义批量仓储的策略B(Bulk Storage Strategy)
  4. 019,Intelidea右键新建选项没有Java class选项
  5. Leetcode每日一题:327.count-of-range-sum(区间和的个数)
  6. UVA 583 素数打表(线性)
  7. 2020国际机器翻译大赛:火山翻译力夺五项冠军
  8. 《黑客大曝光:移动应用安全揭秘及防护措施》一3.1 了解iPhone
  9. 工商银行计算机网银不能连接u盾,工商银行网银U盾无法识别怎么办
  10. 邮箱地址是什么,163vip.com怎么注册、价格、申请入口、功能!
  11. Navicat自动运行批处理作业并发送附件邮件
  12. 《金山词霸2009 牛津版》插件工具加载
  13. 李飞飞学生新作:利用场景图生成图像
  14. 有备无患!DBS高性价比方案助力富途证券备份上云
  15. java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言
  16. 【MySQL 数据库】JDBC 编程之 Java 连接 MySQL
  17. apriori算法 python实现
  18. python 关联规则
  19. Linux Socket学习(十二)
  20. PDF如何生成电子书分享

热门文章

  1. 基于 Amazon 云端数据质量治理解决方案
  2. 关于SEO,我有几个问题
  3. JAVA常见且基础的面试题
  4. php压缩bcd码,BCD码和十六进制,十进制转换
  5. Sisco的几种常见 NAT 配置
  6. 华章公司计算机中心联系方式
  7. C语言实现课堂随机点名系统
  8. 简单了解ICMP协议
  9. jQuery+flex(简单实用)简单实现淘宝京东五星好评(附注释)
  10. 信号实验(00)常见函数绘图