在学习嵌入式系统时,我们经常会使用到单片机,而51单片机是其中的一种。数码管则是单片机中输出数据常用的一种显示器件,是一类普遍应用于计数显示、温度、电压、频率等各种量的显示的器件。那么,51单片机数码管英文简称为“Seven Segment Display”,常缩写为“SSD”,意为“七段显示器”,通常可以显示0~9和A~F十六个字符。
除了常规的七段数码管外,还有许多其他种类的数码管,例如八段数码管、点阵数码管、矩阵数码管等。这些不同种类的数码管都有其各自的特点和优点。在51单片机中,我们常使用的是12个引脚的共阳极七段数码管,其原理是控制七段数码管12个引脚的高低电平,以控制数码管中每个小灯的亮灭。
此外,这种七段数码管还有不同颜色的LED,如红色、黄色、绿色等,可按不同的显示要求进行选择使用。
在使用数码管时,我们不仅可以直接显示数字和字符,还能够通过控制数码管的显示方式,来实现一些功能。例如,可以通过数码管连续显示各个数字和字母,来显示单片机执行程序的运行情况;也可以通过数码管的闪烁、滚动等方式来显示诸如计时、温度、风速等的数据。此外,数码管还可与其他模块相结合,实现复杂的功能。
以下是一个简单的示例,在51单片机中通过数码管显示数字:
首先,声明要使用的引脚及数据类型:
sbit SMG_P2_0 = P2^0; //控制数码管1引脚
sbit SMG_P2_1 = P2^1; //控制数码管2引脚
sbit SMG_P2_2 = P2^2; //控制数码管3引脚
sbit SMG_P2_3 = P2^3; //控制数码管4引脚
sbit SMG_P2_4 = P2^4; //控制数码管5引脚
sbit SMG_P2_5 = P2^5; //控制数码管6引脚
sbit SMG_P2_6 = P2^6; //控制数码管7引脚
sbit SMG_DA = P0^0; //控制数码管段选引脚
sbit SMG_WEI = P0^1; //控制数码管位选引脚
int number = 1234567; //声明要显示的数字
接下来,定义数字和字符对应的段选代码:
unsigned char smgzm[16]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
最后,利用循环控制每个数码管的位选并显示数字:
void dig_display()
unsigned char i;
while(1)
{
for(i=0;i<7;i++)
{
switch(i)
{
case(0):SMG_P2_0=0;SMG_P2_1=1;break;
case(1):SMG_P2_1=0;SMG_P2_2=1;break;
case(2):SMG_P2_2=0;SMG_P2_3=1;break;
case(3):SMG_P2_3=0;SMG_P2_4=1;break;
case(4):SMG_P2_4=0;SMG_P2_5=1;break;
case(5):SMG_P2_5=0;SMG_P2_6=1;break;
case(6):SMG_P2_6=0;SMG_P2_0=1;break;
}
SMG_DA = smgzm[number%10]; //数据段选,获取当前数字对应的段选代码
SMG_WEI = ~(1<
delay_ms(1);
SMG_WEI=0xff; //将位选清零
number/=10; //准备显示下一位数字
}
}