先看原理图
上面的led灯(也就是P2)来控制灯的选择(因为只能选择一个)
控制灯的选择并不需要8个输入口来控制
用个三八译码器即可代替
上图极为138译码器
用P2的2,3,4来输入,输入的数字对应的10进制数代表选择的led灯编号 - 1
注意这里的顺序是4,3,2,也就是倒着来组成的
然后选择完灯了还要在相应的灯上面显示数字
左边的一列P0_0到P0_7就代表相应的格子
注意格子组成二进制数的顺序是从下到上的
下面是完整程序:
#include <at89c51RC2.h>
unsigned char arr[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char fun(unsigned char loc,num)
{
switch(loc)
{
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 = arr[num];
}
int main()
{
fun(6,3);
while(1);
// P2_4 = 0;P2_3 = 1;P2_2 = 0;
// P0 = 0xFF;
}
标签:P2,case,显示管,静态,P0,unsigned,break,数码,char From: https://www.cnblogs.com/rickly233/p/17365364.html