您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > lcd1602驱动程序
#includereg52.h#includeintrins.h/*----------------------------------------------------lcd1602----------------------------------------------------*/sbitRS=P2^7;//定义端口,LCD1602的4脚sbitRW=P2^6;//定义端口,LCD1602的5脚sbitEN=P2^5;//定义端口,LCD1602的6脚#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换/*----------------------------------------------------lcd1602----------------------------------------------------*//*------------------------------------------------uS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5uS------------------------------------------------*/voidDelayUs2x(unsignedchart){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/voidDelayMs(unsignedchart){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------lcd1602判忙函数------------------------------------------------*/bitLCD_Check_Busy(void){bitresult;//修改了判忙函数DataPort=0xFF;RS=0;RW=1;EN=1;_nop_();result=(bit)(DataPort&0x80);EN=0;returnresult;}/*------------------------------------------------lcd1602写入命令函数------------------------------------------------*/voidLCD_Write_Com(unsignedcharcom){while(LCD_Check_Busy());//忙则等待RS=0;RW=0;EN=1;DataPort=com;_nop_();EN=0;}/*------------------------------------------------lcd1602写入数据函数------------------------------------------------*/voidLCD_Write_Data(unsignedcharData){while(LCD_Check_Busy());//忙则等待RS=1;RW=0;EN=1;DataPort=Data;_nop_();EN=0;}/*------------------------------------------------lcd1602清屏函数------------------------------------------------*/voidLCD_Clear(void){LCD_Write_Com(0x01);//写指令DelayMs(5);//延时,便于执行完成}/*------------------------------------------------lcd1602写入字符串函数------------------------------------------------*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)//x代表列,y代表行{if(y==1)//y==1代表显示在LCD1602第一行{LCD_Write_Com(0x80+x);//表示第一行}else//否则就是第二行,就是必须y==2{LCD_Write_Com(0xC0+x);//表示第二行}while(*s){LCD_Write_Data(*s);//写入字符s++;//指向下一个地址}}/*------------------------------------------------光标定位函数------------------------------------------------*/voidLCD_Pos(unsignedcharx,unsignedchary)//x代表列,y代表行{if(y==1)//y==1代表显示在LCD1602第一行{LCD_Write_Com(0x80+x);//表示第一行}else{LCD_Write_Com(0xC0+x);//表示第二行}}/*------------------------------------------------lcd1602初始化函数------------------------------------------------*/voidLCD_Init(void){LCD_Write_Com(0x38);/*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08);/*显示关闭*/LCD_Write_Com(0x01);/*显示清屏*/LCD_Write_Com(0x06);/*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C);/*显示开及光标设置*/}
本文标题:lcd1602驱动程序
链接地址:https://www.777doc.com/doc-5694470 .html