1.数码管介绍
2.内部接线图
3.数码管引脚定义
4.驱动芯片74LS138
注意,数据存储时按CBA顺序从高位到低位,三位二进制数对应Y0-7口位0其余位为1,控制数字位置
74HC245
A0对应B0
根据原理图找到abcdefg dp的二进制数据赋给P0即可
5.模块化的代码
void shuma(int a,int b)
{
switch(a)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
switch(b)
{
case 0:P0=0x3F;break;
case 1:P0=0x06;break;
case 2:P0=0x5B;break;
case 3:P0=0x4F;break;
case 4:P0=0x66;break;
case 5:P0=0x6D;break;
}
}
6.演示代码(在数码管第一位显示1)
#include <REGX51.H>
void delay(int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms)
{
i=2;
j=239;
do
{
while(--j);
}while(--i);
xms=xms-1;
}
}
void shuma(int a,int b)
{
switch(a)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
switch(b)
{
case 0:P0=0x3F;break;
case 1:P0=0x06;break;
case 2:P0=0x5B;break;
case 3:P0=0x4F;break;
case 4:P0=0x66;break;
case 5:P0=0x6D;break;
}
}
void main()
{
while(1)
{
shuma(1,1);
}
}