静态,是将7/8段数码管接口单独分开接在单片引脚上,而动态则是将abcdefg各段接在一起,接到单片机引脚。
动态利用了人眼的视觉暂留,并且需要消音的操作,否则会有重影。
#include "reg52.h"
#define SMG P0
char smg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管字库0-f字库
void main()
{
SMG=smg_code[0];//将数组第1个数据赋值给数码管段选口,显示0,或者用别的数据以显示别的
while(1)
{
}
}
#include#define SMG P0 sbit LEA=P2^2; sbit LEB=P2^3; sbit LEC=P2^4; typedef unsigned int u16; u16 smg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(char i) { while(i--); } void smg_display(void) { int a = 0; for(a=0;a<8;a++) { switch(a) { case 7:LEC=0;LEB=0;LEA=0;break; case 6:LEC=0;LEB=0;LEA=1;break; case 5:LEC=0;LEB=1;LEA=0;break; case 4:LEC=0;LEB=1;LEA=1;break; case 3:LEC=1;LEB=0;LEA=0;break; case 2:LEC=1;LEB=0;LEA=1;break; case 1:LEC=1;LEB=1;LEA=0;break; case 0:LEC=1;LEB=1;LEA=1;break; } SMG = smg_code[a]; // delay(10); SMG = 0x00; //消隐 } } void main() { while(1) { smg_display(); } }
其中74hc138为38译码器,进行选位,控制某一位数码管电平为低电平有效,其余为高电平。74hc245用以驱动数码管,因51主要是用于控制,驱动功率可能不足。
后续应该可以尝试用动态数码管添加相关内容进行计时的操作。后续再看



