?? lcd1602.h
字號:
/**************************************************************************
THE 1602 CHAR LCD LIB
COPYRIGHT (c) 2005 BY JJJ.
-- ALL RIGHTS RESERVED --
File Name: LCD.h
Author: Jiang Jian Jun
Created: 2005/4/3
Modified: NO
Revision: 1.0
***************************************************************************/
#ifndef LCD_CHAR_1602_2005_4_9
#define LCD_CHAR_1602_2005_4_9
#define uint32 unsigned long
//Port Definitions**********************************************************
#define rs (1<<8) //P0.8 <---> RS
#define rw (1<<9) //P0.9 <---> RW
#define en (1<<10) //P0.10 <---> En
#define busy (1<<7)
// Waite function
void Delay(void)
{
uint32 i=0x01;
while(--i){;}
// i=0xff;
// while(i--){;}
}
//內部等待函數**************************************************************************
void LCD_Wait(void)
{
IODIR=0x700; // set P0.0...P0.7 as input pins
while(1)
{
IOCLR=rs; Delay();
IOSET=rw; Delay();
IOCLR=0x00ff; Delay(); //liwx added this line
IOSET=en; Delay();
if(!(IOPIN & busy)) break;
IOCLR=en; Delay();
}
IOCLR=en; Delay();
IODIR=0x7ff; Delay(); // set P0.0...P0.7 as output
}
//向LCD寫入命令或數據************************************************************
// the "style" parameter values are followed
#define LCD_DATA 1 // Data
#define LCD_COMMAND 0 // Command
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光標返回原點
void LCD_Write(unsigned char style, unsigned char input)
{
LCD_Wait(); // check if LCD is busy
if (style==LCD_DATA)
{
IOSET=rs; Delay();
} else {
IOCLR=rs; Delay(); //全部清零
}
IOCLR=rw; Delay();
IOCLR=0xff; Delay(); //先清零
IOSET=input; Delay(); //再送數
IOSET=en; Delay();
IOCLR=en; Delay();
}
//設置顯示模式************************************************************
#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()
{
IOCLR=en;
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,0x80|(x-0x40));
}
void Print(unsigned char *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
/*
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 + -