网站大量收购独家精品文档,联系QQ:2885784924

51单片机任意2个IO口驱动LCD1602.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机任意2个IO口驱动LCD1602相信大家对1602显示屏已经十分熟悉,驱动方式有8线制(需要11根线)和4线制(需要7根线),这里为大家推荐一种只需要2根线就能驱动1602的方法。之前在网上见到Arduino通过IIC驱动1602的实例,本人完全不懂Arduino程序,看了一下驱动电路,发现PCF8574这个关键芯片,它就相当于一个桥梁,将IIC总线转换为8位准双向口。思路1、单片机通过IIC与PCF8574进行通信。首先写好IIC通信程序,网上到处都是IIC通信程序,很容易找。PCF8574 的器件地址为40h,由于硬件地址引脚A0-A2可寻址8 个器件,所以器件地址并不唯一,具体说明大家去查查PCF8574芯片手册。2、单片机4线制驱动1602网上也有很多相关程序,我就不再多说。4线制驱动方式需要7个IO口(RS、RW、E和4条数据线),而PCF8574提供了8位准双向口,所以管脚还有剩余。3、IIC通信程序和1602的4线制驱动程序相结合4、51单片机任意2个IO口驱动1602成功!!!。(我只是个业余爱好者,要是各位觉得太低端那就见谅了)驱动电路图效果图实物图Proteus仿真程序#include reg52.h#include intrins.hsbit SCL = P3^0;sbit SDA = P3^1;bit ack;unsigned char LCD_data;unsigned char code digit[ ]={0123456789}; //定义字符数组显示数字//*****************延时************************void delay_nus(unsigned int n) //N us延时函数{unsigned int i=0;for (i=0;in;i++)_nop_();}void delay_nms(unsigned int n) //N ms延时函数{unsigned int i,j;for (i=0;in;i++)for (j=0;j1140;j++);}void nop4(){ _nop_(); //等待一个机器周期 _nop_(); //等待一个机器周期 _nop_(); //等待一个机器周期 _nop_(); //等待一个机器周期}//***************************************void Start(){ SDA=1; _nop_(); SCL=1;nop4(); SDA=0;nop4(); SCL=0; _nop_();_nop_();}void Stop(){ SDA=0; _nop_();SCL=0;nop4();//4us后SCL跳变SCL=1;nop4();SDA=1; _nop_(); _nop_();}//******************************************void Write_A_Byte(unsigned char c){ unsigned char BitCnt; for(BitCnt=0;BitCnt8;BitCnt++) //要传送的数据长度为8位 { if((cBitCnt)0x80) SDA=1; //判断发送位 else SDA=0; _nop_(); SCL=1; //置时钟线为高,通知被控器开始接收数据位 nop4(); _nop_(); SCL=0; } _nop_(); _nop_(); SDA=1; //8位发送完后释放数据线,准备接收应答位 _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); _nop_(); if(SDA==1)ack=0; else ack=1; //判断是否接收到应答信号 SCL=0; _nop_(); _nop_();}bit Write_Random_Address_Byte(unsigned char add,unsigned char dat){ Start(); //启动总线Write_A_Byte(add); //发送器件地址 if(ack==0)return(0);Write_A_Byte(dat); //发送数据 if(ack==0)return(0);Stop(); //结束总线 return(1);}//********************液晶屏使能*********************void Enable_LCD_write(){ LCD_data|=(1(3-1));//E=1; Write_Random_Add

文档评论(0)

dashewan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档