分为段码(a,b,c,d,e,f,g,dp)和公共端
可理解为P0口直接控制这个端口了
公共端由Y6控制 。
Y7控制段码,Y6控制公共端
例题:让第一个数码管显示数字6
#include "reg52.h"
unsigned char code SMDD_duanma[18]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void HC138init(unsigned char i)
{
switch(i)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void ShowSMG()
{
HC138init(6);
P0=0x01;
HC138init(7);
P0=0x82;
}
void main()
{
ShowSMG();
while(1)
{
}
}
所有数码管循环播放6
#include "reg52.h"
unsigned char code SMDD_duanma[18]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void delay(unsigned int t)
{
while(t--);
while(t--);
}
void HC138init(unsigned char i)
{
switch(i)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void ShowSMG_Bit(unsigned char dat,unsigned char pos)
{
HC138init(6);
P0=0x01<<pos;
HC138init(7);
P0=dat;
}
void SMG_Static()
{
unsigned char i;
for(i=0;i<8;i++)
{
ShowSMG_Bit(SMDD_duanma[6],i);
delay(60000);
}
}
void main()
{
HC138init(5);
P0=0x00;
HC138init(4);
P0=0xff;
while(1)
{
SMG_Static();
}
}
每个数码管输出0-9:
#include "reg52.h"
unsigned char code SMDD_duanma[18]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void delay(unsigned int t)
{
while(t--);
while(t--);
}
void HC138init(unsigned char i)
{
switch(i)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void ShowSMG_Bit(unsigned char dat,unsigned char pos)
{
HC138init(6);
P0=0x01<<pos;
HC138init(7);
P0=dat;
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<10;j++)
{
ShowSMG_Bit(SMDD_duanma[j],i);
delay(60000);
}
}
}
void main()
{
HC138init(5);
P0=0x00;
HC138init(4);
P0=0xff;
while(1)
{
SMG_Static();
}
}
例题:8个数码管分别单独依次显示0-9的值,然后所有数码管一起显示同时显示0-F的值。
#include "reg52.h"
unsigned char code SMDD_duanma[18]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void delay(unsigned int t)
{
while(t--);
while(t--);
}
void HC138init(unsigned char i)
{
switch(i)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void ShowSMG_Bit(unsigned char dat,unsigned char pos)
{
HC138init(6);
P0=0x01<<pos;
HC138init(7);
P0=dat;
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<10;j++)
{
ShowSMG_Bit(SMDD_duanma[j],i);
delay(60000);
}
}
for(j=0;j<16;j++)
{
HC138init(6);
P0=0xff;
HC138init(7);
P0=SMDD_duanma[j];
delay(60000);
}
}
void main()
{
HC138init(5);
P0=0x00;
HC138init(4);
P0=0xff;
while(1)
{
SMG_Static();
}
}