📄 lcd.c
字号:
#include<p18f452.h>
#include"delays.h"
/**
* LCD.[R/W] RC5 1=读 0=写
* LCD.[R/S] RC7 1=数据 0=指令
//* LCD.[E] RC6 1->0 写数据或指令 1=读数据或指令
* LCD.[DATA] PORTD
**/
#define LCD_Data PORTD
#define DIR_Data TRISD
#define DIR_Con TRISC
#define LCD_RS PORTCbits.RC5 // 命令或数据
#define LCD_WR PORTCbits.RC6 // 读写控制
#define LCD_E PORTCbits.RC7 // 使能控制
/***********************************************************************
** 函数名称: lcdbusywait()
** 功能描述: 等待液晶空闲
** 输 入: 无
** 输 出: 状态
***********************************************************************/
/*char lcdbusywait(void) //等待LCD就绪
{
char Status;
LCD_RS=0;
LCD_WR=1;
LCD_Data=0xFF;
LCD_E=1;
Status=LCD_Data;
LCD_E=0;
while(Status & 0x80)
{
LCD_E=1;
Status=LCD_Data;
LCD_E=0;
}
LCD_WR=0;
return Status;
}*/
/***********************************************************************
** 函数名称: writedatalcd( char lcd_data)
** 功能描述: 写入一字节数据
** 输 入: unsigned char lcd_data
** 输 出: 无
***********************************************************************/
void writedatalcd( char date)
{
// lcdbusywait();
LCD_WR=0;
LCD_RS= 1;
Nop();
Nop();
LCD_E = 1;
Nop();
Nop();
LCD_Data= date;
LCD_E = 0;
delays(60,2); // delay for more than X uS
}
/***********************************************************************
** 函数名称: writecmdlcd(char lcd_cmd)
** 功能描述: send command
** 输 入: unsigned char LCD_Cmd
** 输 出: 无
***********************************************************************/
void writecmdlcd(char cmd)
{
// lcdbusywait();
LCD_WR=0;
LCD_RS = 0;
Nop();
Nop();
LCD_E = 1;
Nop();
Nop();
LCD_Data= cmd;
LCD_E = 0;
delays(60,2); // delay for more than X uS
}
/*********************************************************************
** 函数名称: lcd_initial()
** 功能描述: LCD初始化
** 输 入: 无
** 输 出: 无
** 备注 :
***********************************************************************/
void lcd_initial(void)
{
DIR_Data = 0x00;
DIR_Con = DIR_Con&0x1f;
LCD_E = 0;
LCD_WR = 0;
LCD_RS = 0;
writecmdlcd(0x3B); //数据选择8位
delays( 60,2 );
writecmdlcd(0x3B); //数据选择8位
delays( 60,2 );
writecmdlcd(0x0c); // 显示开,光标开, 游标位置反白允许
delays( 60,2 );
writecmdlcd(0x01); //清屏
delays( 60,2 );
}
/***********************************************************************
** 函数名称: lcd_set_cursor( char CurY, char CurX)
** 功能描述: set position
** 输 入: char CurY, char CurX
** 输 出: 无
***********************************************************************/
void lcd_set_cursor( char CurY, char CurX)
{
switch(CurY)
{
case 1: writecmdlcd(0X80+CurX-1);
break; // 写入第一行CurX列的地址
case 2: writecmdlcd(0X90+CurX-1);
break; // 写入第二行CurX列的地址
case 3: writecmdlcd(0X88+CurX-1);
break; // 写入第三行CurX列的地址
case 4: writecmdlcd(0X98+CurX-1);
break; // 写入第四行CurX列的地址
default: break;
}
}
/***********************************************************************
** 函数名称: putslcd( char *Str)
** 功能描述: 输出字符串
** 输 入: *Str
** 输 出: 无
***********************************************************************/
void putslcd( char *Str)
{
char Str_Temp;
while (1)
{
Str_Temp = *Str ;
if (Str_Temp != 0x00 )
{
writedatalcd(Str_Temp) ;
Str ++ ;
}
else
return ;
}
}
/***********************************************************************
** 函数名称: display_int
** 功能描述: 在指定位置显示一个整数
** 输 入: int intdata
** 输 出:
***********************************************************************/
void display_int(int intdata)
{
char i=0;
char temp[5];
char lenghth;
if (intdata==0)
{
writedatalcd('0');
}
while (intdata>0)
{
temp[i]=intdata%10+48;
intdata/=10;
i++;
}
lenghth = i;
for (i=lenghth;i-- ;)
{
writedatalcd(temp[i]);
}
}
/***********************************************************************
** 函数名称: display_float
** 功能描述: 在指定位置显示一个小数
** 输 入: int fltdata
** 输 出:
** 备注 : 显示四位小数
***********************************************************************/
void display_float(float fltdata)
{
float fltfrag;
char temp[4];
char i;
fltfrag = fltdata -(int)fltdata;
display_int((int)fltdata);
writedatalcd('.');
for (i=0 ;i<4 ;i++)
{
fltfrag*=10;
temp[i]=(int)(fltfrag)+48;
fltfrag-=(int)fltfrag;
}
for (i=0 ; i<4; i++)
{
writedatalcd(temp[i]);
}
}
/***********************************************************************
** 函数名称: display_float
** 功能描述: 在指定位置显示一个小数
** 输 入: int fltdata
** 输 出:
** 备注 : 显示四位小数
***********************************************************************/
void display_float3bit(float fltdata)
{
float fltfrag;
char temp[3];
char i;
fltfrag = fltdata -(int)fltdata;
display_int((int)fltdata);
writedatalcd('.');
for (i=0 ;i<3 ;i++)
{
fltfrag*=10;
temp[i]=(int)(fltfrag)+48;
fltfrag-=(int)fltfrag;
}
for (i=0 ; i<3; i++)
{
writedatalcd(temp[i]);
}
}
/***********************************************************************
** 函数名称: clearlcd(void)
** 功能描述: 清除液晶显示
** 输 入: 无
** 输 出: 无
***********************************************************************/
void clearlcd(void)
{
writecmdlcd(0x01); //清屏
delays( 60,5 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -