数码管和573锁存器的细节问题
今天在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锁存器的细节问题相关推荐
- c语言 不用锁存器 数码管倒计时,倒计时器课程设计.doc
倒计时器课程设计精选 河南机电高等专科学校 课程设计报告书 课程名称: 单片机原理及系统设计 课题名称: 倒计时器课程设计 专 业: 计算机控制技术 班 级: 学 号: 姓 名: 成 绩: 2013 ...
- 数码管流动显示(自己的单片机)
/********************************************************************************** * 标题: 试验数码管上显示数字 ...
- 蓝桥杯学习03-共阳数码管的静态显示
要点:数码管的显示原理与对应段码:数码管显示的相关思维 1.原理图接口对应: [注] Y6C控制公共端com,Y7C控制段码显示: com端:公共端控制数码管数字的显示: 2.共阳数码管F3461BH ...
- 51矩阵键盘数码管动态显示
一.实验目的 1.了解矩阵键盘扫描方法. 2.了解数码管动态显示方法. 二.实验内容 1.完成读取矩阵键盘并静态显示. 2.完成完成读取矩阵键盘并动态显示. 三.实验原理 四.实验电路与程序 1.软件 ...
- 【STC15单片机】动态数码管
目录 点亮一位数码管 动态数码管 100s倒计时 动态数码管封装代码 点亮一位数码管 段选:选中哪一位数码管 位选:选中的数码管要显示的内容 这是我对段选位选的理解,就是选中某个位置,赋值字形码,显示 ...
- 蓝桥杯 动态数码管中的延时处理
今天在学习数码管的被一个小细节困扰了一下,在此分享 如上面的题目,要求最后两位显示月份,并且这个月份要隔一段时间就要变化,一般而言,隔一段时间需要用执行空语句延时,像这样 void Delay(uns ...
- 51单片机(三)数码管(超详细、必会!)
数码管详细总结 一.数码管电路 1.单个数码管 2.多个数码管 3.数码管与芯片的连接 3.1 为什么要使用锁存器? 3.2 锁存器的电路连接 二.数码管显示数字时芯片引脚的状态值 三.数码管实现动态 ...
- 第四讲:数码管的动态显示原理和应用实现(郭天祥)
说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.预备知识 二.动态显示 三.让第1.2.3个数码管显示123 一.预备知识 在我们学习数 ...
- 蓝桥杯国信长天单片机--数码管模块(六)
数码管内部连接示意图 设备连接关系图 什么是位选,什么是段选? 假设我们有4个数码管,我想让某1个数码管显示对应的数字,我就需要先选中它,选中这个数码管的过程就叫位选:一般单个数码管都是8段(带小数点 ...
最新文章
- 一、 函数调用栈,执行上下文及变量对象
- if 需求:小于或等于18未成年,小于或等于30青年人,其余都是老年人
- centos7 redis5.0以后版本 集群部署示例
- jquery获得下拉框的值
- Redis的七种武器及其适合的应用场景
- 各种数的由来 真是神奇又有趣
- CCNA笔记:Access Lists
- 2022年上半年软件设计师上午真题及答案解析
- [原创开源项目]EPUBBuilder一款在线的epub电子书编辑工具
- DOS批处理命令之for命令(批量安装APK)
- linux 网卡驱动编译安装包,CDlinux网卡驱动的编译、安装、集成
- 做网站开发设计注意字体是否侵权
- 单条视频播放量破2000w,一首《孤勇者》就能盘活一个账号?
- 闲云野鹤:吃鸡(一)之场景制作:使用GPU instancing方式制作刷草插件
- 齐二TK6916/20/26/32系列数控落地铣镗床简介1
- 第五届蓝桥杯真题解析【JavaC组】
- 【游戏设计模式】之二 论撤消重做、回放系统的实现:命令模式
- Python sqlite3 (no such table:xxx)
- IE代理服务器设置被禁用问题
- 电商运营:如何提升b2c商城的销量?
热门文章
- 帧中继(Frame Relay)实验
- HP DL388G5 安装64位linux虚拟系统出错!
- Lotus 下部门间用户的移动操作
- IWMS实现频道页面的方法
- SQL终极优化(包括很多非索引方面的优化和原理)
- cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你
- ajax从mysql提取数据在html中_提取图片中数据的科研利器
- 深度学习(5)TensorFlow基础操作一: TensorFlow数据类型
- java list 接口_Java 集合 List接口
- 【算法竞赛学习】二手车交易价格预测-Task2数据分析