1.静态数码管显示
对数码管所在管口输入,然后根据二进制计算出6的二进制对应输入101,数码管中输入引脚是7D,这里需要有数码管的显示位置的管口参照,不同单片机可能不同
#include
void main()
{
P2_4=1;
P2_3=0;
P2_2=1;
P0=0x7D;//显示数字6
while(1)
{
}
}
由于引脚冲突,led也会亮
然后设置函数。用Switch来定义所有的输入
#include
void Num(unsigned char Location,Number)
{
switch(Location)
{
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;
}
P0=0x7D;
}
void main()
{
Num(6);
while(1)
{
}
}
也可以对数字进行设置,在上面的代码中,number没有定义,所以还是显示6
可以用数组的形式,对每个数字的显示形式放在数组中,在函数中调用
#include
char NumTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x07,0x7F};
void Num(unsigned char Location,Number)
{
switch(Location)
{
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;
}
P0=NumTable[Number];
}
void main()
{
while(1)
{Num(4,2);
}
}
2.动态数码管显示
加入延迟函数,不然的话在显示上会有重影,对应位置的显示,也可以用循环语句
#include
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{i = 12;
j = 169;
do
{
while (--j);
} while (--i);}
}
char NumTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x07,0x7F};
void Num(unsigned char Location,Number)
{
switch(Location)
{
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;
}
P0=NumTable[Number];
}
void main()
{
while(1)
{ Num(1,1);
Delay(200);
Num(2,2);
Delay(200);
Num(3,3);
Delay(200);
}
}