LCD1602和LCD12864程序并行与串行.docx

上传人:b****3 文档编号:10953915 上传时间:2023-05-28 格式:DOCX 页数:22 大小:19.25KB
下载 相关 举报
LCD1602和LCD12864程序并行与串行.docx_第1页
第1页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第2页
第2页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第3页
第3页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第4页
第4页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第5页
第5页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第6页
第6页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第7页
第7页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第8页
第8页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第9页
第9页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第10页
第10页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第11页
第11页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第12页
第12页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第13页
第13页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第14页
第14页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第15页
第15页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第16页
第16页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第17页
第17页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第18页
第18页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第19页
第19页 / 共22页
LCD1602和LCD12864程序并行与串行.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

LCD1602和LCD12864程序并行与串行.docx

《LCD1602和LCD12864程序并行与串行.docx》由会员分享,可在线阅读,更多相关《LCD1602和LCD12864程序并行与串行.docx(22页珍藏版)》请在冰点文库上搜索。

LCD1602和LCD12864程序并行与串行.docx

LCD1602和LCD12864程序并行与串行

LCD1602和LCD12864的函数库,包括并行与串行

LCD1602基础函数

#ifndef__LCD1602_JCK_C__

#define__LCD1602_JCK_C__

/************************************************

****

**六哥LCD1602基础函数库**

****

**************************************************/

//使用请注意定义引脚

#include"yscx.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);

}

#endif

LCD1602显示函数

#ifndef__LCD1602_XSK_C__

#define__LCD1602_XSK_C__

/************************************************

****************

*******六哥LCD1602显示函数库*********

****************

************************************************/

#include"yscx.C"

#include"LCD1602_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(xsfs>10)

{a=16;//输出十六进制

LCD1602_XSJ(0x48);//显示H

xsfs=0;}//

else

{a=10;//否则输出十进制

if(xsfs!

=0)xsd=1;//显示小数点使能

if(sj<0)

{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);//判是否需要补0

else;//小数部分无效,不需要补0

xsfs--;

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);//延时

}

}

#endif

LCD12864基础函数—并行

#ifndef__LCD12864_JCK_C__

#define__LCD12864_JCK_C__

/************************************************

****

**六哥LCD12864基础函数库**

****

**************************************************/

//使用请注意定义引脚

#include"yscx.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,游标位置off

LCD12864_XZL(0x01);//0000,0001清DDRAM

LCD12864_XZL(0x02);//0000,0010DDRAM地址归位

LCD12864_XZL(0x80);//1000,0000设定DDRAM7位地址000,0000到地址计数器AC

LCD12864_XZL(0x06);

}

#endif

LCD12864基础函数—串行

#ifndef__LCD12864_JCK_CX_C__

#define__LCD12864_JCK_CX_C__

/************************************************

****

**六哥LCD12864基础函数库**

**串行**

**************************************************/

//使用请注意定义引脚

#include"yscx.c"

/*******************串行通信*********************

分别发送三个字节,11111AB0,DDDD0000,SSSS000,

A:

即表示并行的RW,1为读,0为写

B:

即表示并行的RS,1为数据,0为指令

D:

即表示并行的高四位数据

S:

即表示并行的低四位数据

注:

串行要把PSB端为低电平

*************************************************/

voidLCD12864_CXTX(unsignedcharfs,sj)

{

unsignedchari;

LCD12864_E=0;//时钟SCLK

LCD12864_RS=1;///CS片选

do////LCD判忙=============

{

for(i=0;i<8;i++)

{

YS_us

(1);//MCU与LCD速率匹配

if(i<6)LCD12864_RW=1;//读LCD数据,前6位为1;后两位为0

elseLCD12864_RW=0;//命令格式11111100B,0xfc

YS_us

(1);//MCU与LCD速率匹配

LCD12864_E=1;//时钟SCLK

YS_us

(1);//MCU与LCD速率匹配

LCD12864_E=0;//时钟SCLK

}

YS_us(5);//给LCD反应的时间

LCD12864_E=1;//时钟SCLK

YS_us

(1);//给LCD反应的时间

}

while(LCD12864_RW);//判忙只需要取最高位,而不管后面7位

LCD12864_E=0;//时钟SCLK

LCD12864_RS=0;///CS片选

YS_us

(1);//给LCD反应的时间

LCD12864_RS=1;///CS片选

for(i=0;i<24;i++)//、、、、送3字节

{

LCD12864_RW=fs&0x80;//数据SID

fs<<=1;

YS_us

(1);//MCU与LCD速率匹配

LCD12864_E=1;//时钟SCLK

YS_us

(1);//MCU与LCD速率匹配

if(i==7)fs=sj&0xf0;//取数据高四位

if(i==15)fs=sj<<4;//取数据低四位

LCD12864_E=0;//时钟SCLK

YS_us

(1);//MCU与LCD速率匹配

}

LCD12864_RS=0;///CS片选

LCD12864_E=1;//恢复高电平不影响其他用途

LCD12864_RW=1;//恢复高电平不影响其他用途

}

