要理解数码管的显示,我们先理解其原理,我们先看它的原理图。
原理图中com引脚是表示选择数码管的位,a1- dp1是表示选择数码管的段。
void ShowSMG(unsigned int value,unsigned int pos)
{
InitHC138(6);
P0=0x01<<pos;
InitHC138(7);
P0=value;
}
该段代码是表示要选择哪一位数码管亮,并且使其表示相应的数据。选通573锁存器6通道后,表示进行选择数码管的位操作,对P0口赋值0x01<<pos,是利用余辉效应使得人眼反应不过来,人眼看到的都是亮的。之后选通7,对相应的数码管进行段选赋值。
之后就可以随意让数码管表示数据了。例如,我们表示一个日期。
void SMG()
{
ShowSMG(SMG_duanma[2],0);
Delay(500);
ShowSMG(SMG_duanma[0],1);
Delay(500);
ShowSMG(SMG_duanma[2],2);
Delay(500);
ShowSMG(SMG_duanma[3],3);
Delay(500);
ShowSMG(SMG_duanma[16],4);
Delay(500);
ShowSMG(SMG_duanma[16],5);
Delay(500);
ShowSMG(SMG_duanma[0],6);
Delay(500);
ShowSMG(SMG_duanma[4],7);
Delay(500);
}
接下来,看完整的代码。
#include<stc15f2k60s2.h>
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void InitHC138(unsigned int n)
{
switch(n)
{
case 4:
HC138_C=1;
HC138_B=0;
HC138_A=0;
break;
case 5:
HC138_C=1;
HC138_B=0;
HC138_A=1;
break;
case 6:
HC138_C=1;
HC138_B=1;
HC138_A=0;
break;
case 7:
HC138_C=1;
HC138_B=1;
HC138_A=1;
break;
}
}
void Delay(unsigned int t)
{
while(t--);
}
void jing()
{
InitHC138(5);
P0=0x00;
}
void ShowSMG(unsigned int value,unsigned int pos)
{
InitHC138(6);
P0=0x01<<pos;
InitHC138(7);
P0=value;
}
void SMG()
{
ShowSMG(SMG_duanma[2],0);
Delay(500);
ShowSMG(SMG_duanma[0],1);
Delay(500);
ShowSMG(SMG_duanma[2],2);
Delay(500);
ShowSMG(SMG_duanma[3],3);
Delay(500);
ShowSMG(SMG_duanma[16],4);
Delay(500);
ShowSMG(SMG_duanma[16],5);
Delay(500);
ShowSMG(SMG_duanma[0],6);
Delay(500);
ShowSMG(SMG_duanma[4],7);
Delay(500);
}
void main()
{
jing();
while(1)
{
SMG();
}
}