- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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]
您可能关注的文档
最近下载
- 《爆炸和火灾危险场所防雷装置检测技术规范GB/T 32937-2016》知识培训.pptx VIP
- 3.1 波的形成 课件-高二上学期物理人教版(2019)选择性必修第一册.pptx VIP
- 《应用密码学》配套教学课件.ppt VIP
- 演讲台风训练.ppt VIP
- 演讲比赛培训方案.pptx VIP
- 演讲台风适用于演讲训练培训.ppt VIP
- 运输企业安全教育培训制度.docx VIP
- JC-T 2027-2010 高纯石英中杂质含量的测定方法—电感耦合等离子体原子发射光谱法.pdf VIP
- 注册安全工程师考试《管理笔记》.docx VIP
- 宁夏平罗县几种典型土壤修正系数的确定.pdf VIP
文档评论(0)