注:所有图片均来自于B站小蜜蜂老师的视频
一、题目要求
二、分析
1.数码管的引脚可以划分为段码和公共端两个部分,由图可知段码引脚(a1~dp1)的输入与Y7C有关,公共端引脚(com1~com4)与Y6C有关
2.如何显示数字?
共阳数码管,数码管阳极相连,阴极输入低电平数码管亮起,输入高电平数码管熄灭
三.代码实现
74HC138真值表
case 6:
P2=(P2&0x1f)|0xc0;
将P25~P27分别置为011,输出Y6,控制Y6C
case 7:
P2=(P2&0x1f)|0xe0;
将P25~P27分别置为111,输出Y7,控制Y7C
void ShowSMG_Bit(unsigned char dat,unsigned pos)
{
InitHC138(6);
P0=0x01<<pos;//数码管点亮的位置向右移动
InitHC138(7);//数码管的内容
P0=dat;
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)//共八个数码管
{
for(j=0;j<10;j++)//八个数码管依次显示0~9
{
ShowSMG_Bit(SMG_duanma[j],i);
Delay(60000);
}
}
for(j=0;j<16;j++)//共16个值,依次显示0~F
{
InitHC138(6);
P0=0xff;//选中所有com
InitHC138(7);
P0=SMG_duanma[j];//依次显示0~F
}
}
四、完整代码
#include "reg52.h"
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 Delay(unsigned int t)
{
while(t--);
while(t--);
}
void InitHC138(unsigned char n)
{
switch(n)
{
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void ShowSMG_Bit(unsigned char dat,unsigned pos)
{
InitHC138(6);
P0=0x01<<pos;
InitHC138(7);
P0=dat;
}
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<10;j++)
{
ShowSMG_Bit(SMG_duanma[j],i);
Delay(60000);
}
}
for(j=0;j<16;j++)
{
InitHC138(6);
P0=0xff;
InitHC138(7);
P0=SMG_duanma[j];
}
}
void main()
{
while(1)
{
SMG_Static();
}
}