/********************写命令**********************/

voidLCD12864_XZL(unsignedcharml)/*写命令*/

{

LCD12864_CXTX(0xf8,ml);//命令格式11111000B,0xf8

if(ml==0x01|ml==0x02)YS_ms(4);//清屏和地址归位大概需4ms时间处理

YS_us(50);//其他指令大概需50us

}

/********************写数据**********************/

voidLCD12864_XSJ(unsignedcharsj)

{

LCD12864_CXTX(0xfa,sj);//命令格式11111010B,0xfa

}

/********************初始化**********************/

//复位、通讯方式选择

/************************************************/

voidLCD12864_CSH(void)

{

P26=0;//通讯方式为串行通信PSB=0,在设计电路时就把PSB端焊好,节省I/O

//LCD12864_XZL(0x34);//34H--扩充指令操作

LCD12864_XZL(0x30);//功能设置,一次送8位数据,基本指令集

LCD12864_XZL(0x0C);//0000,1100整体显示,游标off,游标位置off

LCD12864_XZL(0x01);//0000,0001清DDRAM

LCD12864_XZL(0x80);//1000,0000设定DDRAM7位地址000,0000到地址计数器AC

LCD12864_XZL(0x06);

}

#endif

LCD12864显示函数

#ifndef__LCD12864_XSK_C__

#define__LCD12864_XSK_C__

/************************************************

****************

*******六哥LCD12864显示函数库*********

****************

************************************************/

//使用请注意定义引脚

#include"LCD12864_JCK_cx.C"//包含基础库

//为保证显示数制时的运行效率,制作了0—9,A—F的ascll码表

unsignedcharcodeascll12864[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};

/*****************************************************

**********LCD12864设置显示地址函数*********************

******************************************************/

unsignedcharLCD12864_SZDZ(unsignedcharx,y)//

{

switch(y)

{case0:

x|=0x80;break;

case1:

x|=0x90;break;

case2:

x|=0x88;break;

case3:

x|=0x98;break;

default:

;

}

return(x);

}

/*****************************************************

**********LCD12864数制显示函数************************

******************************************************

sj:

需要显示的数据,取值范围:

十进制:

-2147483648-2147483647,十六进制:

0H-7FFFFFFFH

xsfs:

显示方式,进制和小数点的判断依据,

x:

显示列,取值范围0-7

y:

显示行,取值范围0-3

*/

voidLCD12864_SZXS(signedlongsj,unsignedcharxsfs,x,y)

{

unsignedlongxc;//显示缓存

unsignedchard[13];

bitxsd,fs,bf=0;

xsd=0;

fs=0;

LCD12864_XZL(0x04);//设置光标左移

LCD12864_XZL(LCD12864_SZDZ(x,y));//写入显示地址

y=0;

if(xsfs>10)

{x=16;//输出十六进制

d[y]=0x48;//十六进制显示H

y++;

}//

else

{if(sj<0)//十进制正负数判断

{sj=~sj+1;

fs=1;}//负号显示使能

if(xsfs!

=0)xsd=1;//小数点显示使能

x=10;

}//

xc=sj;

if(xc!

=0)//显示数据不为0;则显示

{while(xsd)//判是否需要显示小数

{if(xc!

=0)//是否还需要计算

{sj=xc%x;

if(bf|sj!

=0)//小数部分为0不需要显示

{d[y]=ascll12864[xc%x];

y++;//取数的ascll码并显示

bf=1;//小数部分不为0标志,小数部分数字有效

}

xc/=x;//取剩下的数

}

elseif(bf)

{d[y]=0x30;//判是否需要补0

y++;}

else;//小数部分无效,不需要补

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2