打印

单片机引脚设置问题

[复制链接]
899|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

粉丝