LCD1602和LCD12864程序并行与串行Word文件下载.docx

上传人:b****5 文档编号:16741976 上传时间:2022-11-25 格式:DOCX 页数:18 大小:19.29KB
下载 相关 举报
LCD1602和LCD12864程序并行与串行Word文件下载.docx_第1页
第1页 / 共18页
LCD1602和LCD12864程序并行与串行Word文件下载.docx_第2页
第2页 / 共18页
LCD1602和LCD12864程序并行与串行Word文件下载.docx_第3页
第3页 / 共18页
LCD1602和LCD12864程序并行与串行Word文件下载.docx_第4页
第4页 / 共18页
LCD1602和LCD12864程序并行与串行Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

LCD1602和LCD12864程序并行与串行Word文件下载.docx

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

LCD1602和LCD12864程序并行与串行Word文件下载.docx

/*------------------------------------------------

LCD1602写入命令函数

------------------------------------------------*/

voidLCD1602_XZL(unsignedcharml)

{

LCD1602_PM();

//忙如此等待

LCD1602_RS=0;

LCD1602_RW=0;

LCD1602_E=1;

LCD1602_SJ=ml;

//稍作延时给LCD反响的时间

LCD1602_E=0;

if(ml==0x01|ml==0x02)YS_ms

(2);

//清屏和地址归位大概需2ms时间处理

YS_us(35);

//其他指令大概需35us

LCD1602写入数据函数

voidLCD1602_XSJ(unsignedcharsj)

LCD1602_RS=1;

LCD1602_RW=0;

LCD1602_E=1;

LCD1602_SJ=sj;

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显示函数库*********

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

yscx.C"

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);

//小数局部存在有效数字如此显示小数点

////////////整数显示局部////////////////////////////////////////////

{LCD1602_XSJ(ascll1602[xc%a]);

while(xc!

=0);

if(fs)LCD1602_XSJ(0x2d);

//判是否需要显示负号

LCD1602_XZL(0x06);

//复原光标移动方向

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

LCD1602LCD1602字符显示程序

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

voidLCD1602_ZFXS(unsignedchar*SJ,t,ml)/*h:

行,SJ:

字符串指针,t:

间隔时间*/

{

//写指令

while(*SJ)//是否显示完

LCD1602_XSJ(*SJ);

//写数据

SJ++;

//取下一个字符

YS_ms(t);

//延时

LCD12864根底函数—并行

#ifndef__LCD12864_JCK_C__

#define__LCD12864_JCK_C__

**六哥LCD12864根底函数库**

/********************测忙碌**********************/

//测忙碌子程序

//RS=0,RW=1,E=H,D0-D7=状态字

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

voidLCD12864_PM(void)

LCD12864_RS=0;

//记得在包含该头文件前,定义引脚

LCD12864_RW=1;

LCD12864_E=1;

{temp1=LCD12864_SJ;

LCD12864_SJ=0xFF;

LCD12864_E=0;

}

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

//写命令子程序

//

voidLCD12864_XZL(unsignedcharml)/*写命令*/

LCD12864_PM();

LCD12864_RW=0;

LCD12864_SJ=ml;

YS_us(0);

if(ml==0x01|ml==0x02)YS_ms(3);

//清屏和地址归位大概需3ms时间处理

YS_us(50);

//其他指令大概需50us

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

//写数据子程序

voidLCD12864_XSJ(unsignedcharsj)

LCD12864_RS=1;

LCD12864_SJ=sj;

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

//复位、通讯方式选择

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);

LCD12864根底函数—串行

#ifndef__LCD12864_JCK_CX_C__

#define__LCD12864_JCK_CX_C__

**串行**

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

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

A:

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

B:

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

D:

即表示并行的高四位数据

S:

即表示并行的低四位数据

注:

串行要把PSB端为低电平

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

voidLCD12864_CXTX(unsignedcharfs,sj)

unsignedchari;

//时钟SCLK

///CS片选

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

for(i=0;

i<

8;

i++)

//MCU与LCD速率匹配

if(i<

6)LCD12864_RW=1;

//读LCD数据,前6位为1;

后两位为0

elseLCD12864_RW=0;

//命令格式11111100B,0xfc

YS_us(5);

//给LCD反响的时间

//给LCD反响的时间

while(LCD12864_RW);

//判忙只需要取最高位,而不管后面7位

24;

i++)//、、、、送3字节

LCD12864_RW=fs&

0x80;

//数据SID

fs<

<

=1;

//MCU与LCD速率匹配

//时钟SCLK

if(i==7)fs=sj&

0xf0;

//取数据高四位

if(i==15)fs=sj<

4;

//取数据低四位

//恢复高电平不影响其他用途

LCD12864_CXTX(0xf8,ml);

//命令格式11111000B,0xf8

if(ml==0x01|ml==0x02)YS_ms(4);

//清屏和地址归位大概需4ms时间处理

LCD12864_CXTX(0xfa,sj);

//命令格式11111010B,0xfa

P26=0;

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

//34H--扩大指令操作

LCD12864显示函数

#ifndef__LCD12864_XSK_C__

#define__LCD12864_XSK_C__

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

LCD12864_JCK_cx.C"

//包含根底库

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;

case2:

x|=0x88;

case3:

x|=0x98;

default:

;

return(x);

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

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

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

十进制:

-2147483647,十六进制:

0H-7FFFFFFFH

x:

显示列,取值围0-7

y:

显示行,取值围0-3

voidLCD12864_SZXS(signedlongsj,unsignedcharxsfs,x,y)

//显示缓存

unsignedchard[13];

LCD12864_XZL(0x04);

//设置光标左移

LCD12864_XZL(LCD12864_SZDZ(x,y));

//写入显示地址

y=0;

10)

{x=16;

d[y]=0x48;

//十六进制显示H

y++;

}//

{if(sj<

0)//十进制正负数判断

}//负号显示使能

//小数点显示使能

x=10;

{sj=xc%x;

if(bf|sj!

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

xc/=x;

elseif(bf)

{d[y]=0x30;

//判是否需要补0

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

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1