思修电子工作室"祥云小王子"开发版
/***********************端口/引脚定义区域************************/
#define LCDRS PF_ODR_ODR0 //LCD1602数据/命令选择端口
#define LCDRW PF_ODR_ODR3 //LCD1602读写控制端口
#define LCDEN PF_ODR_ODR4 //LCD1602使能信号端口
#define LCDDATA PB_ODR //LCD1602数据端口D0至D7
/****************************************************************/
//LCD1602初始化函数LCD1602_init(),无形参和返回值
/****************************************************************/
void LCD1602_init(void)
{
LCD1602_Write(0x38,0);//配置16*2显示,5*7点阵,8位数据接口
LCD1602_Write(0x0C,0);//设置开显示,不显示光标
LCD1602_Write(0x06,0);//写字符后地址自动加1
LCD1602_Write(0x01,0);//显示清0,数据指针清0
}
void LCD1602_Write(u8 cmdordata,u8 writetype)
{
if(writetype==0)//判断写入类型
LCDRS=0;//写入命令信息
else
LCDRS=1;//写入数据信息
LCDDATA=cmdordata;//向数据线端口写入信息
delay(5);//延时等待稳定
LCDEN=1;//模块使能
delay(5);//延时等待写入
LCDEN=0;//模块不使能
}
void LCD1602_DIS(void)
{
u8 i;//定义控制循环变量i
LCD1602_Write(0x80,0);//选择第一行
for(i=0;i<16;i++)
{
LCD1602_Write(table1[i],1);//写入table1[]内容
delay(5);
}
LCD1602_Write(0xC0,0);//选择第二行
for(i=0;i<16;i++)
{
LCD1602_Write(table2[i],1);//写入table2[]内容
delay(5);
}
}
void LCD1602_MOV(void)
{
u8 i;
LCD1602_Write(0x01,0);//清屏
LCD1602_Write(0x90,0);//选择第一行的末尾(不可见)
for(i=0;i<16;i++)
{
LCD1602_Write(table1[i],1);//写入table1[]内容
delay(2);
}
LCD1602_Write(0xD0,0);//选择第二行的末尾(不可见)
for(i=0;i<16;i++)
{
LCD1602_Write(table2[i],1);//写入table2[]内容
delay(2);
}
for(i=0;i<16;i++)
{
LCD1602_Write(0x18,0);//循环16次逐一左移屏幕
delay(100);
}
}
/****************************************************************/
//设定地址写入字符函数LCD1602_DIS_CHAR(),有形参x、y、z无返回值
//x表示1602液晶的行,y表示列地址,z表示欲写入的字符
/****************************************************************/
void LCD1602_DIS_CHAR(u8 x,u8 y,u8 z)
{
u8 address;
if(x==1)//若欲显示在第一行
address=0x80+y;//第一行的行首地址+列地址
else
address=0xC0+y;//第二行的行首地址+列地址
LCD1602_Write(address,0);//设定显示地址
LCD1602_Write(z,1);//写入字符数据
}
/****************************************************************/
//组合图形显示函数LCD1602_DIS_FACE(),无形参和返回值
/****************************************************************/
void LCD1602_DIS_FACE(void)
{
LCD1602_DIS_CHAR(1,1,'*');
LCD1602_DIS_CHAR(2,2,'.');
LCD1602_DIS_CHAR(1,3,'*');
LCD1602_DIS_CHAR(1,4,'|');
LCD1602_DIS_CHAR(2,4,'|');
LCD1602_DIS_CHAR(1,5,'*');
LCD1602_DIS_CHAR(2,6,'_');
LCD1602_DIS_CHAR(1,7,'*');
LCD1602_DIS_CHAR(1,8,'|');
LCD1602_DIS_CHAR(2,8,'|');
LCD1602_DIS_CHAR(1,9,'*');
LCD1602_DIS_CHAR(2,10,'x');
LCD1602_DIS_CHAR(1,11,'*');
LCD1602_DIS_CHAR(1,12,'|');
LCD1602_DIS_CHAR(2,12,'|');
LCD1602_DIS_CHAR(1,13,'*');
LCD1602_DIS_CHAR(2,14,'v');
LCD1602_DIS_CHAR(1,15,'*');
}