*觉得有用有帮助的评论下,谢谢~
静态数码管实则就与8个LED小灯一样,想要显示什么数值,点亮对应的段即可!
如图,(a)dp~a对应着从二进制的低位到高位,如若要显示
0
,则对应的管脚电平为0011 1111
(共阴) (b) 则是数码管的两个类型,左侧的为共阴数码管,右侧的为共阳数码管
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴
注:共阳的取反一下就好
效果:依次显示0~F
#include
#define u8 unsigned char
u8 code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴
void delay700ms(void);
int i;
void main()
{
//P0=~smg[9]; //只显示一个数字
//while(1);
for(i=0;i<17;i++) //依次显示0~F
{
P0=~smg[i];
delay700ms();
}
}
void delay700ms(void) //误差 -0.000000000159us
{
unsigned char a,b,c;
for(c=173;c>0;c--)
for(b=162;b>0;b--)
for(a=10;a>0;a--);
}
动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。
通过控制 J16来控制8个数码管哪个亮哪个灭,在由IO口输给数码管位选,控制显示什么数值。
若要8个数码管同时显示,可依次点亮八个数码管,数码管切换间用少许延时,利用视觉残留,来看起来是同时显示。
用芯片控制COM口的电平,可更为简单的显示动态数码管,而这里就用到74HC138
(38译码器)
A、B、C
进行输入,控制输出端Y0~Y7
,看图逻辑运算有点复杂,我们可直接看数据手册里的真值表,而我们的程序也是根据真值表来写的。
效果:在8个数码管上显示0~7
#include "reg52.h"
#include "intrins.h"
#define u8 unsigned char
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的值
void delay1ms (void);
void Dtsmg()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0; LSB=0; LSC=0; break;//显示第0位
case(1):
LSA=1; LSB=0; LSC=0; break;//显示第1位
case(2):
LSA=0; LSB=1; LSC=0; break;//显示第2位
case(3):
LSA=1; LSB=1; LSC=0; break;//显示第3位
case(4):
LSA=0; LSB=0; LSC=1; break;//显示第4位
case(5):
LSA=1; LSB=0; LSC=1; break;//显示第5位
case(6):
LSA=0; LSB=1; LSC=1; break;//显示第6位
case(7):
LSA=1; LSB=1; LSC=1; break;//显示第7位
}
P0=smgduan[i];//给P0段码数据
delay1ms(); //延时,视觉残留
P0=0x00; //对P0口清零,全灭消隐
}
}
void main()
{
while(1)
{
Dtsmg();
}
}
void delay1ms(void) //误差 -0.651041666667us
{
unsigned char a,b;
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
code
把数码管的段码储存在code中,可减小文件的大小,毕竟单片机的容量也才几K而已
要注意的是,一定要消影,下面就是有消影和无消影的效果
都正常显示,除数值外的数码管段位都是灭的
如图,除了数值显示外,其余的数码管段位也点亮了,只是比较暗
我们也可以让数码管显示我们想要的数值
我们只要把数码管的段选值改成自己想显示的数值即可
u8 code smgduan[17]={0x6d,0x5b,0x3f,0x06,0x4f,0x06,0x66,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示5201314
就像这样
没毛病,工科男的情调没人懂~~~
https://fxhao.github.io/
这是我的GitHub博客~