📄 lcd1602.c
字号:
#include "lpc21xx.h"
/**************************************************************************
一些关于LCD外部接口参数的定义
***************************************************************************/
const unsigned int LCDRS=1<<4;
const unsigned int LCDRW=1<<5;
const unsigned int LCDEN=1<<6;
const unsigned int LCDDATA=0xff<<7;
const unsigned int LCDBUSY=1<<14;
const unsigned int LCD_D0=7;
typedef unsigned char uchar;
typedef unsigned int uint;
void LcdInit(void)
{
PINSEL0|=0;
IO0DIR=(LCDRS|LCDRW|LCDEN|LCDDATA);
}
void CheckBusy(void)
{
IO0DIR &=(~LCDDATA);
IO0CLR=LCDRS|LCDDATA;
IO0SET=LCDEN|LCDRW;
while(IO0PIN&LCDBUSY)
{
IO0CLR=LCDEN;
IO0SET=LCDEN;
}
IO0CLR=LCDEN;
IO0DIR|=LCDDATA;
}
void LcdWc(uint Cmd)
{
CheckBusy();
IO0CLR=LCDRS|LCDRW|LCDDATA;
IO0SET=(Cmd<<LCD_D0)&LCDDATA ;
IO0SET=LCDEN;
IO0CLR=LCDEN;
}
void LcdWd(uint Dat)
{
CheckBusy();
IO0CLR=LCDRW|LCDDATA;
IO0SET=(Dat<<LCD_D0)&LCDDATA ;
IO0SET=LCDRS;
IO0SET=LCDEN;
IO0CLR=LCDEN;
}
void RstLcd() //复位LCD控制器
{
LcdWc(0x38); //显示模式设置
LcdWc(0x08); //显示关闭
LcdWc(0x01); //显示清屏
LcdWc(0x06); //显示光标移动位置
LcdWc(0x0c); //显示开及光标设置
}
void LcdPos(uchar yPos,uchar xPos) //设置第(xPos,yPos)个字符的DDRAM地址
{ unsigned char tmp;
xPos&=0x0f; //x位置范围是0~15,因为显示15列
yPos&=0x01; //y位置范围是0~1,因为显示2行
if(yPos==0) //显示第一行
tmp=xPos;
else
tmp=xPos+0x40; //显示第二行
tmp|=0x80;
LcdWc(tmp);
}
void WriteChar(uchar c,uchar xPos,uchar yPos) //定义WriteChar函数
{ LcdPos(xPos,yPos);
LcdWd(c);
}
void WriteString(uchar *s,uchar xPos,uchar yPos) //定义WriteString函数
{ int i=0;
LcdPos(xPos,yPos);
while(*s)
{
LcdWd(*(s++));
if(++i>16) break;
}
}
void SetCur(uchar Para) //定义光标函数
{
switch(Para)
{ case 0:
{ LcdWc(0x08); //关显示
break;
}
case 1:
{ LcdWc(0x0c); //开显示但无光标
break;
}
case 2:
{ LcdWc(0x0e); //开显示有光标但不闪烁
break;
}
case 3:
{ LcdWc(0x0f); //开显示有光标且闪烁
break;
}
default:
break;
}
}
/*****************************************************************************************
for test Use
*****************************************************************************************/
main()
{
LcdInit();
RstLcd();
WriteString("hello!",0,5);
WriteString("ZhiHuiChengJiang",1,0);
while(1)
{
// LcdWc(0x01);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -