[PIC®/AVR®/dsPIC®产品] 关于寄存器映射问题,实在整不过去了

[复制链接]
 楼主| 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 | 显示全部楼层
没想到好的办法,但是也找到了可行的方法,如下:
  1. typedef union{
  2.         struct{
  3.                 a        :1;
  4.                 b        :1;
  5.                 c        :1;
  6.                 d        :1;
  7.                 e        :1;
  8.                 f        :1;
  9.                 g        :1;
  10.                 p        :1;
  11.         }bits;
  12.         u8 byte;
  13. }ledDef;

  14. ledDef led1;

  15.         lcd_init();

  16.         led1.byte = ledTable[4];
  17.         SEG5COM2 = led1.bits.a;
  18.         SEG5COM1 = led1.bits.b;
  19.         SEG5COM3 = led1.bits.c;
  20.         SEG4COM3 = led1.bits.d;
  21.         SEG4COM0 = led1.bits.e;
  22.         SEG4COM1 = led1.bits.f;
  23.         SEG5COM0 = led1.bits.g;
如果有好的方法,大家可以讨论一下。
lanmp 发表于 2014-7-22 22:19 | 显示全部楼层
我以为你说的“整体赋值”是用一条指令完成
 楼主| aoshi0603 发表于 2014-7-22 22:53 | 显示全部楼层
lanmp 发表于 2014-7-22 22:19
我以为你说的“整体赋值”是用一条指令完成

差不多,就像是用union定义ADC转结果一样。我没有找到好的方法,我上面的方法有些笨,还要自已一一对应。
yklstudent 发表于 2014-7-23 00:34 | 显示全部楼层
那不如一个函数操作赋值好了
yewuyi 发表于 2014-7-23 10:29 | 显示全部楼层
无法整体赋值,还是得一位位来。

除非你开屏的时候,就按照那个LCD驱动脚位定义
xlsf1048 发表于 2014-7-23 11:14 | 显示全部楼层
4#分层思想
xjjspace 发表于 2014-7-23 17:06 | 显示全部楼层
我之前遇到的是A寄存器的4位和B寄存器的4位连接屏,控制也是分两次给的,你这个最少要4次吧,只能分开给了。建议硬件连接上能改的话改一下,不要搞这么多。
ayb_ice 发表于 2014-7-28 11:08 | 显示全部楼层
可以,也是假的

打包在U32或U64中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

113

帖子

3

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