打印

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

[复制链接]
4357|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 | 只看该作者
定义一个宏实现!

使用特权

评论回复
5
草根白骨精| | 2012-8-18 15:59 | 只看该作者
我就是那么应用的,编写一个参数传递的子函数,运算赋值过去即可

使用特权

评论回复
6
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...每位对上,直接赋值?怎么写啊?谢谢!

使用特权

评论回复
7
vivilzb1985| | 2012-8-19 10:54 | 只看该作者
楼上的的却是高手啊,佩服,期待你们的继续,我也查查资料的了

使用特权

评论回复
8
爱之翼V| | 2012-8-19 19:43 | 只看该作者
借楼上各位的回答学习了,多谢

使用特权

评论回复
9
sqcumt123| | 2012-8-20 09:33 | 只看该作者
确实从未遇到

使用特权

评论回复
10
windhood911|  楼主 | 2012-8-20 15:27 | 只看该作者
遇到了问题总得解决啊!:)

使用特权

评论回复
11
zhl100| | 2012-8-23 17:11 | 只看该作者
我做过,用STM32的A、D、E三种口不挨着做数据和控制端口,晚上贴源代码给你看看,好像好久以前了,咯咯

使用特权

评论回复
12
windhood911|  楼主 | 2012-8-24 16:02 | 只看该作者
12# zhl100
期待你的源代码,谢谢!

使用特权

评论回复
13
zhao3462910| | 2012-8-24 17:00 | 只看该作者
struct flag_inf{
  
               unsigned sleep:1;
               unsigned keycode:1;
               unsigned disp:1;
               unsigned Timer:1;

              }flag;
要用就flag.disp

使用特权

评论回复
14
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)

使用特权

评论回复
15
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];

使用特权

评论回复
16
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

使用特权

评论回复
17
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);

}

使用特权

评论回复
18
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;

使用特权

评论回复
19
zhl100| | 2012-8-24 21:32 | 只看该作者
写的不好 别见怪

使用特权

评论回复
20
windhood911|  楼主 | 2012-8-25 17:17 | 只看该作者
20# zhl100
学习啦,谢谢!

使用特权

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

本版积分规则

0

主题

9

帖子

1

粉丝