下面这个程序,红字部分有点问题,也就是,我用p10口的0,1,2作为刷屏幕用的,3号管脚用来做控制指示灯,但是因为我是直接这样赋值:P10OUT=Addr,所以实际上每次赋值都会写第三号引脚,刷屏幕不停的写寄存器,就不停的写。这是不想要的结果。所以我想,怎么赋值才能只更改 P10OUT的后3位的值。我自己改了一个版本的,但是嫌太繁琐了,影响刷屏的速率。
void write_reg(uchar Addr,uchar Data)
{
P5OUT|=BIT4; //RD=1
P5OUT&=~BIT1; //片选有效
P10DIR|=BIT0+BIT1+BIT2;
P10OUT=Addr;
P4OUT=Data; //写数据
P5OUT&=~BIT5; //写有效
P5OUT|=BIT5; //写撤销
P5OUT|=BIT1; //片选无效
}
我自己改的:
void write_reg(uchar Addr,uchar Data)
{
P5OUT|=BIT4; //RD=1
P5OUT&=~BIT1; //片选有效
P10DIR|=BIT0+BIT1+BIT2;
Addr=Addr&0x7+(P10OUT&BIT3);//这样写寄存器时平P10.3不改变,P10的0、1、2根据 Addr改变,实现了只改变P10后3位
P10OUT=Addr
P4OUT=Data; //写数据
P5OUT&=~BIT5; //写有效
P5OUT|=BIT5; //写撤销
P5OUT|=BIT1; //片选无效
}
有没有更加简洁的赋值方式,只改变后三位。 |