您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > LCD1602和LCD12864程序-并行与串行
LCD1602和LCD12864的函数库,包括并行与串行LCD1602基础函数#ifndef__LCD1602_JCK_C__#define__LCD1602_JCK_C__/******************************************************六哥LCD1602基础函数库********************************************************///使用请注意定义引脚#includeyscx.c/*****************************************************************LCD1602判忙函数******************************************************************/voidLCD1602_PM(void){unsignedchartemp1;//状态信息(判断是否忙)LCD1602_SJ=0xFF;//记得在包含该头文件前,定义引脚LCD1602_RS=0;//记得在包含该头文件前,定义引脚LCD1602_RW=1;//记得在包含该头文件前,定义引脚LCD1602_E=1;//记得在包含该头文件前,定义引脚do{temp1=LCD1602_SJ;//记得在包含该头文件前,定义引脚LCD1602_SJ=0xFF;}while(temp1&0x80);LCD1602_E=0;//记得在包含该头文件前,定义引脚YS_us(1);//}/*------------------------------------------------LCD1602写入命令函数------------------------------------------------*/voidLCD1602_XZL(unsignedcharml){LCD1602_PM();//忙则等待LCD1602_RS=0;//记得在包含该头文件前,定义引脚LCD1602_RW=0;//记得在包含该头文件前,定义引脚LCD1602_E=1;//记得在包含该头文件前,定义引脚LCD1602_SJ=ml;//记得在包含该头文件前,定义引脚YS_us(1);//稍作延时给LCD反应的时间LCD1602_E=0;//记得在包含该头文件前,定义引脚if(ml==0x01|ml==0x02)YS_ms(2);//清屏和地址归位大概需2ms时间处理YS_us(35);//其他指令大概需35us}/*------------------------------------------------LCD1602写入数据函数------------------------------------------------*/voidLCD1602_XSJ(unsignedcharsj){LCD1602_PM();//忙则等待LCD1602_RS=1;//记得在包含该头文件前,定义引脚LCD1602_RW=0;//记得在包含该头文件前,定义引脚LCD1602_E=1;//记得在包含该头文件前,定义引脚LCD1602_SJ=sj;//记得在包含该头文件前,定义引脚YS_us(1);//稍作延时给LCD反应的时间LCD1602_E=0;//记得在包含该头文件前,定义引脚}/*------------------------------------------------LCD1602初始化函数------------------------------------------------*/voidLCD1602_CSH(void){LCD1602_XZL(0x38);/*显示模式设置*/LCD1602_XZL(0x08);/*显示光标移动设置*/LCD1602_XZL(0x01);/*显示开及光标设置*/LCD1602_XZL(0X06);LCD1602_XZL(0X0c);}#endifLCD1602显示函数#ifndef__LCD1602_XSK_C__#define__LCD1602_XSK_C__/***********************************************************************六哥LCD1602显示函数库*************************************************************************/#includeyscx.C#includeLCD1602_JCK_cx.C//为保证显示数制时的运行效率,制作了0—9,A—F的ascll码表unsignedcharcodeascll1602[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};/*********************************************************************LCD1602数制显示(十或十六)*******************************************************************sj:需要显示的数据ml:显示地址设定xsfs:显示方式,进制和小数点的判断依据,*/voidLCD1602_SZXS(signedlongsj,unsignedcharxsfs,ml)///wei为1输出十六进制,否则输出十进制{unsignedlongxc;//显示缓存unsignedchara;bitxsd,fs,bf=0;xsd=0;fs=0;LCD1602_XZL(0x04);//设置光标向左移LCD1602_XZL(ml);if(xsfs10){a=16;//输出十六进制LCD1602_XSJ(0x48);//显示Hxsfs=0;}//else{a=10;//否则输出十进制if(xsfs!=0)xsd=1;//显示小数点使能if(sj0){sj=~sj+1;fs=1;}//显示负号使能}xc=sj;if(xc!=0)//显示数据不为0;则显示{while(xsd)//判是否需要显示小数{if(xc!=0)//是否还需要计算{ml=xc%a;if(bf|ml!=0)//小数部分为0不需要显示{LCD1602_XSJ(ascll1602[ml]);//取数的ascll码并显示bf=1;//小数部分不为0标志,小数部分数字有效}xc/=a;//取剩下的数}elseif(bf)LCD1602_XSJ(0x30);//判是否需要补0else;//小数部分无效,不需要补0xsfs--;if(xsfs==0)//小数点位数减一{xsd=0;//小数计算部分结束标志if(bf)LCD1602_XSJ(0x2e);//小数部分存在有效数字则显示小数点}}}////////////整数显示部分////////////////////////////////////////////do{LCD1602_XSJ(ascll1602[xc%a]);//取数的ascll码并显示xc/=a;}while(xc!=0);if(fs)LCD1602_XSJ(0x2d);//判是否需要显示负号LCD1602_XZL(0x06);//还原光标移动方向}/********************************LCD1602LCD1602字符显示程序*********************************/voidLCD1602_ZFXS(unsignedchar*SJ,t,ml)/*h:行,SJ:字符串指针,t:间隔时间*/{LCD1602_XZL(ml);//写指令while(*SJ)//是否显示完{LCD1602_XSJ(*SJ);//写数据SJ++;//取下一个字符YS_ms(t);//延时}}#endifLCD12864基础函数—并行#ifndef__LCD12864_JCK_C__#define__LCD12864_JCK_C__/******************************************************六哥LCD12864基础函数库********************************************************///使用请注意定义引脚#includeyscx.c/********************测忙碌**********************///测忙碌子程序//RS=0,RW=1,E=H,D0-D7=状态字/************************************************/voidLCD12864_PM(void){unsignedchartemp1;//状态信息(判断是否忙)LCD12864_RS=0;//记得在包含该头文件前,定义引脚LCD12864_RW=1;//记得在包含该头文件前,定义引脚LCD12864_E=1;//记得在包含该头文件前,定义引脚do{temp1=LCD12864_SJ;//记得在包含该头文件前,定义引脚LCD12864_SJ=0xFF;}while(temp1&0x80);LCD12864_E=0;//记得在包含该头文件前,定义引脚YS_us(1);//}/********************写命令**********************///写命令子程序///************************************************/voidLCD12864_XZL(unsignedcharml)/*写命令*/{LCD12864_PM();LCD12864_RS=0;//记得在包含该头文件前,定义引脚LCD12864_RW=0;//记得在包含该头文件前,定义引脚LCD12864_E=1;//记得在包含该头文件前,定义引脚LCD12864_SJ=ml;//记得在包含该头文件前,定义引脚YS_us(0);//稍作延时给LCD反应的时间LCD12864_E=0;//记得在包含该头文件前,定义引脚if(ml==0x01|ml==0x02)YS_ms(3);//清屏和地址归位大概需3ms时间处理YS_us(50);//其他指令大概需50us}/********************写数据**********************///写数据子程序///************************************************/voidLCD12864_XSJ(unsignedcharsj){LCD12864_PM();LCD12864_RS=1;//记得在包含该头文件前,定义引脚LCD12864_RW=0;//记得在包含该头文件前,定义引脚LCD12864_E=1;//记得在包含该头文件前,定义引脚LCD12864_SJ=sj;//记得在包含该头文件前,定义引脚YS_us(0);//稍作延时给LCD反应的时间LCD12864_E=0;//记得在包含该头文件前,定义引脚}/********************初始化**********************///复位、通讯方式选择/************************************************/voidLCD12864_CSH(void){P26=1;//通讯方式为并口PSB=1,在设计电路时就把PSB端焊好,节省I/O//LCD12864_XZL(0x34);//34H--扩充指令操作LCD12864_XZL(0x30);//功能设置,一次送8位数据,基本指令集LCD12864_XZL(0x0C);//0000,1100整体显示,游标off,
本文标题:LCD1602和LCD12864程序-并行与串行
链接地址:https://www.777doc.com/doc-2883619 .html