📄 lcd.h
字号:
/****************************************************************************/
//功能: LCD1602液晶显示程序
//输入: 无
//输出: 无
//备注: LCD1602采用四线连接方式4~7
/****************************************************************************/
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
/****************************端口宏定义**************************************/
//LCD1602端口连接按照下面方式连接,RW接地.
#define LCD_EN_PORT PORTA
#define LCD_EN_DDR DDRA
#define LCD_EN (1<<PA3)
#define LCD_RS_PORT PORTA
#define LCD_RS_DDR DDRA
#define LCD_RS (1<<PA1)
#define LCD_DATA_PORT PORTA
#define LCD_DATA_DDR DDRA
#define LCD_DATA_PIN PINA
#define LCD_DATA ((1<<4)|(1<<5)|(1<<6)|(1<<7))
/****************************函数申明****************************************/
void LCD_init(void);
void LCD_en_write(void);
void LCD_Write_char(uchar command,uchar data);
void LCD_Clear(void);
void LCD_set_xy (uchar x, uchar y);
void LCD_DisplayCharacter (uchar Char);
void LCD_DisplayString (uchar x, uchar y ,uchar *string);
void LCD_DisplayInt (uchar x, uchar y ,uint t);
void LCD_Displayasc (uchar x, uchar y, uchar asc);
void LCD_DisplayLong(uchar x, uchar y ,unsigned long t);
/*******************************液晶初始化***********************************/
void LCD_init(void) //液晶初始化
{
LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出
LCD_EN_DDR|=LCD_EN; //设置EN方向为输出
LCD_RS_DDR|=LCD_RS; //设置RS方向为输出
LCD_Write_char(1,0x28);
LCD_en_write();
delay_nus(40);
LCD_Write_char(1,0x28); //4位显示
LCD_Write_char(1,0x0c); //显示开
LCD_Write_char(1,0x01); //清屏
delay_nms(2);
}
/*******************************液晶使能*************************************/
void LCD_en_write(void) //液晶使能
{
LCD_EN_PORT|=LCD_EN;
delay_nus(1);
LCD_EN_PORT&=~LCD_EN;
}
/*******************************写操作***************************************/
void LCD_Write_char(unsigned char command,unsigned char data)
{
delay_nus(16);
if(command==1) //command为1则写指令
LCD_RS_PORT&=~LCD_RS; //RS=0
else //command为零则写数据
LCD_RS_PORT&=LCD_RS;
LCD_DATA_PORT&=0x0f; //清高四位
LCD_DATA_PORT|=data&0xf0; //写高四位
LCD_en_write();
data=data<<4; //低四位移到高四位
LCD_DATA_PORT&=0x0f; //清高四位
LCD_DATA_PORT|=data&0xf0; //写低四位
LCD_en_write();
}
/*******************************清屏*****************************************/
void LCD_Clear(void)
{
LCD_Write_char(1,0x01);
}
/****************************************************************************/
//函数名: LCD_Cursor (char row, char column)
//功能: 设置液晶显示横,纵坐标
//输入: row,column
//输出: 无
//备注:
/****************************************************************************/
void LCD_set_xy (uchar x, uchar y)
{
uchar address;
{
if(y==0)
address=0x80+x;
else
address=0x90+x;
LCD_Write_char(1,address);
}
}
/****************************************************************************/
//函数名: LCD_DisplayCharacter (char Char)
//功能: 显示一个字符
//输入: Char
//输出: 无
//备注:
/****************************************************************************/
void LCD_DisplayCharacter (uchar Char)
{
LCD_Write_char (0,Char);
}
/****************************************************************************/
//函数名: LCD_DisplayString()
//功能: 显示一个字符串
//输入: x,y,*string
//输出: 无
//备注:
/****************************************************************************/
void LCD_DisplayString (uchar x, uchar y ,uchar *string)
{
LCD_set_xy (x, y);
while (*string)
LCD_DisplayCharacter (*string++);
}
/****************************************************************************/
//函数名: LCD_DisplayString ()
//功能: 显示一个字符串
//输入: x,y,t
//输出: 无
//备注:
/****************************************************************************/
uchar ch1[6]; //用于存放INT转换成字符串后的数据
void LCD_DisplayInt (uchar x, uchar y ,uint t)
{
unsigned char n;
unsigned char a[5]; char i, j;
unsigned char *str=ch1;
a[0]=(t/10000)%10; //取得整数值到数组
a[1]=(t/1000)%10;
a[2]=(t/100)%10;
a[3]=(t/10)%10;
a[4]=(t/1)%10;
for(i=0; i<5; i++) //转成ASCII码
a[i]=a[i]+'0';
for(i=0; a[i]=='0' && i<=3; i++);
n=5-i;
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<5; i++)
{ *str=(char)a[i]; str++; } //加入有效的数字
*str='\0';
LCD_DisplayString(x,y,ch1);
}
/****************************************************************************/
//函数名: LCD_Displayasc (char row, char column unsigned char *asc)
//功能: 显示一个ascii值
//输入: x,y,*asc
//输出: 无
//备注:
/****************************************************************************/
void LCD_Displayasc (uchar x, uchar y, char asc)
{ uchar ascii[2],temp;
temp=asc;
ascii[0]=temp+'0';
ascii[1]='\0';
LCD_DisplayString(x,y,ascii);
}
/****************************************************************************/
//函数名: LCD_DisplayLong(char row, char column ,unsigned long t)
//功能: 显示一个字符串
//输入: x,y,t
//输出: 无
//备注:
/****************************************************************************/
uchar ch2[8]; //用于存放LONG转换成字符串的数据
void LCD_DisplayLong(uchar x, uchar y ,unsigned long t)
{
uchar n;
uchar a[8];
uchar i, j;
uchar *str=ch2;
a[0]=(t/10000000)%10;
a[1]=(t/1000000)%10;
a[2]=(t/100000)%10;
a[3]=(t/10000)%10; //取得整数值到数组
a[4]=(t/1000)%10;
a[5]=(t/100)%10;
a[6]=(t/10)%10;
a[7]=(t/1)%10;
for(i=0; i<8; i++) //转成ASCII码
a[i]=a[i]+'0';
for(i=0; a[i]=='0' && i<=7; i++);
n=8-i;
for(j=8-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<8; i++)
{ *str=(char)a[i]; str++; } //加入有效的数字
*str='\0';
LCD_DisplayString(x,y,ch2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -