搜索
bottom↓
回复: 28

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

[复制链接]

出0入0汤圆

发表于 2012-10-28 11:07:30 | 显示全部楼层 |阅读模式
途中1602的E使能端通过两个非门和两个与非门控制,其中WR和RD怎样起作用的,还有P2。0管脚?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-10-28 11:08:41 | 显示全部楼层
是P2。7管脚

出0入0汤圆

发表于 2012-10-28 12:18:10 | 显示全部楼层
这应该是把1602作为外部数据存储器来直接读写。

出0入0汤圆

发表于 2012-10-28 12:39:20 | 显示全部楼层
把1602作为PDATA,地址为0X00~0X03,P2.7作为片选端,低电平有效。

出0入0汤圆

 楼主| 发表于 2012-10-28 13:23:04 | 显示全部楼层
renwocai 发表于 2012-10-28 12:18
这应该是把1602作为外部数据存储器来直接读写。

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

出0入0汤圆

发表于 2012-10-28 14:08:08 | 显示全部楼层
比较好的编程方式就是 一切外设都映射到内存上,直接读写。此方法成熟好用。

出0入0汤圆

发表于 2012-10-28 14:10:18 | 显示全部楼层
通常 E 是个片选信号

出0入0汤圆

发表于 2012-10-28 14:27:17 | 显示全部楼层
我曾经做过的,你参考一下 RS   RW 与你的电路图不同,你参考一下啊

/* 定义LCD1602操作地址 */
//#define  LCD1602_WRITE_COMMAND     XBYTE[0xe000]       /* 写命令地址 */
//#define  LCD1602_READ_STATE        XBYTE[0xe800]       /* 读状态地址 */
//#define  LCD1602_WRITE_DATA        XBYTE[0xf000]       /* 写数据地址 */

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

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

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

出0入0汤圆

 楼主| 发表于 2012-10-28 17:11:14 | 显示全部楼层
click_lijie 发表于 2012-10-28 14:08
比较好的编程方式就是 一切外设都映射到内存上,直接读写。此方法成熟好用。 ...

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

出0入0汤圆

 楼主| 发表于 2012-10-28 17:14:09 | 显示全部楼层
click_lijie 发表于 2012-10-28 14:27
我曾经做过的,你参考一下 RS   RW 与你的电路图不同,你参考一下啊

/* 定义LCD1602操作地址 */

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

出0入4汤圆

发表于 2012-10-28 18:13:33 | 显示全部楼层
楼主应该去学习一下51 总线时序,根据数字电路基础去分析一遍就能明白了。这图设计能实现读写,但是不规范
http://blog.csdn.net/sunchao151/article/details/5017608

出0入0汤圆

发表于 2012-10-28 18:42:08 | 显示全部楼层

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

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

出0入0汤圆

发表于 2012-10-28 22:58:35 | 显示全部楼层
你的EA已经连高电平了,这个能用?

出0入0汤圆

发表于 2012-10-29 00:29:59 | 显示全部楼层
本帖最后由 whiff 于 2012-10-29 00:33 编辑

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

出0入0汤圆

发表于 2012-10-29 13:45:50 | 显示全部楼层
  1. #include "reg52.h"
  2. #include "absacc.h"

  3. #define xiezhiling PBYTE[0XF0]
  4. #define xieshuju PBYTE[0xF2]
  5. #define duzhiling pdata[0x01]
  6. #define dushuju pdata[0x03]
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar code tab[]="0123456789";
  10. sbit P27=P2^7;
  11. void delayus()
  12. {
  13.         uchar i=200;
  14.         while(i--);
  15. }

  16. void lcdinit()
  17. {
  18.         xiezhiling = 0x38;delayus();
  19.         xiezhiling = 0x06;delayus();
  20.         xiezhiling = 0x0f;delayus();
  21.         xiezhiling = 0x01;delayus();
  22.         xiezhiling = 0x80;delayus();

  23. }
  24. void main()
  25. {
  26.         P27 = 0;
  27.         lcdinit();
  28.         xieshuju = tab[0];delayus();
  29.         xieshuju = tab[1];delayus();
  30.         xieshuju = tab[2];delayus();
  31.         while(1);
  32. }

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-29 13:49:24 | 显示全部楼层
sco518 发表于 2012-10-28 18:42
我很想知道这种总线扩展的应用还有没有实际应用的价值? 连接麻烦,而且还占用不少IO口。。。  

如果单片 ...

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

出0入0汤圆

发表于 2012-10-29 14:41:19 | 显示全部楼层
EN使能 ,平常我用一根线就可以了。   即使用多块1602,或者其他的SPI通信方式的芯片, 只要使能端单独控制,数据位,控制线复用也没问题的。

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

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

出0入0汤圆

 楼主| 发表于 2012-11-2 20:09:55 | 显示全部楼层
renwocai 发表于 2012-10-29 13:45

学习下,有点领悟啦

出0入0汤圆

发表于 2012-11-3 14:30:42 | 显示全部楼层
感觉1楼的图有点复杂
用样还是占用了3个IO,还多用一片 373
不如直接用3个脚去控制还省点事

出0入0汤圆

发表于 2012-11-7 16:41:57 | 显示全部楼层
对外部地址操作,单片机会自动对RD,WR引脚电平变化已通知外部器件该做什么事了,

出0入0汤圆

发表于 2012-11-7 19:21:11 | 显示全部楼层
真心被搞昏了

出0入0汤圆

 楼主| 发表于 2012-11-8 00:15:12 | 显示全部楼层
lxa0 发表于 2012-11-3 14:30
感觉1楼的图有点复杂
用样还是占用了3个IO,还多用一片 373
不如直接用3个脚去控制还省点事

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

出0入0汤圆

 楼主| 发表于 2012-11-8 00:15:35 | 显示全部楼层
uli123 发表于 2012-11-7 19:21
真心被搞昏了

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

出0入0汤圆

 楼主| 发表于 2012-11-8 00:16:08 | 显示全部楼层
lexou123 发表于 2012-11-7 16:41
对外部地址操作,单片机会自动对RD,WR引脚电平变化已通知外部器件该做什么事了, ...

嗯,我也是最近才搞明白

出0入0汤圆

发表于 2012-11-8 12:36:56 | 显示全部楼层
protus仿真下就可以知道与非门起作用没有 protus可以看到高低电平的变换

出0入0汤圆

发表于 2012-11-9 21:07:30 | 显示全部楼层
1005512154 发表于 2012-11-8 00:15
嗯,刚开始我也是这样以为很麻烦,但后来高手指导后才知道用绝对地址操作挺方便的 ...

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

出0入0汤圆

发表于 2012-11-10 14:05:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-4-30 23:14:50 | 显示全部楼层
这个 LCD 上的读写信号是来自地址线,并未将 8080 总线的读写真正转换为 6800 是吧?

出0入0汤圆

发表于 2013-5-1 14:05:26 | 显示全部楼层
1602占用的IO口太多了,改用串口的液晶比较实用,不过学1602也是一方面知识,不同的电路设计折射不同的方法,我也来学习学习···
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表