📄 12864_paiallel.c
字号:
SET_EN;
OUTDATA=Cbyte;
CLR_EN;
}
/******************************************************************************************
* 函数名称 :WriteData
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void WriteData(unsigned char Dbyte )
{
CheckBusy();
SET_RS;
CLR_RW;
SET_EN;
OUTDATA=Dbyte;
CLR_EN;
}
/******************************************************************************************
* 函数名称 :LcmInit
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void LcmInit( void )
{
DDRD |= (1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
PORTD|= (1<<PD7);
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(0x03); //AC归0,不改变DDRAM内容 //地址归0
WriteCommand(0x0C); //显示ON,游标OFF,游标位反白OFF //整体显示开,游标显示关,反白关
WriteCommand(0x01); //清屏,AC归0 //清除显示
WriteCommand(0x06); //写入时,游标右移动 //进入设定点
}
/******************************************************************************************
* 函数名称 :LcmClearTXT
* 功能描述 :文本区清RAM函数
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void LcmClearTXT( void )
{
uchar i;
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(0x80); //AC归起始位
for(i=0;i<64;i++)
WriteData(0x20);
}
/*********************
* 函数名称 :LcmClearBMP
* 功能描述 :图形区清RAM函数
* 参数 : 参数名称: 输入/输出? 类型 描述
* 图形区和文本区显示在两个不同的RAM区
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void LcmClearBMP( void )
{
uchar i,j;
WriteCommand(0x34); //8Bit扩充指令集,即使是36H也要写两次
WriteCommand(0x36); //绘图ON,基本指令集里面36H不能开绘图
for(i=0;i<32;i++) //12864实际为256x32
{
WriteCommand(0x80|i); //行位置
WriteCommand(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
WriteData(0);
}
}
/******************************************************************************************
* 函数名称 :PutStr
* 功能描述 :PutStr(x,y,str1); //X为行0--3 Y为行起始位置0--7
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void PutStr(uchar row,uchar col,uchar *puts)
{
WriteCommand(0x30); //8BitMCU,基本指令集合
switch(row)
{
case 0:
WriteCommand(0x80+col);
break;
case 1:
WriteCommand(0x90+col);
break;
case 2:
WriteCommand(0x88+col);
break;
case 3:
WriteCommand(0x98+col);
break;
default:
break;
}
while(*puts != '\0') //判断字符串是否显示完毕
{
WriteData(*puts);
puts++;
}
}
void PutBMP(const unsigned char *puts)
{
uchar n,i,j;
unsigned char RamVar; //定义无符号变量(Ram变量)
for(n=0;n<2;n++) //分两屏显示
for(i=0;i<32;i++) //每屏32行
for(j=0;j<8;j++) //每行8个X地址坐标
{
WriteCommand(0x80+i); //写Y坐标
WriteCommand(0x80+j+n*8); //写X坐标。上半屏(n=0)地址为0x80-0x87,下半屏(n=1)地址为0x88-0x8f
RamVar = pgm_read_byte( &(*puts));
//也可RamVar = pgm_read_byte(puts);
WriteData(RamVar); //每个地址写两字节
RamVar = pgm_read_byte( &(*(puts+1)));
//也可RamVar = pgm_read_byte(puts+1);
WriteData(RamVar);
puts+=2;
}
WriteCommand(0x36); //打开绘图
}
/***********************************************/
/*******PutBMP1显示16*16点阵*******************/
/*****X0---3**************Y0--7***************************/
/***********将16*16点阵显示在第X行第Y列**********************/
void Put16_16BMP1(const uchar *puts1,uchar x,uchar y)
{
uchar i,j;
unsigned char RamVar; //定义无符号变量(Ram变量)
//Row 行==0
if(x==0){x=0x80;y=x+y;}
if(x==1){x=0x90;y=x+y;}
if(x==2){x=0x80;y=x+y+8;}
if(x==3){x=0x90;y=x+y+8;}
WriteCommand(0x34); //8Bit扩充指令集,即使是36H也要写两次
WriteCommand(0x36); //绘图ON,基本指令集里面36H不能开绘图
for(i=0;i<16;i++) //12864实际为256x32
{
WriteCommand(x|i); //行位置
WriteCommand(y); //列位置
for(j=0;j<2;j++) //256/8=32 byte
{ //列位置每行自动增加
RamVar = pgm_read_byte( &(*puts1));////////////
//也可RamVar = pgm_read_byte(puts1);
WriteData(RamVar);
puts1++;
}
}
}
int main(void)
{
LcmInit();
LcmClearTXT();
LcmClearBMP();
while(1)
{
PutStr(0,0,"Welcome To HRBUST!");
delay_ms(2000);
LcmClearTXT();
LcmClearBMP();
PutStr(0,0,"欢迎来到哈尔滨理工大学!");
delay_ms(2000);
LcmClearTXT();
LcmClearBMP();
PutBMP(bmp0);
delay_ms(2000);
LcmClearTXT();
LcmClearBMP();
PutBMP(bmp1);
delay_ms(2000);
LcmClearTXT();
LcmClearBMP();
PutStr(1,2,str1);
PutStr(3,0,str2);
Put16_16BMP1(BMP0,0,0);
Put16_16BMP1(BMP1,0,7);
delay_ms(2000);
LcmClearTXT();
LcmClearBMP();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -