今天我们来聊聊电路板上引脚错位应该怎么办,
我们不必更换板子,只要程序稍作改动即可。
好了,废话不多说,看题。
注意观察,AT89S51的引脚P24和P25换位置了,那正常显示0~9应该怎么办呢?
直接上代码讲解
最关键的一步P2怎么写
P2=(((dsn[x])/64)*64)+(dsn[x])/32)%2)*16+((dsn[x])/16)%2)*32)+dsn[x]%16;
(dsn[x])/64)*64 /64是指要取最高位 *64是指最高位的位置不变
(dsn[x])/32)%2)*16 /32 取第六位 *16把它移到第五位
(dsn[x])/16)%2)*32) /16 取第五位 *16把它移到第六位
dsn[x]%16 取低四位不变
因为这一题是五六两个换位置了,我们只要把它们错位一下就OK啦
那现在,我说P23和P24错位,你会怎么写?
(((dsn[x])/64)*64)+(dsn[x])/32)*32)+(dsn[x])/16)%2)*8+(dsn[x])/8)%2)*16) +dsn[x]%8
知道为什么吗?保持最高两位不变,低三位不变,P23和P24交换一下位置就好了嘛,言简意赅。
我们来看看有没有实现预期结果。
好了,我们已经实现了0~9的正序,没有受到引脚错位而影响。
代码给你
#include <reg52.h>
int i,cou;
int y;
void display(unsigned int x);
void delay(unsigned int x);
unsigned char code dsn[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
void main(void)
{
while(1)
{
display(i);
i=(i+1)%10;
delay(50000);
}
}
void display(unsigned int x)
{
P2=(((dsn[x]/64)*64)+((dsn[x]/32)%2)*16+(((dsn[x]/16)%2)*32)+dsn[x]%16);
}
void delay(unsigned int x)
{
while(x--);
}
可以自己试一试,错位就换位好了。