LCD1602库函数.docx

上传人:b****4 文档编号:12278164 上传时间:2023-04-17 格式:DOCX 页数:21 大小:18.41KB
下载 相关 举报
LCD1602库函数.docx_第1页
第1页 / 共21页
LCD1602库函数.docx_第2页
第2页 / 共21页
LCD1602库函数.docx_第3页
第3页 / 共21页
LCD1602库函数.docx_第4页
第4页 / 共21页
LCD1602库函数.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

LCD1602库函数.docx

《LCD1602库函数.docx》由会员分享,可在线阅读,更多相关《LCD1602库函数.docx(21页珍藏版)》请在冰豆网上搜索。

LCD1602库函数.docx

LCD1602库函数

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

#include"stm32f10x.h"

#include"LCD1602.h"

#ifndefLCD1602_STM32_C

#defineLCD1602_STM32_C

#endif

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

*名称:

LCD_busy()

*功能:

读LCD忙碌状态,直到LCD1602不忙为止

*入口参数:

*出口参数:

无符号字节类型,返回0表示LCD已经操作完毕

,空闲。

*说明:

一般在写入新命令或数据之前用while

(LCD_busy())语句等待LCD就绪

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

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

uint8_tLCD_busy(void)

{

LCD_RS_0;

delay_nus

(1);

LCD_RW_1;

delay_nus

(1);

do

{

LCD_EN_0;

delay_nus(200);

LCD_EN_1;

delay_nus(200);

}

while(GPIOD->IDR&0x8000);//GPIO->IDR&10000000

一直等到STA7为0即最高位表示允许进行读写操作

LCD_EN_0;

return(uint8_t)0;

}

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

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

*功能:

一直等待到LCD1602空闲

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

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

voidWait_Leisure(void)

{

LCD_busy();

}

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

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

*功能:

写入LCD初始化时的命令,不可以检测忙状态

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

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

voidLCD_WriteInitcmd(ucharcmd)

{

LCD_RS_0;

//delay_nus

(1);

LCD_RW_0;

//delay_nus

(1);

DATAOUT=cmd;

LCD_EN_0;

//delay_nus(300);

LCD_EN_1;

delay_nus(300);

LCD_EN_0;

delay_nms

(2);

}

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

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

*名称:

LCD_Writecmd()

*功能:

写指令到LCD1602,指令数据占一个字节

*入口参数:

cmd:

待写入的指令

*出口参数:

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

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

voidLCD_Writecmd(ucharcmd)

{

//while(LCD_busy());//空闲的话返回值为0

LCD_RS_0;//对同一个寄存器的两次写入,中间延时一

//delay_nus

(1);

LCD_RW_0;

//delay_nus

(1);

LCD_EN_0;

//delay_nus(300);//产生脉冲

DATAOUT=cmd;

LCD_EN_1;

delay_nus(300);//必要的延时

LCD_EN_0;//下降沿,LCD1602开始工作

delay_nus(50);

}

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

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

*名称:

LCD_Writedata()

*功能:

写一字节数据到LCD1602

*入口参数:

dat:

无符号字节类型,0~255包括各个ASCII

码字符

*出口参数:

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

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

voidLCD_Writedata(uchardat)

{

//while(LCD_busy());//等待LCD1602空闲

LCD_RS_1;

//delay_nus

(1);

LCD_RW_0;

//delay_nus

(1);

DATAOUT=dat;

LCD_EN_1;//先拉高

delay_nus(300);//很重要的延时,经调试,延时300us

以上才可以

LCD_EN_0;//下降沿,开始写入有效数据

delay_nus(50);

}

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

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

*名称:

LCD_pos()

*功能:

设定显示位置

*入口参数:

pos:

显示位置,值的范围如下:

*0x00----------------0x0f0x10-------0x27第一

行(一次显示16个字符)

*0x40----------------0x4f0x50-------0x67第二

*出口参数:

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

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

voidLCD_pos(ucharpos)

{

LCD_Writecmd(pos|0x80);

}

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

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

*名称:

LCD_Setpos()

*功能:

根据习惯设定显示位置

*入口参数:

row:

行,row=1表示第一行,row=2表示第二行

*col:

列,0~15,用于指定显示的列,范围可以

是0~40

*出口参数:

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

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

voidLCD_Setpos(ucharrow,ucharcol)

{

if(row==1)LCD_Writecmd(col|0x80);//10000000

第一行

elseLCD_Writecmd(col|0xC0);//11000000第二

}

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

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

