📄 lcd1602.h
字号:
#ifndef __LCD1602_H__
#define __LCD1602_H__
/**************************************************************************
THE 1602 CHAR LCD LIB SUPPORT FOR SPECE060A
COPYRIGHT (c) 2006 BY stebin
-- ALL RIGHTS RESERVED --
File Name: LCD1602.h
Author: stebin(一水寒)
Created: 2006/12/9
Modified: no
Last Revision: 1.0
Reference: Jiang Jian Jun's "THE 1602 CHAR LCD LIB with keil51"
***************************************************************************/
#include "spce061v004.h"
#define LcdRs 0x2000
#define LcdRw 0x4000
#define LcdEn 0x8000
#define M_Mask 0x00ff
//***************************************************************************/
void Data_Output(unsigned char cmd)//数据输出
{
*P_IOB_Dir=*P_IOB_Dir|M_Mask;
*P_IOB_Attrib=*P_IOB_Attrib|M_Mask;
*P_IOB_Data=*P_IOB_Buffer|cmd;
}
unsigned char Data_Input(void)//读取端口信号
{
*P_IOB_Dir=*P_IOB_Dir&(~M_Mask);
*P_IOB_Attrib=*P_IOB_Attrib&(~M_Mask);
*P_IOB_Data=*P_IOB_Buffer&(~M_Mask);
return *P_IOB_Data;
}
void One_output(unsigned char n,unsigned char d)//单一引脚输出
{
*P_IOB_Dir=*P_IOB_Dir|n;
*P_IOB_Attrib=*P_IOB_Attrib|n;
if(d==1)
{
*P_IOB_Data=*P_IOB_Buffer|n;
}
else { *P_IOB_Data=*P_IOB_Buffer&(~n); }
return;
}
//内部等待函数**************************************************************************
unsigned char LCD_Wait(void)//等待忙信号
{
One_output(LcdRs,0);
One_output(LcdRw,1); *P_Watchdog_Clear=0x0001;//*P_Watchdog_Clear=0x0001;延时一段时间
One_output(LcdEn,1); *P_Watchdog_Clear=0x0001;
while(Data_Input()&0x0080)
{*P_Watchdog_Clear=0x0001;}
One_output(LcdEn,0);
return Data_Input();
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点
void LCD_Write(unsigned char style, unsigned char input)
{
One_output(LcdEn,0);
One_output(LcdRs,style);
One_output(LcdRw,0); *P_Watchdog_Clear=0x0001;//*P_Watchdog_Clear=0x0001;延时一段时间
Data_Output(input); *P_Watchdog_Clear=0x0001;//注意顺序
One_output(LcdEn,1); *P_Watchdog_Clear=0x0001;//注意顺序
One_output(LcdEn,0); *P_Watchdog_Clear=0x0001;
LCD_Wait();
}
//设置显示模式************************************************************
#define LCD_SHOW 0x04 //显示开
#define LCD_HIDE 0x00 //显示关
#define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标
#define LCD_FLASH 0x01 //光标闪动
#define LCD_NO_FLASH 0x00 //光标不闪动
void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//设置输入模式************************************************************
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default
#define LCD_MOVE 0x01 // 画面可平移
#define LCD_NO_MOVE 0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//移动光标或屏幕************************************************************
/*
#define LCD_CURSOR 0x02
#define LCD_SCREEN 0x08
#define LCD_LEFT 0x00
#define LCD_RIGHT 0x04
void LCD_Move(unsigned char object, unsigned char direction)
{
if(object==LCD_CURSOR)
LCD_Write(LCD_COMMAND,0x10|direction);
if(object==LCD_SCREEN)
LCD_Write(LCD_COMMAND,0x18|direction);
}
*/
//初始化LCD************************************************************
void LCD_Initial()
{
One_output(LcdEn,0);
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
//AC递增, 画面不动
}
//*********************跳到任意行列****************************************
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80+x);
if(y==1)
LCD_Write(LCD_COMMAND,0xc0+x);
}
void Print(unsigned char *str)//打印函数
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
return;
}
void PrintNO(unsigned int number)//打印数字函数
{
unsigned int temp=1 ;
unsigned int n;
n=number;
while(n>9)
{
n/=10;
temp*=10;
}
do
{
n=number/temp;
number%=temp;
temp/=10;
LCD_Write(LCD_DATA,n+'0');
}
while(number);
return;
}
/*
void LCD_LoadChar(unsigned char user[8], unsigned char place)
{
unsigned char i;
LCD_Write(LCD_COMMAND,0x40|(place*8));
for(i=0; i<8; i++)
LCD_Write(LCD_DATA,user[i]);
}
*/
//************************************************************************
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -