51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)
- 其他
- 2025-08-31 21:03:02

接上篇的数码管静态显示,以下是接上篇介绍到的动态显示的原理。 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
文章目录 1. 数码管简单动态显示2. 数组的定义与引用3. 实现指定值的数码管动态显示 1. 数码管简单动态显示按照上面提到的原理,可以设计得到如下代码:
#include <reg52.h> #include <intrins.h> #define unit unsigned int #define uchar unsigned char 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--); } void main() //main函数自身就会循环 { //动态扫描就需要循环显示,因此需要写到循环中 while(1) { //第一位数码管 P0 = 0xFF; //清楚断码 WE = 1; //打开位选锁存器 P0=0xFE; //1111 1110 WE = 0; //锁存位选数据 DU = 1;//打开段选锁存器 P0=0xFD;//1111 1101 DU = 0; //段选锁存,锁存段选数据 dely(5); //第二位数码管 P0 = 0xFF; //清楚断码 WE = 1;//打开位选锁存器 P0=0xFD; //1111 1101 WE = 0; //锁存位选数据 DU = 1;//打开段选锁存器 P0=0x5B; //0101 1011 DU = 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 1110 WE = 0; //锁存位选数据 DU = 1;//打开段选锁存器 P0=table[bai]; DU = 0; //段选锁存,锁存段选数据 delay(5); //第二位数码管 P0 = 0xFF; //清楚断码 WE = 1;//打开位选锁存器 P0=0xFD; //1111 1101 WE = 0; //锁存位选数据 DU = 1;//打开段选锁存器 P0=table[shi]; DU = 0; //段选锁存,锁存段选数据 delay(5); //第三位数码管 P0 = 0xFF; //清楚断码 WE = 1;//位选锁存器 P0=0xFB; //1111 1101 WE = 0; //锁存位选数据 DU = 1;//打开段选锁存器 P0=table[ge]; DU = 0; //段选锁存,锁存段选数据 delay(5); } void main() //main函数自身就会循环 { //动态扫描就需要循环显示,因此需要写到循环中 while(1) { display(236); } }51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)”