1005512154 发表于 2012-10-28 11:07:30

有关利用51的WR和RD来控制1602使能端控制问题?

途中1602的E使能端通过两个非门和两个与非门控制,其中WR和RD怎样起作用的,还有P2。0管脚?

1005512154 发表于 2012-10-28 11:08:41

是P2。7管脚

renwocai 发表于 2012-10-28 12:18:10

这应该是把1602作为外部数据存储器来直接读写。

renwocai 发表于 2012-10-28 12:39:20

把1602作为PDATA,地址为0X00~0X03,P2.7作为片选端,低电平有效。

1005512154 发表于 2012-10-28 13:23:04

renwocai 发表于 2012-10-28 12:18 static/image/common/back.gif
这应该是把1602作为外部数据存储器来直接读写。

这个用外部数据存储器直接读写有看过,不过清楚怎么用,能大概说下51芯片的那几个管脚是怎么通过与非门而后非门起作用的么??

click_lijie 发表于 2012-10-28 14:08:08

比较好的编程方式就是 一切外设都映射到内存上,直接读写。此方法成熟好用。

click_lijie 发表于 2012-10-28 14:10:18

通常 E 是个片选信号

click_lijie 发表于 2012-10-28 14:27:17

我曾经做过的,你参考一下 RS   RW 与你的电路图不同,你参考一下啊

/* 定义LCD1602操作地址 */
//#defineLCD1602_WRITE_COMMAND   XBYTE       /* 写命令地址 */
//#defineLCD1602_READ_STATE      XBYTE       /* 读状态地址 */
//#defineLCD1602_WRITE_DATA      XBYTE       /* 写数据地址 */

#defineLCD1602_ENABLE      XBYTE//片选地址   
sbit LCD_RS = P1^6 ;// 数据/命令选择端(H/L)
sbit LCD_RW = P1^5 ;// 读/写选择端(H/L)

//写命令
#defineLCD1602_SEND_COMMAND(a)    LCD_RS = 0; LCD_RW = 0 ; LCD1602_ENABLE = a

//写数据
#defineLCD1602_SEND_DATA(a)       LCD_RS = 1; LCD_RW = 0 ; LCD1602_ENABLE = a

1005512154 发表于 2012-10-28 17:11:14

click_lijie 发表于 2012-10-28 14:08 static/image/common/back.gif
比较好的编程方式就是 一切外设都映射到内存上,直接读写。此方法成熟好用。 ...

恩,我也觉得,这几天看到很类似的题目,但不怎么会用。把这知识点啃掉最好咯{:smile:}

1005512154 发表于 2012-10-28 17:14:09

click_lijie 发表于 2012-10-28 14:27 static/image/common/back.gif
我曾经做过的,你参考一下 RS   RW 与你的电路图不同,你参考一下啊

/* 定义LCD1602操作地址 */


你那个可以发个图给我看下么,想了解下怎么控制的

acmilannast 发表于 2012-10-28 18:13:33

楼主应该去学习一下51 总线时序,根据数字电路基础去分析一遍就能明白了。这图设计能实现读写,但是不规范
http://blog.csdn.net/sunchao151/article/details/5017608

sco518 发表于 2012-10-28 18:42:08


我很想知道这种总线扩展的应用还有没有实际应用的价值? 连接麻烦,而且还占用不少IO口。。。

如果单片机片内资源不够,第一反应应该是换单片机吧?    有没有人是觉得应该先试扩展的?

tianheiGE 发表于 2012-10-28 22:58:35

你的EA已经连高电平了,这个能用?

whiff 发表于 2012-10-29 00:29:59

本帖最后由 whiff 于 2012-10-29 00:33 编辑

这是关于8080总线时序转换为6800总线时序的问题,通过两个非门和两个与非门,巧妙地完成了地址译码和时序转换。楼主可以先熟悉这两种时序,就能理解这个电路了。:)

renwocai 发表于 2012-10-29 13:45:50

#include "reg52.h"
#include "absacc.h"

#define xiezhiling PBYTE
#define xieshuju PBYTE
#define duzhiling pdata
#define dushuju pdata
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]="0123456789";
sbit P27=P2^7;
void delayus()
{
        uchar i=200;
        while(i--);
}

void lcdinit()
{
        xiezhiling = 0x38;delayus();
        xiezhiling = 0x06;delayus();
        xiezhiling = 0x0f;delayus();
        xiezhiling = 0x01;delayus();
        xiezhiling = 0x80;delayus();

}
void main()
{
        P27 = 0;
        lcdinit();
        xieshuju = tab;delayus();
        xieshuju = tab;delayus();
        xieshuju = tab;delayus();
        while(1);
}

