Ejemplo n.º 1
0
/****************************************************************************
* 名    称:BackSpace
* 功    能:液晶显示,退格,地址指向前一个(退半字)
* 入口参数:无
* 出口参数:无
* 说    明: 此函数供putchar2Lcd函数调用,当液晶收到退格字符,后,调用此函数,
            地址退回一格(英文:半字,中文:一字)
****************************************************************************/
void BackSpace()
{
    char addr,dat;
    
    addr = LcdReadAddr();       //当前地址
    LcdWriteData(0x20);         //写入一个空字符,根据地址判断是否为前半字
    if(addr == LcdReadAddr())   //前半字
    {
        if(addr == 0x80)
            return;
        else if(addr == 0x90)
            addr = 0x87;
        else if(addr == 0x88)
            addr = 0x97;
        else if(addr == 0x98)
            addr = 0x8F;
        else 
            addr = addr - 1;
       
        LcdWriteComm(addr);
        LcdReadData();          //空读取
        dat = LcdReadData();
        LcdWriteComm(addr);
        if(dat < 0x80)
            LcdWriteData(dat);
    }
    else
    {
        LcdWriteComm(addr);
    }
}
Ejemplo n.º 2
0
/****************************************************************************
* 名    称:putchar2Lcd
* 功    能:向标12864液晶设备发送一字节数据(1个ASCII字符)
* 入口参数:ch: 待发送的字符  
* 出口参数:发出的字符
* 说    明: 此函数供putchar函数调用,完成printf函数底层输出到液晶。
****************************************************************************/
int putchar2Lcd(int ch)
{
    char addr,dat;
    char changeRowFlag = 0;
    
    if (ch == '\n')         //  '\n'(回车),换行
    {
        ChangeNextRow();
        changeRowFlag = 1;
    }
    else if (ch == '\b')    // '\b' (退格)
    {
        BackSpace();
    }
    else
    {
        addr = LcdReadAddr();
        if(ch < 0x80)
        {
            LcdWriteData(ch);
        }
        else
        {
            LcdWriteData(0x20);     //写入一个空字符,根据地址判断是否为前半字
            if(addr == LcdReadAddr())   //前半字 从新写入ch字符
            {
                LcdWriteComm(addr);
                LcdWriteData(ch);
            }
            else
            {
                LcdWriteComm(addr);
                dat = LcdReadData();
                if(dat < 0x80)           //前一个字符是英文字符
                {
                    LcdWriteData(0x20);                 //空格
                }
                if((addr != LcdReadAddr()) &&               //写入的是行最后位的后半字则换行
                   (addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))
                {
                    ChangeNextRow();
                    changeRowFlag = 1;
                }
                LcdWriteData(ch);
            }
        }
    }
    if((addr != LcdReadAddr()) &&   //写入的是行最后位的后半字则换行,且未换过行
       (changeRowFlag == 0) &&   
       (addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))
    {
        ChangeNextRow();
    }
    return (ch);
}
Ejemplo n.º 3
0
/****************************************************************************
* 名    称:GotoXY
* 功    能:定位至液晶的具体位置:(x,y)(0-15,0-3)
* 入口参数:无
* 出口参数:无
* 说    明: 调用printf之前调用此函数,可以定位至液晶的具体位置,中文则以偶数
            有效,若是奇数,自动后移一位
****************************************************************************/
void GotoXY(char x,char y)
{
    char addr;
    
    if(y==0)
    {
        addr = 0x80 + x / 2;
    }
    else if(y==1)
    {
        addr = 0x90 + x / 2;
    }
    else if(y==2)
    {
        addr = 0x88 + x / 2;
    }
    else
    {
        addr = 0x98 + x / 2;
    }
    LcdWriteComm(addr);
    if(x % 2)                   //是奇数,后移一位(写入空格)
    {
        LcdWriteData(0x20);
    }
}
Ejemplo n.º 4
0
void ST7789H2_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t data)
{
  uint8_t dataB = 0;

  /* Set Cursor */
  ST7789H2_SetCursor(Xpos, Ypos);

  /* Prepare to write to LCD RAM */
  ST7789H2_WriteReg(0x2C, (uint8_t*)NULL, 0);   /* RAM write data command */

  /* Write RAM data */
  dataB = (uint8_t)(data >> 8);
  LcdWriteData(dataB);
  dataB = (uint8_t)data;
  LcdWriteData(dataB);
}
Ejemplo n.º 5
0
void LcdUpdate(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd)
{
  u8 x, y, page, page_end, data;

  page_end = yEnd / Y_PAGE_SIZE;
  for(page=yStart/Y_PAGE_SIZE; page<=page_end; page++)
  {
    #if defined(TP_SIM800W_OLD)
    LcdSetDisplayAddress(xStart, page*Y_PAGE_SIZE);
    #else
    LcdSetDisplayAddress(xStart + 4, page*Y_PAGE_SIZE);
    #endif
    for(x=xStart; x<=xEnd; x++)
    {
      data = 0;
      for(y=0; y<8; y++)
      {
        if(M_LcdDisplayData(x, ((page*Y_PAGE_SIZE)+y)) == EAT_TRUE)
        {
          data |= 1<<y;
        }
      }
      LcdWriteData(data);
    }
  }
}
Ejemplo n.º 6
0
//清除屏幕
void LcdClsScr(void)
{	
	u16 i;
	//LcdSetLocation(0, 0);	
	LcdWriteDC(LCDCMD , 0x80);
	for ( i=0; i<(LCD_ROW*LCD_COL); i++)
		LcdWriteData(0x00);	
}
Ejemplo n.º 7
0
static void lcdPrint(char *line){
	int i;
	/*
	* Show welcome message in LCD-display
	*/
	LcdSetCursor(0);
	LcdClear();
	for (i = 0; i < strlen(line); i++) {
		LcdSetCursor(i);
		LcdWriteData(line[i]);
	}
}
Ejemplo n.º 8
0
// 输出英文字符
// x : x位置
// y : y位置
// c : 英文字符
static void LcdPutEnChar(uint8_t x, uint8_t y, uint8_t c)
{
	u8 tch  = c , n;
	if((tch< 32) || (tch >= (32+NUMBER_OF_CHARACTER)))
		return;
	
	tch -= 0x20;	
	LcdSetLocation(x, y);
	
	for ( n=0; n<LCD_ROW; n++)
          LcdWriteData( EnPix[ tch ][ n] );
}
Ejemplo n.º 9
0
void ST7789H2_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters)
{
  uint8_t   i;

  /* Send command */
  LcdWriteReg(Command);
  
  /* Send command's parameters if any */
  for (i=0; i<NbParameters; i++)
  {
    LcdWriteData(Parameters[i]);
  }
}
Ejemplo n.º 10
0
// 清除位图
// x : x位置
// y : y位置
// row : 位图行数
// col : 位图列数
void LcdEraseBitmap(uint8_t x, uint8_t y, uint8_t col, uint8_t row)
{
		uint8_t i,j;
	if((col > 84) || (row > 6))
		return;
	
	for ( i=0; i<row; i++)
	{
		LcdSetLocation(x, y);
		for( j=0; j<col; j++)
			LcdWriteData(0);
		y++;
	}
}
Ejemplo n.º 11
0
// 绘画位图
// x : x位置
// y : y位置
// pBmp : 位图
// row : 位图行数
// col : 位图列数
void LcdDrawBitmap(uint8_t x, uint8_t y, uint8_t *pBmp, uint8_t col, uint8_t row)
{
			uint8_t i,j;
	if((col > 84) || (row > 6))
		return;
	
	for ( i=0; i<row; i++)
	{

		LcdSetLocation(x, y);
		for( j=0; j<col; j++)
			LcdWriteData(*(pBmp+i*col+j));
		y++;
	}
}
Ejemplo n.º 12
0
/*******************************************************************************
* 函 数 名 :ShowFullSDPic
* 函数功能 :显示SD卡的bin文件形式的图片
* 输    入 :add 图片起始地址,通过winhex查看
* 输    出 :无
*******************************************************************************/
void ShowFullSDPic(unsigned long add)
{
		unsigned long i=0,j=0,k=0;
		AddressSet(0,0,239,319);
		while(i < 76800)//240*320
		{
			LED = ~LED;
			SdReadBlock(DATA,add+k*512,512);
			for(j=0;j<256;j++)
			{
				LcdWriteData(DATA[j*2+1],DATA[j*2]);	//写一个像素点
				i++;
				if(i >= 76800) break;
			}
			k++;
		}
}
Ejemplo n.º 13
0
/***************************************
说明: 	显示字符
x: 横坐标 y: 纵坐标
value: 显示的字符
*****************************************/
void PutChar(char x , char y , char value)
{
	LocateXY(x,y);
	LcdWriteData(value);
}