大家好,这里是蓝影DIY电路。
这里采用的是protues软件对51单片机进行仿真,代码是利用keil进行编程,其语法格式为C语言。
如果不懂protues软件如何安装的可以看我上期视频。
主要实现:让数码管动态扫描显示0~7。
核心代码:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//段码表
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//位码表
uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//延时
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i,j;
while(1)
{
for(i=0;i<30;i++)
{
for(j=0;j<8;j++)
{
P0=0xff;
P0=DSY_CODE[j]; //发送段码
P2=DSY_IDX[j]; //发送位码
DelayMS(5);
}
}
P2=0x00; //关闭所有数码管并延时
DelayMS(10);
}
}
总结:
本次实验最主要是利用视觉暂留,让每个字符快速闪烁显示,从而看起来好像如同时显示一般。
程序中段码表与位码表用来控制显示的位置与显示的数值。
注意电路中数码管左边的字母端是用来显示字符,而右边的数字端是用来选择哪一个数码管进行显示。
P2口数字端的三极管最主要的作用是用来进行扩流从而提高单片机的带负载能力。
数码管引脚图
数码管其实只是多个LED二极管灯按照特定的顺序排律组合而成,同时因为不同公共端接法分为两种属性:共阴极(公共端接地),共阳极(公共端接5V电源)。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。可以看出两个编码的各位正好相反。如下图。