renwocai 发表于 2012-10-29 13:49:24

sco518 发表于 2012-10-28 18:42 static/image/common/back.gif
我很想知道这种总线扩展的应用还有没有实际应用的价值? 连接麻烦,而且还占用不少IO口。。。

如果单片 ...

这种用法在某些特定情况下是很实用的。P2.7在这里作为片选端,P0作地址和数据总线是可以复用的,如果你有多个1602(或类似1602可以用同样方法扩展的外设)需要控制,只需要增加片选线,P0口只要复用即可。另外,程序的编写也容易得多。见上楼。

sco518 发表于 2012-10-29 14:41:19

EN使能 ,平常我用一根线就可以了。   即使用多块1602,或者其他的SPI通信方式的芯片, 只要使能端单独控制,数据位,控制线复用也没问题的。

用总线扩展,,还是一样的道理,但是在使能上还要多用几根线。。这不是浪费么?

按我的理解,总线扩展是单片机发展初期,从主板分立模式发展出单片机,但是当时的单片机片内资源非常有限,同时当时的设计师们都比较熟悉主板的工作模式,所以在单片机上也做了扩展总线(方便扩展ROM,RAM,IO口)。
但是单片机发展了这么多年以后,单片机的功能越来越强大,越来越完善,也发展出了不同方向,不同功用的单片机,而这个51扩展总线的功能,就逐渐成了鸡肋了。。。因为现在看来,51系列真的是太低端了。。比它强大的单片机随处可见。它内部资源不够,我们完全可以用更好的单片机去替代它,同时成本也不会大多少。
比这种扩展总线更高级,更省资源的SPII2C串口协议等等。用的都比它要多吧。

1005512154 发表于 2012-11-2 20:09:55

renwocai 发表于 2012-10-29 13:45 static/image/common/back.gif


学习下,有点领悟啦

lxa0 发表于 2012-11-3 14:30:42

感觉1楼的图有点复杂
用样还是占用了3个IO,还多用一片 373
不如直接用3个脚去控制还省点事

lexou123 发表于 2012-11-7 16:41:57

对外部地址操作,单片机会自动对RD,WR引脚电平变化已通知外部器件该做什么事了,

uli123 发表于 2012-11-7 19:21:11

真心被搞昏了

1005512154 发表于 2012-11-8 00:15:12

lxa0 发表于 2012-11-3 14:30 static/image/common/back.gif
感觉1楼的图有点复杂
用样还是占用了3个IO,还多用一片 373
不如直接用3个脚去控制还省点事


嗯,刚开始我也是这样以为很麻烦,但后来高手指导后才知道用绝对地址操作挺方便的

1005512154 发表于 2012-11-8 00:15:35

uli123 发表于 2012-11-7 19:21 static/image/common/back.gif
真心被搞昏了

这个是用到绝对地址操作的

1005512154 发表于 2012-11-8 00:16:08

lexou123 发表于 2012-11-7 16:41 static/image/common/back.gif
对外部地址操作,单片机会自动对RD,WR引脚电平变化已通知外部器件该做什么事了, ...

嗯,我也是最近才搞明白

luomeigang 发表于 2012-11-8 12:36:56

protus仿真下就可以知道与非门起作用没有 protus可以看到高低电平的变换

lxa0 发表于 2012-11-9 21:07:30

1005512154 发表于 2012-11-8 00:15 static/image/common/back.gif
嗯,刚开始我也是这样以为很麻烦,但后来高手指导后才知道用绝对地址操作挺方便的 ...

如果你的外围还有别的需要RD/WR信号的芯片
可以这样用
如果你只是驱动lcd的话
那就没必要非用RD/WR
灵活机动的运用单片机
才是最终方向

arm开发 发表于 2012-11-10 14:05:12

nicksean 发表于 2013-4-30 23:14:50

这个 LCD 上的读写信号是来自地址线,并未将 8080 总线的读写真正转换为 6800 是吧?

skylsk 发表于 2013-5-1 14:05:26

1602占用的IO口太多了,改用串口的液晶比较实用,不过学1602也是一方面知识,不同的电路设计折射不同的方法,我也来学习学习···
页: [1]
查看完整版本: 有关利用51的WR和RD来控制1602使能端控制问题?