cumtgao 发表于 2011-2-22 16:02:08

430怎么像51那样对I/O口自由的进行位操作

以前用的51,现在要改用430。51中1602液晶屏显示我对I/O口的定义都在头文件中

#define LCD_DATA P0      //LCD的数据口

sbit LCD_BUSY=LCD_DATA^7;//LCD忙信号位

sbit LCD_RW=P2^0;          //LCD读写控制
sbit LCD_RS=P2^1;          //LCD寄存器选择
sbit LCD_EN=P2^2;          //LCD使能信号

现在要移植到430中请问这些宏怎么去定义? P0^7作为忙检测口,在430中如何定义宏?
#define LCD_BUSY P0DIR;P0IN|=BIT7是不是只能这样设置?那设置后在.C文件又该怎么判断是否忙呢?
if(!LCD_BUSY) 51中可以这样判断430中要如何改?

cumtgao 发表于 2011-2-22 16:03:52

430中宏设置错了#define LCD_BUSY P0DIR设置为输入方向

Hamyou 发表于 2011-2-22 16:04:27

这个还算简单

cumtgao 发表于 2011-2-22 16:07:20

请教---------怎么在.C中判断忙检测 才转的430 什么都不懂啊

Hamyou 发表于 2011-2-22 16:51:18

选设置IO端口为输入模式,然后读取Value=PORT;
if(!(Value&0x80))

lovewwy 发表于 2011-2-22 19:18:14

430没有位定义,只能用楼上 与 或的方式。或者还可以用位域,好像效率也不高,我也没有试过。

cumtgao 发表于 2011-2-23 10:08:48

有点懂了,我再看看,谢谢热心牛人们

songshanxiaozi 发表于 2011-3-16 17:20:33

&,与
|,或
^,异或
是标准C的位操作实现方式。

cc1989summer 发表于 2011-4-2 21:51:54

P1OUT |=BIT0;      相当于 P1.0=1
P1OUT &=~BIT0;       相当于 P1.0=0

以此类推

cc1989summer 发表于 2011-4-2 21:54:12

回复【楼主位】cumtgao
-----------------------------------------------------------------------


#define set_LCD_RW   P2OUT |=BIT0;
#define clear_LCD_RW   P2OUT &=~BIT0;

xudeyu 发表于 2011-4-6 21:35:52

#define         RS_HIGH                  P1OUT|=BIT0 //指令数据选择信号
#define         RS_LOW                 P1OUT&=~BIT0

#define         RW_HIGH            P1OUT|=BIT1 //读写信号
#define         RW_LOW                 P1OUT&=~BIT1

#define         E_HIGH                 P1OUT|=BIT2 //使能信号
#define         E_LOW                 P1OUT&=~BIT2
页: [1]
查看完整版本: 430怎么像51那样对I/O口自由的进行位操作