📄 lcd_subfun.c
字号:
void LCD_INIT()
{
int il;
/******************system set *****************************/
for(il=0,pLCD=0;il<SYS_SET_NUM;il++)
{ *(short*)(Blkadr+2*pLCD)=SYS_SET_TAB[il];
pLCD++;
}
/*Sets the scroll start address and the number of lines per scroll block*/
for(il=0;il<SCROLL_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=SCROLL_TAB[il];
}
/******************hold set *****************************/
for(il=0;il< HDOTSET_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)= HDOTSET_TAB[il];
}
/*Selects layered screen composition and screen text/ graphics mode*/
for(il=0;il<OYLAY_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=OYLAY_TAB[il];
}
}
void LCD_CLEAR()//注意清屏会送入FPGA好多的0000;考虑自编代码让FPGA送
{
int il;
for(il=0;il<CSRDIR_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=CSRDIR_RIGHT_TAB[il];
}
for(il=0;il<CSRW_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=CSRW_TAB[il];
}
for(il=0;il< MWEAD_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)= MWEAD_TAB[il];
}
//写入00用来清显示RAM
for(il=0;il<2*240*40;pLCD++,il++)//1/2
{ *(short*)(Blkadr+2*pLCD)= 0x00;
}
}
void LCD_DIPLAY(char CN_flag,short oxl,short oy,short cod)//0为汉字
{ int il,jd;
char count1=0;
char count2=0x10;//16
short csrx,csry;
short ap=SYS_SET_TAB[9];
//计算汉字/数字的字模首地址
short* adr;
if(!CN_flag)
adr=&HanZi[cod].HzDot[0];
else
adr=&Num[cod].NumDot[0];
//计算光标的位置
csrx=oy*ap+oxl;
csry=ap+0x40;
// 光标代码下移
for(il=0;il<CSRDIR_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=CSRDIR_DOWN_TAB[il];
}
/***************左边的控制***************/
//设置光标的地址
CSRW_TAB[2] = csrx;//take care
CSRW_TAB[3] = csry;
for(il=0;il<CSRW_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=CSRW_TAB[il];
}
//设置允许数据连续输入指令
for(il=0;il<MWEAD_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=MWEAD_TAB[il];
}
//送左边字模数据代码
for(jd=0;jd<count2;jd++,pLCD++)
{
*(short*)(Blkadr+2*pLCD)=*(short*)(adr+ count1*jd);
}
/**********右边的控制***************/
if (!CN_flag)
{//修正光标地址
CSRW_TAB[2] = csrx+1;
for(il=0;il<CSRW_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=CSRW_TAB[il];
}
//设置允许数据连续输入指令
for(il=0;il<MWEAD_NUM;pLCD++,il++)
{ *(short*)(Blkadr+2*pLCD)=MWEAD_TAB[il];
}
//送右边字模数据代码
count1++;
for(jd=0;jd<count2;jd++,pLCD++)
{
*(short*)(Blkadr+2*pLCD)=*(short*)(adr+count2*count1+jd);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -