单片机引脚设置问题

[复制链接]
1593|1
 楼主| baidudz 发表于 2011-12-26 18:45 | 显示全部楼层 |阅读模式
下面这个程序,红字部分有点问题,也就是,我用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; //片选无效  
  }

有没有更加简洁的赋值方式,只改变后三位。
gxgclg 发表于 2011-12-26 18:55 | 显示全部楼层
如果多几个语句就影响刷屏的速率,lz 的刷屏也太快了,眼睛能跟上吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部