shenrongze 发表于 2014-3-5 09:05:24

直接对P2口赋值跟将数据拆分后重组有何区别? 求解

sbit LCD_DB7 = P2^7;
sbit LCD_DB6 = P2^6;
sbit LCD_DB5 = P2^5;
sbit LCD_DB4 = P2^4;
sbit LCD_DB3 = P2^3;
sbit LCD_DB2 = P2^2;
sbit LCD_DB1 = P2^1;
sbit LCD_DB0 = P2^0;
sbit LCD_EN= P3^2;
sbit LCD_RW= P3^1;
sbit LCD_RS= P3^0;

void Lcd_Bus(unsigned char Data)
{
        LCD_DB7 = Data&0x01;
        LCD_DB6 = Data&0x02;
        LCD_DB5 = Data&0x04;
        LCD_DB4 = Data&0x08;
        LCD_DB3 = Data&0x10;
        LCD_DB2 = Data&0x20;
        LCD_DB1 = Data&0x40;
        LCD_DB0 = Data&0x80;
}

请教下这样调用Lcd_Bus() 跟直接对P2口赋值有什么区别?
仿真中调用Lcd_Bus() 不行能显示,直接对P2口赋值则正常。
由于硬件电路上数据总线不是在同一组端口上的,所以需要上面程序那样做。 求解。

shenrongze 发表于 2014-3-5 10:14:13

没人知道么~~~

albert_w 发表于 2014-3-5 10:21:34

几乎不能看明白你想说什么. 没有使用过sbit, 但我猜,sbit xxx = yyy 是对xxx赋值为yyy,而不是把xxx绑定在yyy上. 下次再对xxx赋值也就不影响yyy了

shenrongze 发表于 2014-3-5 10:30:17

本帖最后由 shenrongze 于 2014-3-5 11:02 编辑

albert_w 发表于 2014-3-5 10:21
几乎不能看明白你想说什么. 没有使用过sbit, 但我猜,sbit xxx = yyy 是对xxx赋值为yyy,而不是把xxx绑定在yy ...

呀。。好久没写程序了,难道是我弄错了么,但我实验对Lcd_Bus()送数据是正常的呀。

先说下我们硬件,
LCD_DB7 = P4^6
LCD_DB6 = P4^5
LCD_DB5 = P4^4
LCD_DB4 = P2^7
LCD_DB3 = P2^6
LCD_DB2 = P2^5
LCD_DB1 = P2^4
LCD_DB0 = P2^3

由于LCD的数据总线不是连接在单片机上的同一组端口,所以写了个Lcd_Bus(),通过测试随便送一组数据到Lcd_Bus()是正常的,但是实际上LCD不能显示。仿真没有P4口,所以我就在P2口测试,直接把数据送给P2可以显示,通过Lcd_Bus()就不行

xiakang 发表于 2014-3-5 11:19:18

本帖最后由 xiakang 于 2014-3-5 11:20 编辑

Data的第0位赋给P2第7位,Data的第7位赋给P2第0位。比如Data是0x32,转化后P2为0x4C。你说有什么区别

shenrongze 发表于 2014-3-5 11:23:37

xiakang 发表于 2014-3-5 11:19
Data的第0位赋给P2第7位,Data的第7位赋给P2第0位。比如Data是0x32,转化后P2为0x4C。你说有什么区别 ...

噢。。。。知道了,谢谢您~~
页: [1]
查看完整版本: 直接对P2口赋值跟将数据拆分后重组有何区别? 求解