对于我以前学习过的东西以周记的形式进行总结整理! 上面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当然也可以显示不一样的,原理都一样 参数改变 显示效果也不一样!