上面unsigned char code table【】我之前没有搞注释,现在解释一下unsigned char是数组类型 code是编码的意识 table是数组名 【】里的是显示数字的控制发光二极管的编码从左到右分别是1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
会了一个数码管之后就要弄八个数码管或者六个数码管甚至更多 我就举最有代表的时钟六位数码管显示。当数码一多,就要分别控制每个数码管 这就要用到另一个I/O控制口P2,控制方法和数码管一样,就是把六个数码管看成是六个二极管,通过控制共阴或者共阳端的电位高低来控制数码管的亮灭!
#include<reg51.h> //51系列单片机头文件
#define uchar unsigned char //宏定义
uchar code table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/***************************数码管扫描延时****************************/
void delays(void)
{
uint i,j;
for(i=0;i<2;i++)
for(j=0;j<110;j++);
}
void main(void)
{
P0=table [1];
P2=0xfd;
delays();
P0=table [2];
P2=0xfe;
delays();
P0=table [3];
P2=0xf7;
delays();
P0=table [4];
P2=0xfb;
delays();
P0=table [5];
P2=0xdf;
delays();
P0=table [6];
P2=0xef;
delays();
while(1)
} 显示的效果就是012345这是静态显示 如果是你想要动态显示在上面的程序里用一个for循环语句table【】内用字母或简单运算表示
简单举例:
#include<reg51.h> //51系列单片机头文件
#define uchar unsigned char //宏定义
uchar code table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/***************************数码管扫描延时****************************/
void delays(void)
{
uint i,j;
for(i=0;i<2;i++)
for(j=0;j<110;j++);
}
void main( )
{ uchar i;
while(1)//无限循环语句
{
For(i=0;i<9;i++)//循环语句
{ if(i==9) //选择语句
{
i=0;
}
P0=table [ i];
P2=0xfd;
delays();
P0=table [ i];
P2=0xfe;
delays();
P0=table [ i];
P2=0xf7;
delays();
P0=table [ i];
P2=0xfb;
delays();
P0=table [ i];
P2=0xdf;
delays();
P0=table [ i];
P2=0xef;
delays();
}
}
} 显示效果是不断循环显示000000、111111、222222、~~~、999999当然也可以显示不一样的,原理都一样 参数改变 显示效果也不一样!