首先说一下数码管,其实就是7个led灯,加上一个小数点正好8位,和51单片机的一个端口连接。

使不同的灯亮起,就可以实现显示0到9这几个数字。



以上都是图片,下面把对应的值给到大家,0到9的十六进制值复制粘贴就好了:{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
下面说一下数码管的静态显示(下一篇说动态显示)

接下来就实际操作一下,打开proteus,如图导入元器件并连线,数码管搜索SEG。

下面就是编写c文件,之后编译,源码和注释看下面:
#include"reg51.h"
unsigned char dat[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
// 点 g f e d c b a
// 显示0 0 1 1 1 1 1 1 除了点和g不亮其他的灯都亮就是0。 十六进制就是0x3f
// 显示1 0 0 0 0 1 1 0 只有b和c亮,其他的都不亮。 十六进制就是0x06
// 按照上面的方式依次类推得到 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
void delay(unsigned int n){ //延时函数 不是很精确
unsigned int i=0, j=0;
for(i=0; i<n; i++){
for(j=0; j<120; j++);
}
}
void seg(){ // 自己命名的子函数,proteus中数码管叫seg,我这里就取名叫seg好了
unsigned int i;
for(i=0; i<10; i++){ // 循环10次,得到i的值从0到9都能取到
P2=dat[i]; // 51单片机的P2口得到的值就是数组dat中的每一个值,也就是从0到9分别亮
delay(500); // 延时, 由于单片机的运行速度太快,所以要加延时,也就是等一会,不然人眼看不到
}
}
void main(){ // 主函数 加一个无限循环 只调用了子函数seg
while(1){
seg();
}
}
最后打开proteus把生成的hex文件导入,模拟仿真就可以看到从0到9不停地显示数字了
