学习C51单片机——静态数码管显示数字(学习笔记Keil5)
1、74HC138译码器
74HC138译码器是一种三通道输入、八通道输出的译码器,对应编码规则如下,A、B、C输入对应输出
A | B | C | Y0 | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 | Y7 |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2、控制数码管显示数字原理
位码输出
74HC138译码器输入A、B、C数值选择相应位码输出,可以选择相应的数码管
段码输出
unsigned char shuzi[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//对应输出0~9
3、在数码管的第3位置显示5
#include <REGX52.H>
//数码管段码表
unsigned char shuzi[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main()
{
while(1)
{
P2_4=1;P2_3=0;P2_2=1;//选择第3位数码管
P0=shuzi[5];//数码管显示数字5
}
}
4、控制数码管任意位置显示数字
#include <REGX52.H>
unsigned char shuzi[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管段码表,显示数字0~9
void weizhi(unsigned char i,number)
{
switch(i)//位选
{
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=shuzi[number]; //段选
}
void main()
{
weizhi(5,2);
//调用函数在数码管的第5位置显示2,可以任意改写位置及数字
while(1)
{
}
}