📄 sed1335.c
字号:
{
unsigned int i;
unsigned char status;
xdata unsigned char rev[1000];
LCD_WriteCommand(LCD_MEM_RD);
for(i=0;i<LEN;i++)
LCD_ReadData(rev[i]);
LCD_ReadState(status);
return (rev);
}
/******************************************************************************************
* 名称:LCD_PutPix(unsigned int X,unsigned int Y)
* 功能:在指定的位置上显示点
* 入口参数:
* 出口参数:
*******************************************************************************************/
void LCD_PutPix(unsigned int X,unsigned int Y) //X,Y都是从0开始
{
unsigned int addr;
unsigned char temp;
addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + (X>>3);
SED1335_CsRw(addr);
LCD_WriteCommand(LCD_MEM_RD);
LCD_ReadData(temp);
temp = temp|(unsigned char)(1<<(7-(X%8))); //
SED1335_CsRw(addr);
LCD_WriteCommand(LCD_MEM_WR);
LCD_WriteData(temp);
}
/******************************************************************************************
* 名称:LCD_PutChar(unsigned int X,unsigned int Y,unsigned char pchar)
* 功能:在指定的位置上显示字符
* 入口参数:
* 出口参数:
*******************************************************************************************/
void LCD_PutChar(unsigned int X,unsigned int Y,unsigned char pchar)
{
unsigned int addr;
addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + (X>>3);
SED1335_CsRw(addr);
LCD_WriteData(pchar);
}
/*****************************************************************************************
* 名称:LCD_PutHZ(unsigned int X,unsigned int Y,unsigned int p_code)
* 功能:在指定的位置上显示汉字
* 入口参数:
* 出口参数:
******************************************************************************************/
void LCD_PutHZ(unsigned int X,unsigned int Y,unsigned int p_code)
{
unsigned int addr;
addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + (X>>3);
SED1335_CsRw(addr);
}
/******************************************************************************************
* 名称:void LCD_CLS(unsigned int addr_begin,unsigned int len)
* 功能:清除指定位置的指定长度的区域的空间
* 入口参数:
* 出口参数:
******************************************************************************************/
void LCD_CLS(unsigned int addr_begin,unsigned int len)
{
unsigned int i;
LCD_WriteCommand(LCD_CSR_DIR);
LCD_WriteCommand(LCD_CSR_WR);
LCD_WriteData(GET_LOW_BYTE(addr_begin));
LCD_WriteData(GET_HIG_BYTE(addr_begin));
LCD_WriteCommand(LCD_MEM_WR);
for(i=0;i<len;i++)
{
LCD_WriteData(0x00);
}
}
/******************************************************************************
* 名称:LCD_Wr_Area(unsigned char X,unsigned char Y,unsigned char Height,unsigned char Length,unsigned char *ptr,unsigned char form)
* 功能:在指定的空间写入新的数据块 其中 X<40;Y<240 Length<40, Height<240
* 入口参数:
* 出口参数:
*******************************************************************************/
void LCD_Wr_Area(unsigned char X,unsigned char Y,unsigned char Height,unsigned char Length,unsigned char *ptr,unsigned char form)
{
unsigned int addr;
int k=0;
unsigned char temp;
switch (form&0x01)
{
case 0: //点的排列顺序为从上到下 从左到右的方式
{
for( k=0;k<Length;k++)
{
addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + X;
SED1335_CsRw(addr);
SED1335_CspDir(down);
SED1335_WMrite(&ptr[k*Height],Height);
X=X+1;
if(X==((GUI_LCD_XMAX>>3)+1))
{X=0;Y=Y+Height;} //如果超出屏幕的右边界,会另起一行
}
break;
}
case 1: //点的排列顺序为从左到右 从上到下的方式
{
if((X+Length)>(GUI_LCD_XMAX>>3))
{
for( k=0;k<Height;k++)
{
temp = (GUI_LCD_XMAX>>3)-X;
addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + X;
SED1335_CsRw(addr);
SED1335_CspDir(right);
SED1335_WMrite(&ptr[k*Length],temp);
addr = Disp_Base_Addr + (Y+Height)*(GUI_LCD_XMAX>>3);
SED1335_CsRw(addr);
SED1335_CspDir(right);
SED1335_WMrite(&ptr[k*Length+temp],X-temp);
Y=Y+1;
}
}
else
{
for( k=0;k<Height;k++)
{
addr = Disp_Base_Addr + Y*(GUI_LCD_XMAX>>3) + X;
SED1335_CsRw(addr);
SED1335_CspDir(right);
SED1335_WMrite(&ptr[k*Length],Length);
Y=Y+1;
}
}
}
}
}
/******************************************************************************
* 名称:DelayMs(unsigned int Time)
* 功能:延时程序
* 入口参数:
* 出口参数:
*******************************************************************************/
void DelayMs(unsigned int Time)
{
unsigned int i;
while(Time--)
for(i=1000*SYS_TIME;i>0;i--);
}
/********************************************************************************
滚动演示程序段
使用SED1335 等的屏幕滚动功能, 可以实现逐点滚动的显示效果. 这个效果的实现, 在
水平方向是依赖于指令HDOT SET的支持. 我们可以在下面的演示程序中看到HDOT SET指
令的使用方法.
*********************************************************************************/
// 第一显示区向左滚动
void RollLeft( void ) {
unsigned char tempI,jj=25;
unsigned int iTemp=0;
while(jj--) {
for(tempI=0;tempI<8;tempI++) {
LCD_WriteCommand(LCD_DOT_DIR); // 写入HDOT SET 指令
LCD_WriteData( tempI ); // 写入参数
DelayMs(4); // 调延时子程序
}
iTemp ++;
LCD_WriteCommand( LCD_SCR_OLL ); // 设定显示区域起始地址
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); // 写入参数
LCD_WriteData( (unsigned char)(iTemp /256) ); // 写入参数
}
}
// 第一显示区向右滚动
void Rollright( void ) {
unsigned char tempI,jj=25;
unsigned int iTemp=24;
// return;
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
tempI = 8;
LCD_WriteCommand( LCD_SCR_OLL ); // 显示区域(起点)设置
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); // 写入参数
LCD_WriteData( (unsigned char)(iTemp /256) ); // 写入参数
while( tempI-- ) {
LCD_WriteCommand( LCD_DOT_DIR ); // 写入HDOT SET 指令
LCD_WriteData( tempI ); // 写入参数
DelayMs(4); // 调延时子程序
}
iTemp--;
}
}
// 第一显示区向下滚动
void RollDown( void ) {
unsigned char jj = 50; // 演示32次
unsigned int iTemp=paraP9*50;
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
iTemp -= paraP9;
LCD_WriteCommand( LCD_SCR_OLL ); // 设定显示区域起始地址
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); // 写入参数
LCD_WriteData( (unsigned char)(iTemp /256) ); // 写入参数
DelayMs(4); // 调延时子程序
}
LCD_WriteCommand( LCD_SCR_OLL ); // 设定显示区域起始地址
LCD_WriteData( 0 ); // 写入参数
LCD_WriteData( 0 ); // 写入参数
DelayMs(30);
}
// 第一显示区向上滚动
void RollUp( void ) {
unsigned int iTemp=0;
unsigned char jj = 50; // 演示30次
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
iTemp += paraP9;
LCD_WriteCommand( LCD_SCR_OLL ); // 设定显示区域起始地址
LCD_WriteData( (unsigned char)(iTemp & 0xff) ); // 写入参数
LCD_WriteData( (unsigned char)(iTemp /256) ); // 写入参数
DelayMs(3); // 调延时子程序
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -