你从未遇到的的MSP430位操作问题

[复制链接]
5517|30
 楼主| windhood911 发表于 2012-8-17 10:39 | 显示全部楼层 |阅读模式
我在使用MSP430F169的做一个OCM240128的lcd显示的时候,发现lcd的8位数据线并不是接430的同一个Px口上,这样在写程序的时候非常麻烦,能不能有什么方法把不在同一Px口上的8个管教宏定义成一个data,写程序时候能直接对data进行操作的?请教高人指点!
peter_zheng 发表于 2012-8-17 22:49 | 显示全部楼层
1# windhood911 你在做硬件设计的时候就可以考虑到,如果没接在一个Px上,那么就只有单个操作,你也可以把不同的口,定义在一个结构体里
 楼主| windhood911 发表于 2012-8-18 10:58 | 显示全部楼层
嗯,首先谢谢你的回复,的确是在硬件设计的时候没经验,当时没想这么多,写程序的时候才发现这个问题,也考虑用结构体来解决,但结构体变量能跟普通变量之间直接赋值吗?还是有点糊!
51xlf 发表于 2012-8-18 12:42 | 显示全部楼层
定义一个宏实现!
草根白骨精 发表于 2012-8-18 15:59 | 显示全部楼层
我就是那么应用的,编写一个参数传递的子函数,运算赋值过去即可
 楼主| windhood911 发表于 2012-8-19 09:33 | 显示全部楼层
本帖最后由 windhood911 于 2012-8-19 10:51 编辑

我是这么写的,不知道有没有问题!望请指教!
struct byte
{
  unsigned char b0:1;
  unsigned char b1:1;
  unsigned char b2:1;
  unsigned char b3:1;
  unsigned char b4:1;
  unsigned char b5:1;
  unsigned char b6:1;
  unsigned char b7:1;
};

union bits
{
  unsigned char c;
  struct byte bit;
};

union bits b;
unsigned char ch;

430中的管教P3.1 P3.0 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2要怎么和位段中的b.bit.b0...每位对上,直接赋值?怎么写啊?谢谢!
vivilzb1985 发表于 2012-8-19 10:54 | 显示全部楼层
楼上的的却是高手啊,佩服,期待你们的继续,我也查查资料的了
爱之翼V 发表于 2012-8-19 19:43 | 显示全部楼层
借楼上各位的回答学习了,多谢
sqcumt123 发表于 2012-8-20 09:33 | 显示全部楼层
确实从未遇到
 楼主| windhood911 发表于 2012-8-20 15:27 | 显示全部楼层
遇到了问题总得解决啊!:)
zhl100 发表于 2012-8-23 17:11 | 显示全部楼层
我做过,用STM32的A、D、E三种口不挨着做数据和控制端口,晚上贴源代码给你看看,好像好久以前了,咯咯
 楼主| windhood911 发表于 2012-8-24 16:02 | 显示全部楼层
12# zhl100
期待你的源代码,谢谢!
zhao3462910 发表于 2012-8-24 17:00 | 显示全部楼层
struct flag_inf{
  
               unsigned sleep:1;
               unsigned keycode:1;
               unsigned disp:1;
               unsigned Timer:1;

              }flag;
要用就flag.disp
zhl100 发表于 2012-8-24 21:29 | 显示全部楼层
#define  LCD_CS10  GPIO_ResetBits(GPIOA, GPIO_Pin_7)
#define  LCD_CS11  GPIO_SetBits(GPIOA, GPIO_Pin_7)

#define  LCD_CS20   GPIO_ResetBits(GPIOA, GPIO_Pin_6)
#define  LCD_CS21  GPIO_SetBits(GPIOA, GPIO_Pin_6)

#define  LCD_DI0  GPIO_ResetBits(GPIOE, GPIO_Pin_14)
#define  LCD_DI1  GPIO_SetBits(GPIOE, GPIO_Pin_14)

#define  LCD_RW0  GPIO_ResetBits(GPIOE, GPIO_Pin_13)
#define  LCD_RW1   GPIO_SetBits(GPIOE, GPIO_Pin_13)

#define  LCD_E0   GPIO_ResetBits(GPIOE, GPIO_Pin_12)
#define  LCD_E1  GPIO_SetBits(GPIOE, GPIO_Pin_12)

#define  LCD_RST0  GPIO_ResetBits(GPIOA, GPIO_Pin_5)
#define  LCD_RST1  GPIO_SetBits(GPIOA, GPIO_Pin_5)

#define  H245_0  GPIO_ResetBits(GPIOC, GPIO_Pin_4)
#define  H245_1  GPIO_SetBits(GPIOC, GPIO_Pin_4)
zhl100 发表于 2012-8-24 21:29 | 显示全部楼层
extern unsigned char data0[8];
extern unsigned char data1[8];
extern unsigned char data2[8];
extern unsigned char data3[8];
extern unsigned char data4[8];
extern unsigned char data5[8];
extern unsigned char data6[8];
extern unsigned char data7[8];
extern unsigned char data8[8];
extern unsigned char data9[8];
zhl100 发表于 2012-8-24 21:29 | 显示全部楼层
//#define LCD_PORT             GPIOD
#define LCD_DISP_ON     0x3F
#define LCD_DISP_OFF    0x3E
#define LCD_DISP_ROW    0xC0
#define LCD_DISP_PAGE   0xB8
#define LCD_DISP_Y      0x40
zhl100 发表于 2012-8-24 21:30 | 显示全部楼层
void DATA(u8 x)
{
        if(x&0x01)
        GPIO_SetBits(GPIOE, GPIO_Pin_11);         
        else
    GPIO_ResetBits(GPIOE, GPIO_Pin_11);

        if(x&0x02)
        GPIO_SetBits(GPIOE, GPIO_Pin_10);
        else
    GPIO_ResetBits(GPIOE, GPIO_Pin_10);

         if(x&0x04)
        GPIO_SetBits(GPIOE, GPIO_Pin_9);
        else
    GPIO_ResetBits(GPIOE, GPIO_Pin_9);

        if(x&0x08)
        GPIO_SetBits(GPIOE, GPIO_Pin_8);
        else
    GPIO_ResetBits(GPIOE, GPIO_Pin_8);

        if(x&0x10)
        GPIO_SetBits(GPIOE, GPIO_Pin_7);
        else
    GPIO_ResetBits(GPIOE, GPIO_Pin_7);

        if(x&0x20)
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        else
    GPIO_ResetBits(GPIOB, GPIO_Pin_1);

         if(x&0x40)
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        else
    GPIO_ResetBits(GPIOB, GPIO_Pin_0);

        if(x&0x80)
        GPIO_SetBits(GPIOC, GPIO_Pin_5);
        else
    GPIO_ResetBits(GPIOC, GPIO_Pin_5);

}
zhl100 发表于 2012-8-24 21:31 | 显示全部楼层
H245_0;
        LCD_E0;
        Delayus(1);
        LCD_RW0; //WRITE
        Delayus(1);
        LCD_DI1; //DATA
        Delayus(1);
        LCD_E1;
        Delayus(1);

          DATA(*portValue);
        Delayus(1);
        LCD_E0;
zhl100 发表于 2012-8-24 21:32 | 显示全部楼层
写的不好 别见怪
 楼主| windhood911 发表于 2012-8-25 17:17 | 显示全部楼层
20# zhl100
学习啦,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

9

帖子

1

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