*功能:

显示一个字符

*入口:

ch:

待显示的字符

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

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

voidLCD_DispChar(charch)

{

LCD_Writedata(ch);

}

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

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

*功能:

在指定位置显示一个字符

*入口:

row:

行1或2col:

列,0~15

*ch:

待显示的字符

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

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

voidLCD_Setpos_DispChar(ucharrow,ucharcol,char

ch)

{

LCD_Setpos(row,col);

LCD_Writedata(ch);

}

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

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

*名称:

LCD_DispString()

*功能:

使LCD1602显示一个字符串,显示位置需提前设

*入口参数:

str[]:

待显示的字符串

*出口参数:

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

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

voidLCD_DispString(charstr[])

{

uchari=0;

while(str[i]!

='\0')

{

LCD_Writedata(str[i]);

++i;

}

}

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

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

*名称:

LCD_Setpos_DispString()

*功能:

使LCD1602从指定位置开始显示一个字符串

*入口参数:

row:

显示行,1或2

*col:

显示列,0~15(0~40)

*str[]:

待显示的字符串

*出口参数:

*说明:

指定位置是显示的初始位置,第一个字符显示

的位置

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

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

voidLCD_Setpos_DispString(ucharrow,uchar

col,charstr[])

{

LCD_Setpos(row,col);

LCD_DispString(str);

}

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

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

*名称:

LCD_Dispnum()

*功能:

显示一个不超过8位的整数,显示位置需提前设

*入口参数:

num:

待显示的整数,不超过8位

*出口参数:

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

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

voidLCD_Dispnum(uint32_tnum)

{

uinti=0,j,k=0,wei,q;

charstr[9];

if(num>=10000000)wei=8;

elseif(num>=1000000)wei=7;

elseif(num>=100000)wei=6;

elseif(num>=10000)wei=5;

elseif(num>=1000)wei=4;

elseif(num>=100)wei=3;

elseif(num>=10)wei=2;

elsewei=1;

for(i=wei;i>0;i--)

{q=1;

j=1;//i=1时,q=1,得到个位

for(;j

str[k++]=num/q+'0';

num%=q;

}

str[k]='\0';//添加字符串结束标志

LCD_DispString(str);//显示字符串

}

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

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

*名称:

LCD_Setpos_Dispnum()

*功能:

在指定位置显示一个不超过8位的整数

*入口参数:

num:

待显示的整数,不超过8位

*出口参数:

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

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

voidLCD_Setpos_Dispnum(ucharrow,uchar

col,uint32_tnum)

{

LCD_Setpos(row,col);

LCD_Dispnum(num);

}

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

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

*名称:

LCD_DispDecimal()

*功能:

显示一个有效位不超过8位的浮点数,显示位置

需要提前设定

*入口参数:

num:

待显示的浮点数放大后得到的整数,不超

过8位

*dot:

小数点的位数

*出口参数:

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

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

voidLCD_DispDecimal(uint32_tnum,uchardot)

{

uinti=0,j,k=0,wei,q;

charstr[10];

if(num>=10000000)wei=8;

elseif(num>=1000000)wei=7;

elseif(num>=100000)wei=6;

elseif(num>=10000)wei=5;

elseif(num>=1000)wei=4;

elseif(num>=100)wei=3;

elseif(num>=10)wei=2;

elsewei=1;

for(i=wei;i>0;i--)

{q=1;

j=1;//i=1时,q=1,得到个位

for(;j

str[k++]=num/q+'0';

num%=q;

}

str[k]='\0';//添加字符串结束标志

for(i=8;i>0;i--)

{if((str[i]>='0')&&(str[i]<='9'))break;

}

str[i+2]='\0';//添加字符串结束符

for(j=0;j

备插入

{

str[i+1]=str[i];

}

str[i+1]='.';//插入小数点

LCD_DispString(str);//显示浮点小数

}

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

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

*名称:

LCD_Setpos_DispDecimal()

*功能:

在指定位置显示一个有效位不超过8位的浮点数

*入口参数:

row:

待显示的行1,2

*col:

待显示的列0~15

*num:

待显示的浮点数放大10的整数倍后得到的

整数,不超过8位

*dot:

小数点的位数

*出口参数:

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

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

voidLCD_Setpos_DispDecimal(ucharrow,uchar

col,uint32_tnum,uchardot)

{

LCD_Setpos(row,col);

LCD_DispDecimal(num,dot);

}

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

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

*名称:

LCD_DispDateTime()

*功能:

显示日历,显示日期与时间

*入口参数:

year:

年,可以是任意值

*month:

月,1~12

*day:

日,1~31

*hour:

时,1~24或1~12

*min:

分,0~59

*sec:

秒,0~59

*出口参数:

*说明:

使用前必须先宏定义USE_LCD_DISP_DATE,在包

含文件之前定义有效

*显示格式:

Date:

yyyy-mm-dd*

*Time:

hh:

mm:

ss*

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

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

voidLCD_DispDateTime(uint32_tyear,uchar

month,ucharday,ucharhour,ucharmin,ucharsec)

{

LCD_Setpos(1,0);

LCD_DispString("Date:

");

LCD_Dispnum((uint32_t)year);

LCD_DispChar('-');

LCD_Dispnum((uint32_t)month);

LCD_DispChar('-');

LCD_Dispnum((uint32_t)day);

LCD_Setpos(1,15);

LCD_DispChar('*');//第一行结束符显示

LCD_Setpos(2,0);

LCD_DispString("Time:

");

LCD_Dispnum((uint32_t)hour);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)min);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)sec);

LCD_Setpos(2,15);

LCD_DispChar('*');//第二行结束符显示

}

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

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

*名称:

LCD_DispStopWatch()

*功能:

显示秒表,显示时,分,秒,10毫秒,精确到

10ms

*入口参数:

hour:

时,1~24或1~12

*min:

分,0~59

*sec:

秒,0~59

*tenms:

10ms计数值,如3表示30ms

*出口参数:

*显示格式:

CurrentTime:

*

*hh:

mm:

ss:

tt*

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

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

voidLCD_DispStopWatch(ucharhour,ucharmin,uchar

sec,uchartenms)

{

LCD_Setpos(1,0);

LCD_DispString("CurrentTime:

");

LCD_Setpos(1,15);

LCD_DispChar('*');//第一行结束符显示

LCD_Setpos(2,2);

LCD_Dispnum((uint32_t)hour);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)min);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)sec);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)tenms);

