当前位置: 首页 > news >正文

51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)

接上篇的数码管静态显示,以下是接上篇介绍到的动态显示的原理。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示

文章目录

  • 1. 数码管简单动态显示
  • 2. 数组的定义与引用
  • 3. 实现指定值的数码管动态显示

1. 数码管简单动态显示

按照上面提到的原理,可以设计得到如下代码:

#include <reg52.h>
#include <intrins.h>#define unit unsigned int
#define uchar unsigned charsbit DU = P2^6; //数码管段选
sbit WE = P2^7; //数码管位选//毫秒级延时函数定义
void delay(uint z)
{uint x,y;for(x = z; x>0;x--)for(y=114;y>0;y--);}void main() //main函数自身就会循环
{//动态扫描就需要循环显示,因此需要写到循环中while(1){//第一位数码管P0 = 0xFF; //清楚断码WE = 1; //打开位选锁存器P0=0xFE;	//1111 1110WE = 0; //锁存位选数据DU = 1;//打开段选锁存器P0=0xFD;//1111 1101DU = 0; //段选锁存,锁存段选数据dely(5);//第二位数码管P0 = 0xFF; //清楚断码	   WE = 1;//打开位选锁存器P0=0xFD;	 //1111 1101WE = 0; //锁存位选数据DU = 1;//打开段选锁存器P0=0x5B;	 //0101 1011DU = 0; //段选锁存,锁存段选数据dely(5);}}

在这里插入图片描述
数码管通常用来显示程序运行之后的结果,我们通常是给数码管赋一个值,然后将其进行显示,可以将其写为一个函数,此处需要使用到数组

2. 数组的定义与引用

数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。
数组的一般格式定义如下:
数据类型 数组名[常量表达式]={元素表} ;
例如:

unsigned char tabel[3]={0x3F, 0x06, 0x5B, };
P0= tabel[0];//P0此时的值为0x3F

3. 实现指定值的数码管动态显示

回到前面的目的:给数码管赋一个值,然后将其进行显示

具体代码如下:

#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned char//共阴数码管段选表0-9
//code关键字存到ROM区;不加的话会存储到data区,也就是RAM区;
//RAM区在执行过程中是可以被修改的,ROM区不可以被修改,此处不希望后期被修改
//code区容量大8K,data区只有512个字节
uchar code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x40,0x00};sbit DU = P2^6; //数码管段选
sbit WE = P2^7; //数码管位选//毫秒级延时函数定义
void delay(uint z)
{uint x,y;for(x = z; x>0;x--)for(y=114;y>0;y--);}//形参i表示显示的数字
void disoplay(uchar i)
{uchar bai,shi,ge;bai = i / 100;shi = i%100/10;ge = i%10;//第一位数码管P0 = 0xFF; //清楚断码WE = 1; //打开位选锁存器P0=0xFE;	//1111 1110WE = 0; //锁存位选数据DU = 1;//打开段选锁存器P0=table[bai];DU = 0; //段选锁存,锁存段选数据delay(5);//第二位数码管P0 = 0xFF; //清楚断码	   WE = 1;//打开位选锁存器P0=0xFD;	 //1111 1101WE = 0; //锁存位选数据DU = 1;//打开段选锁存器P0=table[shi];DU = 0; //段选锁存,锁存段选数据delay(5);//第三位数码管P0 = 0xFF; //清楚断码	   WE = 1;//位选锁存器P0=0xFB;	 //1111 1101WE = 0; //锁存位选数据DU = 1;//打开段选锁存器P0=table[ge];DU = 0; //段选锁存,锁存段选数据delay(5);}void main() //main函数自身就会循环
{//动态扫描就需要循环显示,因此需要写到循环中while(1){display(236);}}

在这里插入图片描述

http://www.lryc.cn/news/539096.html

相关文章:

  • 代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!
  • 电脑系统损坏,备份文件
  • Token Statistics Transformer:线性注意力革命,重新定义Transformer效率天花板
  • Django 5实用指南(二)项目结构与管理
  • JAVA监听器(学习自用)
  • Ubuntu下mysql主从复制搭建
  • VirtualBox 中使用 桥接网卡 并设置 MAC 地址
  • Ubuntu 20 掉显卡驱动的解决办法
  • EasyPoi系列之框架集成及基础使用
  • Web后端 Tomcat服务器
  • 【RK3588嵌入式图形编程】-SDL2-构建模块化UI
  • 面向机器学习的Java库与平台简介、适用场景、官方网站、社区网址
  • 基于YOLO11深度学习的心脏超声图像间隔壁检测分割与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能
  • ubuntu24基于虚拟机无法从主机拖拽文件夹
  • 常用Webpack Loader汇总介绍
  • 剑指 Offer II 023. 两个链表的第一个重合节点
  • 个人搭建CDN加速服务 特网科技
  • 用deepseek学大模型08-卷积神经网络(CNN)
  • 蓝桥杯单片机基础部分——6、555定时器
  • Python学习心得函数
  • 神经网络实验——MLP
  • 配置Api自动生成
  • dify-AI 私有部署可修改前端页面
  • 使用 @Results 注解来手动指定字段映射
  • 数据治理中 大数据处理一般都遵循哪些原则
  • 从0到1:STM32温控系统开发踩坑指南
  • 修改时无条件,可以自定义id条件(通过查询)
  • 工业制造能耗管理新突破,漫途MTIC-ECM平台助力企业绿色转型!
  • 实现一个简单的协同过滤推荐算法
  • eNSP防火墙综合实验