用 74HC595 把 LCD1602 改成串行数据接口.docVIP

用 74HC595 把 LCD1602 改成串行数据接口.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用 74HC595 把 LCD1602 改成串行数据接口

用 74HC595 把 LCD1602 改成串行接口形式的案例 LCD1602 的接口形式是并行的,它有 8 条数据线、3 条控制线。这样就需要 11 条线来控制它的正常工作。虽然它还可以工作在 4 位数据线的形式,最精简的形式是 6 条线。 有位网友想要使用 74HC595 进行串-并转换,想要用 4 条线来控制 LCD1602。可见链接:/question/458604195.html。 多用了一块芯片,省下了单片机的引脚,这也算是一种方法吧,在系统规模较大、资源紧张的条件下,还是值得应用的。 74HC595 是“串入并出”的移位寄存器芯片,它需要用 3 条线控制数据的输入,才能正常的输出 8 位数据。 有了 8 位数据,这时,LCD1602 还需要至少两条控制线。 经过做而论道的精心设计,分时使用这些控制线,最终,仅仅使用了 3 条线,就完成了对 74HC595 和 LCD1602 的有效控制 ! 这要比前面的网友提出的 4 条线的方案,还要更加精简,节省率提高了 25%。 精简后的电路图如下: 图中是一个数字钟,是为另一个网友编写的,可以参考下面的链接: /%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/a0c99e2343b541844423e865.html 由于 LCD1602 的驱动电路发生了改变,所以数字钟的程序,也要相应的修改。那么,针对本电路的程序如下: //=================================================== #includereg52.h #define uchar unsigned char #define uint unsigned int #define KEY_IO P3 sbit LCD_RS = P2^0; sbit LCD_EN = P2^2; sbit SCK = P2^0; sbit SDI = P2^1; sbit RCK = P2^2; sbit SPK = P1^2; sbit LED = P2^4; bit new_s, modify = 0; char t0, sec = 50, min = 59, hour = 23; char code LCD_line1[] = Designed by ZELD; char code LCD_line2[] = Timer: 00:00:00 ; char Timer_buf[] = 23:59:50; //--------------------------------------------------- void delay(uint z) { uint x, y; for(x = z; x 0; x--) for(y = 100; y 0; y--); } //--------------------------------------------------- void write_595(uchar date)//写入595 { uchar i; for(i = 0; i 8; i++) { SCK = 0; SDI = date 0x80; SCK = 1; date = 1; } } //--------------------------------------------------- void W_LCD_Com(uchar com) //写指令 { write_595(com); LCD_RS = 0;//写入指令 RCK = 1; RCK = 0; //令595输出, 并用EN输出一个高脉冲 } //--------------------------------------------------- void W_LCD_Dat(uchar dat) //写数据 { write_595(dat); LCD_RS = 1;//写入数据 RCK = 1; RCK = 0; //令595输出, 并用EN输出一个高脉冲 } //--------------------------------------------------- void W_LCD_STR(uchar *s) //写字符串 { while(*s) W_LCD_Dat(*s++); } //--------------------------------------------------- void W_BUFF(void) //填写显示缓冲区 { Timer_buf[7]

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档