📄 lcd.c.svn-base
字号:
/****************************************************************************
LCD屏幕分成8行,16列。 图形显示所占内存:1024 byte
文本显示所占内存:128 byte
LCD显示缓存:8k
LCD显示一屏所占内存1024byte。所以缓存内可以存8屏
***************************************************************************/
#include"..\inc\resources.h"
#include"..\inc\lcdcomm.h"
//////////////////////////////////////////////////////////
//Read LCD State register
//////////////////////////////////////////////////////////
extern unsigned int systimer0;
void sysdelay( unsigned int i)
{
systimer0 = i;
}
unsigned char ReadST(void)
{
unsigned char st;
lcd_dt_in_();
lcd_cmd_(); //select Command
lcd_en_();
lcd_rd0_();
st = LCD_IN_PORT; //read LCD state
lcd_rd1_();
lcd_dis_();
return(st);
}
/////////////////////////////////////////////////////////
//Data write (1 byte) routine
/////////////////////////////////////////////////////////
void WriteDT(unsigned char ch)
{
while( (ReadST() & 3) != 3); //status check
lcd_dt_out_();
lcd_dt_(); //select Data
lcd_en_();
LCD_OUT_PORT = ch;
lcd_wr0_();
lcd_wr1_(); //write data
lcd_dis_();
}
///////////////////////////////////////////////////
//auto write byte
//////////////////////////////////////////////////
void AWriteDT(unsigned char ch)
{
while( ( ReadST() & 8) != 8); //status check
lcd_dt_out_();
lcd_dt_(); //select Data
lcd_en_();
LCD_OUT_PORT = ch;
lcd_wr0_();
lcd_wr1_(); //write data
lcd_dis_();
}
//////////////////////////////////////////////////////////////////////////
//command write routine
//////////////////////////////////////////////////////////////////////////
void WriteCMD(unsigned char ch)
{
while( (ReadST() & 3) != 3); //status check
lcd_dt_out_();
lcd_cmd_(); //select Command
lcd_en_();
LCD_OUT_PORT = ch;
lcd_wr0_();
lcd_wr1_(); //write data
lcd_dis_();
}
//Set Screen number
void SetScrNum(unsigned char num)
{
unsigned int addr;
//lcd_en_();
//set text home address
addr = ADDTXSCR0 + TXSCR * num;
WriteDT(addr); //text screen 1
WriteDT(addr/256);
WriteCMD(CMD_TXHOME);
//set graphic home address
addr = ADDGRSCR0 + GRSCR * num;
WriteDT(addr); //graphic screen 1
WriteDT(addr/256);
WriteCMD(CMD_GRHOME);
//lcd_dis_();
}
/////////////////////////////////////////////////////////////////////
//LCD intialise
/////////////////////////////////////////////////////////////////////
void LCDInit(void)
{
unsigned int i;
//lcd_en_();
//write text blank code
WriteDT(0); //set address pointer
WriteDT(0);
WriteCMD(CMD_ADPSET);
WriteCMD(CMD_AWRON); //set data auto write
for(i = 0; i < 0x8000 ;i++ )
AWriteDT(0x00);
WriteCMD(CMD_AWROFF); //reset data auto write
//set text area
WriteDT(MAXCOL); //Text area MAXCOL = 30 columns
WriteDT(0);
WriteCMD(CMD_TXAREA);
//set graphic area
WriteDT(MAXCOL); //Graphic area MAXCOL = 30 columns
WriteDT(0);
WriteCMD(CMD_GRAREA);
//set character mode
WriteCMD(CMD_CHRMD);
//set external character offset register
WriteDT(ECOFFSET);
WriteDT(0);
WriteCMD(CMD_OFFSET);
//set display mode
WriteCMD(CMD_DISNOM);
//lcd_dis_();
}
//////////////////////////////////////////////////////////////////////////
//auto write graphic black
//////////////////////////////////////////////////////////////////////////
void WriteGRBL(unsigned int adp, unsigned char const *p)
{
unsigned char cl,ln,i,j;
//lcd_en_();
cl = *(p++); //列
ln = *(p++); //行
for(i=0;i<ln;i++)
{
WriteDT(adp); //set address pointer
WriteDT((adp)/256);
WriteCMD(CMD_ADPSET);
adp =adp + MAXCOL;
WriteCMD(CMD_AWRON); //set data auto write
for(j=0; j < cl ; j++)
AWriteDT(*(p++));
WriteCMD(CMD_AWROFF); //reset data auto write
}
//lcd_dis_();
}
//////////////////////////////////////////////////////////////////////////
//auto clear graphic black
//////////////////////////////////////////////////////////////////////////
void ClearGRBL(unsigned int adp, unsigned char const *p)
{
unsigned char cl,ln,i,j;
//lcd_en_();
cl = *(p++); //列
ln = *(p); //行
for(i=0;i<ln;i++)
{
WriteDT(adp); //set address pointer
WriteDT((adp)/256);
WriteCMD(CMD_ADPSET);
adp =adp + MAXCOL;
WriteCMD(CMD_AWRON); //set data auto write
for(j=0; j < cl ; j++)
AWriteDT(0);
WriteCMD(CMD_AWROFF); //reset data auto write
}
//lcd_dis_();
}
//////////////////////////////////////////////////////////////////////////
//auto write graphic black
//////////////////////////////////////////////////////////////////////////
void WriteGRBL_(unsigned int adp, unsigned char const *p)
{
unsigned char cl,ln,i,j;
cl = *(p++); //列
ln = *(p++); //行
for(i=0;i<ln;i++)
{
WriteDT(adp); //set address pointer
WriteDT((adp)/256);
WriteCMD(CMD_ADPSET);
adp =adp + MAXCOL;
WriteCMD(CMD_AWRON); //set data auto write
for(j=0; j < cl ; j++)
AWriteDT(~(*(p++)));
WriteCMD(CMD_AWROFF); //reset data auto write
}
}
//////////////////////////////////////////////////////////////////////////
//auto horizontal line
//////////////////////////////////////////////////////////////////////////
void WriteHL(unsigned int adp, unsigned char l)
{
unsigned char i;
WriteDT(adp); //set address pointer
WriteDT((adp)/256);
WriteCMD(CMD_ADPSET);
WriteCMD(CMD_AWRON); //set data auto write
AWriteDT(0x0f);
for(i=2;i<l;i++)
{
AWriteDT(0xff);
}
AWriteDT(0xf8);
WriteCMD(CMD_AWROFF); //reset data auto write
//lcd_dis_();
}
//////////////////////////////////////////////////////////////////////////
//auto vertical line
//////////////////////////////////////////////////////////////////////////
void WriteVL(unsigned int adp, unsigned char l)
{
unsigned char i;
for(i=0;i<l;i++)
{
WriteDT(adp); //set address pointer
WriteDT((adp)/256);
WriteCMD(CMD_ADPSET);
WriteCMD(CMD_AWRON);
WriteDT(0x08);
WriteCMD(CMD_AWROFF);
adp =adp + MAXCOL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -