打印

C语言中能单独对高四位或低四位操作吗?

[复制链接]
5565|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cw8096|  楼主 | 2007-4-30 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例如循环移位,加一减一等.而其他四位不动.搞LED点阵,STC的片子20脚,只有三只脚控制行选,用了个三八译码器74LS138.用C语言编程的时候有些不方便,想用循环使行加一.它连的是2.4,2.5和2.6.怎么搞呢?

相关帖子

沙发
turmary| | 2007-5-1 13:21 | 只看该作者

没什么.

BYTE i2;

i2 = P2 >> 4;
i2 = (++i2 & 0x7) << 4;
P2 = i2 | (P2 & 0x8F);

使用特权

评论回复
板凳
computer00| | 2007-5-2 13:28 | 只看该作者

用位段试试

使用特权

评论回复
地板
cw8096|  楼主 | 2007-5-5 19:57 | 只看该作者

C语言能表示一个字的第几个字节吗?

象表达单片机端口一样,sbit P2_4=P2^4;象这样,那**作就方便了.
实现下面的东西:
int temp;
temp_4=P2_6;
temp_5=P2_5;
temp_6=P2_4;
temp=temp>>1;
temp=temp+1;
temp=<<1;
P2_6=temp_4;
P2_5=temp_5;
P2_4=temp_6;
这样编译一定通不过,因为它不认识temp_4是什么东西,即使定义了恐怕也行,因为一个数必竟不是单片机端口.
我发现它的P2_4代表的最低位,P2_6代表最高位,所以才要搞上面那堆东西,真烦.这硬件设计的...
我学点东西总爱钻入牛角尖.没办法.

使用特权

评论回复
5
cw8096|  楼主 | 2007-5-5 20:00 | 只看该作者

用位段没法进行运算

我定义了一个位域bs,再定义一个bs结构的东西BIT,再进行BIT=BIT+1时不行了.编译通不过.

使用特权

评论回复
6
happystar| | 2007-5-5 21:14 | 只看该作者

re

把int temp;改为 int bdata temp;
类似的 temp_4 = temp^4;
.......................
temp=<<1;这句本身就是错误的.改为temp <<= 1;

使用特权

评论回复
7
turmary| | 2007-5-5 21:57 | 只看该作者

位段是这样儿用的.

#include <reg51.h>

union {
    struct {
        unsigned char low:4;
        unsigned char high:4;
    }bits;
    unsigned char bytes;
}bs;


void main() {
    unsigned char i2;

    P2 = 0x7B;

    //方法一
    i2 = P2 >> 4;
    i2 = (++i2 & 0x7) << 4;
    P2 = i2 | (P2 & 0x8F);


    P2 = 0x7B;
    //方法二
    bs.bytes = P2;
    bs.bits.high++;    //高四位加1,低四位不变
    P2 = bs.bytes;

    while (1);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

16

帖子

0

粉丝