今天在QQ群上一个初学单片机的人提了一个关于数码管的问题,主要是程序的问题,由于对基础知识掌握不够,花了比较长的时间才解决,现总结一下其中的细节。

电路中8位数码管是由两个74HC573锁存器分别控制位选和段选的。

原程序大致如下(省去了include和sbit定义),目的是要实现第一个数码管显示“1",但是后面有几个数码管也有显示:

程序1

void main()
{WELA=1;//1P1=0xFE;//2WELA=0;//3DULA=1;//4P1=0x06;//5DULA=0;//6
}

由于程序没有while(1)循环,导致单片机不断循环重新执行程序
执行1时,段选锁存器为0x06,P1为0x06,位选刚打开时,位选锁存器值为0x06,所以六个数码管显示数字“1”
执行2时,位选锁存器值变为0xFE,第一个数码管显示“1”
执行3时,位选值0xFE锁存起来,第一个数码管显示“1”
执行4时,位选锁存器为0xFE,P1为0xFE,段选刚打开时,段选锁存器值为0x06,所以第一个数码管显示如图1形状
执行5时,段选锁存器值变为0x06,第一个数码管显示“1”
执行6时,段选值0xFE锁存起来,第一个数码管显示“1”

我原本是想让他在程序结尾加一个while(1)空循环,结果加错了,成了这样:

程序2

