最新51单片机任意2个IO口驱动LCD1602.docx
- 文档编号:6743461
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:11
- 大小:1.29MB
最新51单片机任意2个IO口驱动LCD1602.docx
《最新51单片机任意2个IO口驱动LCD1602.docx》由会员分享,可在线阅读,更多相关《最新51单片机任意2个IO口驱动LCD1602.docx(11页珍藏版)》请在冰豆网上搜索。
最新51单片机任意2个IO口驱动LCD1602
51单片机任意2个IO口驱动LCD1602
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
#include
sbitSCL=P3^0;
sbitSDA=P3^1;
bitack;
unsignedcharLCD_data;
unsignedcharcodedigit[]={"0123456789"};//定义字符数组显示数字
//*****************延时************************
voiddelay_nus(unsignedintn)//Nus延时函数
{
unsignedinti=0;
for(i=0;i _nop_(); } voiddelay_nms(unsignedintn)//Nms延时函数 { unsignedinti,j; for(i=0;i for(j=0;j<1140;j++); } voidnop4() { _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 } //*************************************** voidStart() { SDA=1; _nop_(); SCL=1; nop4(); SDA=0; nop4(); SCL=0; _nop_(); _nop_(); } voidStop() { SDA=0; _nop_(); SCL=0; nop4();//>4us后SCL跳变 SCL=1; nop4(); SDA=1; _nop_(); _nop_(); } //****************************************** voidWrite_A_Byte(unsignedcharc) { unsignedcharBitCnt; for(BitCnt=0;BitCnt<8;BitCnt++)//要传送的数据长度为8位 { if((c< elseSDA=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; elseack=1;//判断是否接收到应答信号 SCL=0; _nop_(); _nop_(); } bitWrite_Random_Address_Byte(unsignedcharadd,unsignedchardat) { Start();//启动总线 Write_A_Byte(add);//发送器件地址 if(ack==0)return(0); Write_A_Byte(dat);//发送数据 if(ack==0)return(0); Stop();//结束总线 return (1); } //********************液晶屏使能********************* voidEnable_LCD_write() { LCD_data|=(1<<(3-1));//E=1; Write_Random_Address_Byte(0x40,LCD_data); delay_nus (2); LCD_data&=~(1<<(3-1));//E=0; Write_Random_Address_Byte(0x40,LCD_data); } //*************写命令**************************** voidLCD_write_command(unsignedcharcommand) { delay_nus(16); LCD_data&=~(1<<(1-1));//RS=0; LCD_data&=~(1<<(2-1));//RW=0; Write_Random_Address_Byte(0x40,LCD_data); LCD_data&=0X0f;//清高四位 LCD_data|=command&0xf0;//写高四位 Write_Random_Address_Byte(0x40,LCD_data); Enable_LCD_write(); command=command<<4;//低四位移到高四位 LCD_data&=0x0f;//清高四位 LCD_data|=command&0xf0;//写低四位 Write_Random_Address_Byte(0x40,LCD_data); Enable_LCD_write(); } //*************写数据**************************** voidLCD_write_data(unsignedcharvalue) { delay_nus(16); LCD_data|=(1<<(1-1));//RS=1; LCD_data&=~(1<<(2-1));//RW=0; Write_Random_Address_Byte(0x40,LCD_data); LCD_data&=0X0f;//清高四位 LCD_data|=value&0xf0;//写高四位 Write_Random_Address_Byte(0x40,LCD_data); Enable_LCD_write(); value=value<<4;//低四位移到高四位 LCD_data&=0x0f;//清高四位 LCD_data|=value&0xf0;//写低四位 Write_Random_Address_Byte(0x40,LCD_data); Enable_LCD_write(); } //**********************设置显示位置********************************* voidset_position(unsignedcharx,unsignedchary) { unsignedcharposition; if(y==0) position=0x80+x; else position=0xc0+x; LCD_write_command(position); } //**********************显示字符串***************************** voiddisplay_string(unsignedcharx,unsignedchary,unsignedchar*s) { set_position(x,y); while(*s) { LCD_write_data(*s); s++; } } //*************液晶初始化**************************** voidLCD_init(void) { LCD_write_command(0x28); delay_nus(40); LCD_write_command(0x28); delay_nus(40); Enable_LCD_write(); delay_nus(40); LCD_write_command(0x28);//4位显示! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! LCD_write_command(0x0c);//显示开 LCD_write_command(0x01);//清屏 delay_nms (2); } voidmain(void) { LCD_init(); display_string(4,0,"imxuheng");//显示一段文字 display_string(2,1,"HelloToday! ");//显示一段文字 while (1); } 程序还不够完美,自身工作与电学没什么关系,只是业余爱好鼓捣鼓捣,希望各位能够提出修改意见。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 51 单片机 任意 IO 驱动 LCD1602