搜索
bottom↓
回复: 16

成功运用3个普通IO口实现1602显示

[复制链接]

出0入0汤圆

发表于 2006-3-7 15:12:11 | 显示全部楼层 |阅读模式
由于本人喜欢挑战极限,所以实验了用3个普通IO口实现1602显示,比普通的6个IO口省下3IO,使用595芯片,请看结果,在proteus 6.7仿真通过,使用PICC语言编程,有时间再改成avr的,呵呵,附件为PICC源程序和Proteus项目文件,



点击此处下载armok01105928.rar




-----此内容被SmileSmile于2006-03-07,16:08:08编辑过

出0入0汤圆

发表于 2006-3-7 18:41:32 | 显示全部楼层
言过其实了,毕竟还要加一片74HC595.

出0入0汤圆

发表于 2006-3-7 19:21:37 | 显示全部楼层
不错!捡了个芝麻,丢了个大西瓜。

出0入0汤圆

发表于 2006-3-7 19:39:32 | 显示全部楼层
对我这个刚入门的可是大有好处!

代码转成AVR ICC的就绝了!

下面的代码是做什么的?

楼上的芝麻和西瓜指的是什么啊?解释下吧,就当做善事了,求您了。

void WaitBusy(void)

{

   TRISC = 0xff;

   RS = 0;

   RW = 1;

  do

  {

    E = 1;

    NOP();

    Status = PORTC;

    E = 0;   



  }while(Status&0x80);  

}



下面是我转换成ATMEGA8 ICCAVR6.31后的仿真文件,不包括上面的部分代码。

点击此处下载armok01105986.rar



-----此内容被alisha于2006-03-07,19:53:48编辑过



-----此内容被alisha于2006-03-07,20:29:22编辑过


-----此内容被alisha于2006-03-07,20:32:01编辑过

出0入0汤圆

发表于 2006-3-7 21:56:37 | 显示全部楼层
为了3个IO而去增加一个16脚的IC

带来的不只是成本,还有电路板面积、布线难度、代码量、程序执行时间的增加



做产品的话,恐怕行不通

出0入0汤圆

发表于 2006-3-7 23:20:54 | 显示全部楼层
不错,当MCU只有3个IO口可用的时候,还可以引用一下

出0入0汤圆

发表于 2006-3-7 23:53:57 | 显示全部楼层
楼主的不算什么,记得资料介绍还有2线的接法,当然也需要一片位移寄存器之类的芯片。

出0入0汤圆

 楼主| 发表于 2006-3-8 00:55:11 | 显示全部楼层
很多时候不够的是单片机的io口,而不是所谓的西瓜,仅仅是一种抛砖引玉的做法,其中的利弊大家都是明白人,一眼就可以知道。void WaitBusy(void)

{

   TRISC = 0xff;

   RS = 0;

   RW = 1;

  do

  {

    E = 1;

    NOP();

    Status = PORTC;

    E = 0;   



  }while(Status&0x80);   

}

这段代码没有用到,原来是用于检测忙信号

出0入0汤圆

发表于 2006-3-8 07:13:59 | 显示全部楼层
不错,楼主的想法不错,我就遇到过IO口不够用的情况。

出0入296汤圆

发表于 2006-3-8 21:24:01 | 显示全部楼层
相同范例

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=582459&bbs_page_no=1&sub_kind_id=2065&bbs_id=1000

ICC版本的,提供头文件。

-----------------------------------

有些项目开发是不计成本的,比方说科研和竞赛,所以基于以上考虑,这项技术是十分有用的。

出0入0汤圆

发表于 2006-3-9 11:40:42 | 显示全部楼层
即使真的是IO不够,也不会考虑用串/转换来做这种复杂时序。

每次更改RS/WE/E都要重发一次数据,不太爽。



不如把IO口直接做LCD驱动,而用串/转换74HC595/74HC164/74HC165来扩展简单的输入输出。

出0入0汤圆

发表于 2006-3-9 12:37:43 | 显示全部楼层
嘿嘿,HJJ果然是老大,“不如把IO口直接做LCD驱动,而用串/转换74HC595/74HC164/74HC165来扩展简单的输入输出。” 这个方法好!!!

出0入0汤圆

发表于 2006-3-9 13:42:13 | 显示全部楼层
void WriteCommand(char Command)

{   

   DataShift(Command&0xf0|0X00);//

   DataShift(Command&0xf0|0X04);//   

   Delay(1);

   DataShift(Command&0xf0|0X00); //

   DataShift(Command<<4&0xf0|0X04);//

   Delay(1);

   DataShift(Command<<4&0xf0|0X00);

}  

***********************************************************

为何数据高四位写了43遍,低四位写了2遍?0XO4是为了操作E端吗?

***********************************************************

void WriteData(char Data)

{

   DataShift(Data&0xf0|0X01);

   DataShift(Data&0xf0|0X05);

   Delay(1);

   DataShift(Data&0xf0|0X01);

   DataShift(Data<<4&0xf0|0X05);

   Delay(1);

   DataShift(Data<<4&0xf0|0X01);

}

***********************************************

同上面的一样,0X01是操作RS吗?0X05是做什么用的?

***********************************************

出0入0汤圆

发表于 2009-8-22 14:23:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-22 14:40:18 | 显示全部楼层
IO不够用时还是可以的,我做的一个东东就是这样用,是STM32+12232LCD,直接并到SPI口上,SPI还可以它用

出0入0汤圆

发表于 2009-8-22 14:51:14 | 显示全部楼层
我的只用两个IO口..

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1935909&bbs_page_no=1&search_mode=3&search_text=ivws&bbs_id=9999

出0入0汤圆

发表于 2009-8-29 12:19:29 | 显示全部楼层
支持4楼的观点
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 23:05

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

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