打印
[PIC®/AVR®/dsPIC®产品]

关于寄存器映射问题,实在整不过去了

[复制链接]
2320|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoshi0603|  楼主 | 2014-7-22 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是4个寄存器的7个位,对应段式液晶一个数码管的7段,如何整体赋值?
就像传统方法一样:xxx=table[n],还请会的大侠明示代码,union,struct我都试了,没整出来。

SEG5COM2 = 1;//a
SEG5COM1 = 1;//b
SEG5COM3 = 1;//c
SEG4COM3 = 1;//d
SEG4COM0 = 1;//e
SEG4COM1 = 1;//f
SEG5COM0 = 1;//g

着急,在线等哈!!!

沙发
lanmp| | 2014-7-22 21:00 | 只看该作者
这是在一个字节中的7个Bit么?如果不是,那就不能一起赋值。

使用特权

评论回复
板凳
aoshi0603|  楼主 | 2014-7-22 21:11 | 只看该作者
lanmp 发表于 2014-7-22 21:00
这是在一个字节中的7个Bit么?如果不是,那就不能一起赋值。

这7个位,分别位于4个寄存器中,我总是感觉能实现的。。。哈

使用特权

评论回复
地板
aoshi0603|  楼主 | 2014-7-22 22:05 | 只看该作者
没想到好的办法,但是也找到了可行的方法,如下:
typedef union{
        struct{
                a        :1;
                b        :1;
                c        :1;
                d        :1;
                e        :1;
                f        :1;
                g        :1;
                p        :1;
        }bits;
        u8 byte;
}ledDef;

ledDef led1;

        lcd_init();

        led1.byte = ledTable[4];
        SEG5COM2 = led1.bits.a;
        SEG5COM1 = led1.bits.b;
        SEG5COM3 = led1.bits.c;
        SEG4COM3 = led1.bits.d;
        SEG4COM0 = led1.bits.e;
        SEG4COM1 = led1.bits.f;
        SEG5COM0 = led1.bits.g;
如果有好的方法,大家可以讨论一下。

使用特权

评论回复
5
lanmp| | 2014-7-22 22:19 | 只看该作者
我以为你说的“整体赋值”是用一条指令完成

使用特权

评论回复
6
aoshi0603|  楼主 | 2014-7-22 22:53 | 只看该作者
lanmp 发表于 2014-7-22 22:19
我以为你说的“整体赋值”是用一条指令完成

差不多,就像是用union定义ADC转结果一样。我没有找到好的方法,我上面的方法有些笨,还要自已一一对应。

使用特权

评论回复
7
yklstudent| | 2014-7-23 00:34 | 只看该作者
那不如一个函数操作赋值好了

使用特权

评论回复
8
yewuyi| | 2014-7-23 10:29 | 只看该作者
无法整体赋值,还是得一位位来。

除非你开屏的时候,就按照那个LCD驱动脚位定义

使用特权

评论回复
9
xlsf1048| | 2014-7-23 11:14 | 只看该作者
4#分层思想

使用特权

评论回复
10
xjjspace| | 2014-7-23 17:06 | 只看该作者
我之前遇到的是A寄存器的4位和B寄存器的4位连接屏,控制也是分两次给的,你这个最少要4次吧,只能分开给了。建议硬件连接上能改的话改一下,不要搞这么多。

使用特权

评论回复
11
ayb_ice| | 2014-7-28 11:08 | 只看该作者
可以,也是假的

打包在U32或U64中

使用特权

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

本版积分规则

6

主题

113

帖子

3

粉丝