void main()
{while(1) {WELA=1;        //1P1=0xFE;        //2WELA=0;        //3DULA=1;        //4P1=0x06;        //5DULA=0;        //6}
}

程序2和1效果相近,由于while(1)的原因,切换更快,显示亮度更高

后来有人说中间加一个P1=0xFF,看上去好了一些,后面几个数码管不亮了,实际上第一个数码管显示不正常,还是没有完全解决问题:
程序3

void main()
{DULA=1;        //1P1=0x06;        //2DULA=0;        //3P1=0xFF;        //4WELA=1;        //5P1=0xFE;        //6WELA=0;        //7
}

执行1时,位选锁存器为0xFE,P1为0xFE,段选刚打开时,段选锁存器值为0xFF,所以第一个数码管显示如图1形状(时间很短,所以亮度低)
执行2时,段选锁存器值变为0x06,第一个数码管显示“1”
执行3时,段选值0xFE锁存起来,第一个数码管显示“1”
执行4时,P1变为0xFF
执行5时,段选锁存器为0x06,P1为0xFF,位选刚打开时,位选锁存器值为0xFF,所以八个数码管都不显示
执行6时,位选锁存器值变为0xFE,第一个数码管显示“1”
执行7时,位选值0xFE锁存起来,第一个数码管显示“1”

如果按照我原先的理解,结尾处加一个while(1)空循环,最后是可以正常显示的:

程序4

void main()
{WELA=1;        //1P1=0xFE;        //2WELA=0;        //3DULA=1;        //4P1=0x06;        //5DULA=0;        //6while(1);        //7
}

执行到3时,位选锁存器为0xFE
执行到6时,段选锁存器为0x06
执行到7时,锁存值不再改变,第一个数码管显示“1”,显示正确

为了使程序更加完善,以下写法更加可靠:

程序5

void main()
{P1=0xFE;        //1WELA=1;        //2WELA=0;        //3P1=0x06;        //4DULA=1;        //5DULA=0;        //6while(1);        //7
}

执行2、3时,位选锁存值为0xFE
执行5、6时,段选锁存值为0x06
执行到7时,锁存值不再改变,第一个数码管显示“1”

附注:
573的 LE锁存使能引脚 高电平时输出和输入相同,低电平时 输出不再改变,即下降沿锁存,也就是低电平锁存。

数码管和573锁存器的细节问题相关推荐

  1. c语言 不用锁存器 数码管倒计时,倒计时器课程设计.doc

    倒计时器课程设计精选 河南机电高等专科学校 课程设计报告书 课程名称: 单片机原理及系统设计 课题名称: 倒计时器课程设计 专 业: 计算机控制技术 班 级: 学 号: 姓 名: 成 绩: 2013 ...

  2. 数码管流动显示(自己的单片机)

    /********************************************************************************** * 标题: 试验数码管上显示数字 ...

  3. 蓝桥杯学习03-共阳数码管的静态显示

    要点:数码管的显示原理与对应段码:数码管显示的相关思维 1.原理图接口对应: [注] Y6C控制公共端com,Y7C控制段码显示: com端:公共端控制数码管数字的显示: 2.共阳数码管F3461BH ...

  4. 51矩阵键盘数码管动态显示

    一.实验目的 1.了解矩阵键盘扫描方法. 2.了解数码管动态显示方法. 二.实验内容 1.完成读取矩阵键盘并静态显示. 2.完成完成读取矩阵键盘并动态显示. 三.实验原理 四.实验电路与程序 1.软件 ...

  5. 【STC15单片机】动态数码管

    目录 点亮一位数码管 动态数码管 100s倒计时 动态数码管封装代码 点亮一位数码管 段选:选中哪一位数码管 位选:选中的数码管要显示的内容 这是我对段选位选的理解,就是选中某个位置,赋值字形码,显示 ...

  6. 蓝桥杯 动态数码管中的延时处理

    今天在学习数码管的被一个小细节困扰了一下,在此分享 如上面的题目,要求最后两位显示月份,并且这个月份要隔一段时间就要变化,一般而言,隔一段时间需要用执行空语句延时,像这样 void Delay(uns ...

  7. 51单片机(三)数码管(超详细、必会!)

    数码管详细总结 一.数码管电路 1.单个数码管 2.多个数码管 3.数码管与芯片的连接 3.1 为什么要使用锁存器? 3.2 锁存器的电路连接 二.数码管显示数字时芯片引脚的状态值 三.数码管实现动态 ...

  8. 第四讲:数码管的动态显示原理和应用实现(郭天祥)

    说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.预备知识 二.动态显示 三.让第1.2.3个数码管显示123 一.预备知识 在我们学习数 ...

  9. 蓝桥杯国信长天单片机--数码管模块(六)

    数码管内部连接示意图 设备连接关系图 什么是位选,什么是段选? 假设我们有4个数码管,我想让某1个数码管显示对应的数字,我就需要先选中它,选中这个数码管的过程就叫位选:一般单个数码管都是8段(带小数点 ...

最新文章

  1. 一、 函数调用栈,执行上下文及变量对象
  2. if 需求:小于或等于18未成年,小于或等于30青年人,其余都是老年人
  3. centos7 redis5.0以后版本 集群部署示例
  4. jquery获得下拉框的值
  5. Redis的七种武器及其适合的应用场景
  6. 各种数的由来 真是神奇又有趣
  7. CCNA笔记:Access Lists
  8. 2022年上半年软件设计师上午真题及答案解析
  9. [原创开源项目]EPUBBuilder一款在线的epub电子书编辑工具
  10. DOS批处理命令之for命令(批量安装APK)
  11. linux 网卡驱动编译安装包,CDlinux网卡驱动的编译、安装、集成
  12. 做网站开发设计注意字体是否侵权
  13. 单条视频播放量破2000w,一首《孤勇者》就能盘活一个账号?
  14. 闲云野鹤:吃鸡(一)之场景制作:使用GPU instancing方式制作刷草插件
  15. 齐二TK6916/20/26/32系列数控落地铣镗床简介1
  16. 第五届蓝桥杯真题解析【JavaC组】
  17. 【游戏设计模式】之二 论撤消重做、回放系统的实现:命令模式
  18. Python sqlite3 (no such table:xxx)
  19. IE代理服务器设置被禁用问题
  20. 电商运营:如何提升b2c商城的销量?

热门文章

  1. 帧中继(Frame Relay)实验
  2. HP DL388G5 安装64位linux虚拟系统出错!
  3. Lotus 下部门间用户的移动操作
  4. IWMS实现频道页面的方法
  5. SQL终极优化(包括很多非索引方面的优化和原理)
  6. cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你
  7. ajax从mysql提取数据在html中_提取图片中数据的科研利器
  8. 深度学习(5)TensorFlow基础操作一: TensorFlow数据类型
  9. java list 接口_Java 集合 List接口
  10. 【算法竞赛学习】二手车交易价格预测-Task2数据分析