标题: 关于结构体问题的求解 [打印本页]

作者: 宏达工控    时间: 2025-8-6 12:14
标题: 关于结构体问题的求解
union BUTE

    {
    unsigned char BYTE;
        
    struct
    {               
        unsigned char p54:1;
        unsigned char p55:1;  //变量名p54、p55、p32等通常对应单
        unsigned char p32:1;
        unsigned char p33:1;
        unsigned char p34:1;
        unsigned char p35:1; //bit5
       unsigned char p36:1;
        unsigned char p37:1; //bit7
            
        } BIT;
} zhdat;
void showNumber(unsigned char n)
        {
    if(n > 9) return;  // 仅处理0~9
    zhdat.BYTE = digitCode[n];  // 整体赋值段码,控制所有段
        }
********
zhdat.BYTE = digitCode[n];  这里KELL调试zhdat.BYTE=0X6d  bit=unino{ P54=0X01 P55=0X00 P32=0X0133=01 34=00 35=01 36=01 37=00}可是反应到端口没有变化
作者: xiaobendan001    时间: 2025-8-6 13:56
你的意思是把BYTE的内容直接映射到引脚上?感觉这样操作能行?
作者: 宏达工控    时间: 2025-8-7 09:38
问题以解决,结帖:解决办法 // 将位域值写入实际端口寄存器
    P5 = (P5 & ~0x30) | ((zhdat.BIT.p55 << 5) | (zhdat.BIT.p54 << 4)); // 操作P5.4和P5.5
    P3 = (P3 & ~0xFC) | ((zhdat.BIT.p37 << 7) | (zhdat.BIT.p36 << 6) |
                        (zhdat.BIT.p35 << 5) | (zhdat.BIT.p34 << 4) |
                        (zhdat.BIT.p33 << 3) | (zhdat.BIT.p32 << 2)); // 操作P3.2-P3.7
作者: 天ノ忆    时间: 2025-8-12 10:49
不用这么麻烦,你把结构体映射到对应的地址就可以了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1