LCD_Setpos(2,15);

LCD_DispChar('*');//第二行结束符显示

}

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

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

*名称:

LCD_DispFreq()

*功能:

显示频率计,动态自动调整频率显示

*入口参数:

freq:

可以显示8位整数表示的频率值,频率范

围1Hz~99MHz

*出口参数:

*说明:

入口的频率值单位是Hz,显示函数自动选择合

适的显示方式

*freq>=1000000显示成6位小数的MHz

*elsefreq>=1000显示成3位小数的KHz

*elsefreq>=0默认显示单位是Hz(三个区

间互斥)

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

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

voidLCD_DispFreq(uint32_tfreq)

{

LCD_Setpos(1,0);

LCD_DispString("CurrentFreq:

");

LCD_Setpos(2,1);//显示位置

if(freq>=1000000)

{

LCD_DispDecimal(freq,6);

LCD_DispString("MHz");

}

elseif(freq>=1000)

{

LCD_DispDecimal(freq,3);

LCD_DispString("KHz");

}

else{LCD_Dispnum(freq);

LCD_DispString("Hz");

}

LCD_Setpos(2,14);

LCD_DispString("OK");

}

//屏幕整体左移一格,用于滚动显示

voidLCD_ShiftLeft()

{

LCD_Writecmd(0x18);

}

//屏幕整体右移一格,用于滚动显示

voidLCD_ShiftRight(void)

{

LCD_Writecmd(0x1C);

}

//清屏,清除显示

voidLCD_CLEAR(void)

{

LCD_Writecmd(0x01);

}

//使光标还回原点位置

voidLCD_Return(void)

{

LCD_Writecmd(0x02);

}

//关显示

voidLCD_Close(void)

{

LCD_Writecmd(0x08);

}

//开显示

voidLCD_Open(void)

{

LCD_Writecmd(0x0C);

}

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

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

*名称:

LCD_FlickerChar()

*功能:

使指定位置字符闪烁,不显示光标

*入口参数:

row:

行1,2

*col:

列0~15

*出口参数:

*说明:

写命令0x0D不显示光标的闪烁,写命令0x0F是

显示光标的闪烁

*一旦设定闪烁后,会根据位置变化闪烁,关闪

烁写命令0x0C

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

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

当前位置:首页 > PPT模板 > 其它模板

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

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