Пример #1
0
/*****************************************************************************
 函 数 名  : OLED_P8x16Str
 功能描述  : 写入一组8x16标准ASCII字符串
 输入参数  : uchar8 ucIdxX       为显示的横坐标0~120
             uchar8 ucIdxY       为页范围0~3
             uchar8 ucDataStr[]  要显示的字符串
 输出参数  : NONE
 返 回 值  : NONE
*****************************************************************************/
void OLED_P8x16Str(uchar8 ucIdxX, uchar8 ucIdxY, uchar8 ucDataStr[])
{
    uchar8 i, j, ucDataTmp;

    ucIdxY <<= 1;

    for (j = 0; ucDataStr[j] != '\0'; j++)
    {
        ucDataTmp = ucDataStr[j] - 32;
        if(ucIdxX > 120)
        {
            ucIdxX = 0;
            ucIdxY += 2;
        }
        OLED_SetPos(ucIdxX, ucIdxY);

        for(i = 0; i < 8; i++)
        {
            OLED_WrDat(Font_8x16[(ucDataTmp << 4) + i]);
        }

        OLED_SetPos(ucIdxX, ucIdxY + 1);

        for(i = 0; i < 8; i++)
        {
            OLED_WrDat(Font_8x16[(ucDataTmp << 4) + i + 8]);
        }
        ucIdxX += 8;

    }

    return;
}
Пример #2
0
//输出汉字字符串
void OLED_P14x16Str(unsigned char x,unsigned char y,unsigned char ch[])
{
	unsigned char wm=0,ii = 0;
	unsigned int adder=1; 
	
	while(ch[ii] != '\0')
	{
  	wm = 0;
  	adder = 1;
  	while(F14x16_Idx[wm] > 127)
  	{
  		if(F14x16_Idx[wm] == ch[ii])
  		{
  			if(F14x16_Idx[wm + 1] == ch[ii + 1])
  			{
  				adder = wm * 14;
  				break;
  			}
  		}
  		wm += 2;			
  	}
  	if(x>118){x=0;y++;}
  	OLED_Set_Pos(x , y); 
  	if(adder != 1)// 显示汉字					
  	{
  		OLED_Set_Pos(x , y);
  		for(wm = 0;wm < 14;wm++)               
  		{
  			OLED_WrDat(F14x16[adder]);	
  			adder += 1;
  		}      
  		OLED_Set_Pos(x,y + 1); 
  		for(wm = 0;wm < 14;wm++)          
  		{
  			OLED_WrDat(F14x16[adder]);
  			adder += 1;
  		}   		
  	}
  	else			  //显示空白字符			
  	{
  		ii += 1;
      OLED_Set_Pos(x,y);
  		for(wm = 0;wm < 16;wm++)
  		{
  				OLED_WrDat(0);
  		}
  		OLED_Set_Pos(x,y + 1);
  		for(wm = 0;wm < 16;wm++)
  		{   		
  				OLED_WrDat(0);	
  		}
  	}
  	x += 14;
  	ii += 2;
	}
}
Пример #3
0
Файл: ccd.c Проект: oldjohnh/car
/*************************************************************************
*
*  函数名称OLED_ZhongXian
*  功能说明:显示中线的位置
*  参数说明:
*  函数返回:无
*  修改时间:
*  备    注:
*************************************************************************/
void OLED_ZhongXian(void)
{
	uint8_t m;
	for(m = 0;m < 3;m++)
	{
		OLED_Set_XY(Center,m);
		OLED_WrDat(0xff);
	}
	for(m = 0;m < 3;m++)
	{
		OLED_Set_XY(Center,m);
		OLED_WrDat(0x00);
	}
}
Пример #4
0
void OLED_PrintPicture(void)
{
  uint8 data = 0;
  uint8 i,j,k;
  uint8 x,y;
  for (k = 0;k < 7;k++)//共计56行(后面四行单独算)
  {
    OLED_Set_Pos(5,k);//设置坐标,每次跳8行,60列
    x = k*8;//行起始位置
    y = (k+1)*8 - 1;//行计数(只要循环7行,还有一行单独算)
    for (i = 0;i< PICTURE_WIDTH;i++)
    {
      //高位显示在8行的最下面,低位显示在最上面
      //例如0x83的显示
      //* 1
      //* 1
      //  0
      //  0
      //  0 
      //  0 
      //  0
      //* 1
      //因此要从高到低扫描
      for (j = y;j > x;j--)//从第j行i列到第j+6行i列
      {
          data += PixData[j][i];//对应位置一或置零(图像已经二值化,只能是0或1)
          data<<=1;//左移一位
      }
      //j+7行i列
      data += PixData[j][i];//此处不要位移
      OLED_WrDat(data);//写入8行,1列的数据并显示
      data = 0;
    }
  }
  OLED_Set_Pos(5,7);//最后四行
  x = 56;//行起始位置
  y = 60;//行计数(只要循环4行)
  for (i = 0;i < PICTURE_WIDTH;i++)//每次写8行,图像宽度列  60列
  {
    for (j = x;j < y;j++)//从第56行i列到第59行i列
    {
        data += PixData[j][i];//对应位置一(图像已经二值化,只能是0或1)
        data<<=1;
    }
    data>>=1;
    OLED_WrDat(data);//写入8行,1列的数据并显示
    data = 0;
  }
}
Пример #5
0
/*****************************************************************************
 函 数 名  : OLED_PrintImage
 功能描述  : 将图像显示出来
 输入参数  : uchar8 *pucTable     二维图像数组的地址
             ushort16 usRowNum    二维图像的行数1~64
             ushort16 usColumnNum 二维图像的列数1~128
 输出参数  : none
 返 回 值  : none
*****************************************************************************/
void OLED_PrintImage(uchar8 *pucTable, ushort16 usRowNum, ushort16 usColumnNum)
{
    uchar8 ucData;
    ushort16 i,j,k,m,n;
    ushort16 usRowTmp;

    m = usRowNum >> 3;   //计算图片行数以8位为一组完整的组数
    n = usRowNum % 8;    //计算分完组后剩下的行数

    for(i = 0; i < m; i++) //完整组行扫描
    {
        OLED_SetPos(0,(uchar8)i);
        usRowTmp = i << 3;    //计算当前所在行的下标
        for(j = 0; j < usColumnNum; j++) //列扫描
        {
            ucData = 0;
            for(k = 0; k < 8; k++) //在i组中对这8行扫描
            {
                ucData = ucData >> 1;
                if((pucTable + (usRowTmp + k) * usColumnNum)[j] == OLED_IMAGE_WHITE)
                {
                    ucData = ucData | 0x80;
                }

            }
            OLED_WrDat(ucData);
        }
    }

    OLED_SetPos(0,(uchar8)i); //设置剩下的行显示的起始坐标
    usRowTmp = i << 3;       //计算当前所在行的下标
    for(j = 0; j < usColumnNum; j++) //列扫描
    {
        ucData = 0;
        for(k = 0; k < n; k++) //对剩下的行扫描
        {
            ucData = ucData >> 1;
            if((pucTable + (usRowTmp + k) * usColumnNum)[j] == OLED_IMAGE_WHITE)
            {
                ucData = ucData | 0x80;
            }

        }
        ucData = ucData >> (8 - n);
        OLED_WrDat(ucData);
    }

    return;
}
Пример #6
0
Файл: ccd.c Проект: oldjohnh/car
/*************************************************************************
*
*  函数名称OLED_ZhongXian
*  功能说明:显示中线的位置
*  参数说明:
*  函数返回:无
*  修改时间:
*  备    注:
*************************************************************************/
void OLED_ZhongXian(void)
{
	uint8_t m;
	for(m = 0;m < 3;m++)
	{
		OLED_Set_XY(c,m);
		OLED_WrDat(0xff);
	}
	for(m = 0;m < 3;m++)
	{
		OLED_Set_XY(c,m);
		OLED_WrDat(0x00);
	}
	OLED_Write_Num3(0,2,c);
}
Пример #7
0
/*****************功能描述:显示16*16点阵  显示的坐标(x,y),y为页范围0~7****************************/
void OLED_P16x16Ch(unsigned char x,unsigned char y,unsigned char N)
{
	unsigned char wm = 0;
	unsigned int adder = 32 * N;  //  	
	OLED_Set_Pos(x , y);
	for ( wm = 0 ; wm < 16 ; wm ++ )  //             
	{
		OLED_WrDat(F16x16[adder]);	
		adder += 1;
	}      
	OLED_Set_Pos(x,y + 1); 
	for ( wm = 0;wm < 16 ; wm ++ ) //         
	{
		OLED_WrDat(F16x16[adder]);
		adder += 1;
	} 	  	
}
Пример #8
0
void OLED_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[])
{
	unsigned char c=0,i=0,j=0;
	while (ch[j]!='\0')
	{
		c =ch[j]-32;
		if(x>120){x=0;y++;}
		OLED_Set_Pos(x,y);
		for(i=0;i<8;i++)
		OLED_WrDat(F8X16[c*16+i]);
		OLED_Set_Pos(x,y+1);
		for(i=0;i<8;i++)
		OLED_WrDat(F8X16[c*16+i+8]);
		x+=8;
		j++;
	}
}
Пример #9
0
//==============================================================
//函数名:OLED_P6x8Str(unsigned char x,unsigned char y,unsigned char *p,unsigned char ConverseSelect)
//功能描述:写入一组标准ASCII字符串
//参数:显示的位置(x,y),y为页范围0~7,要显示的字符串, 黑底白字反转选择(0:黑底白字 1:白底黑字)
//返回:无
//==============================================================  
void OLED_P6x8Str(unsigned char x,unsigned char y,unsigned char ch[],unsigned char ConverseSelect)
{
  unsigned char c=0,i=0,j=0;      
  while (ch[j]!='\0')
  {    
    c =ch[j]-32;
    if(x>122){x=0;y++;}
    OLED_Set_Pos(x,y);    
  	for(i=0;i<6;i++)     
  	{
  	  if(ConverseSelect) OLED_WrDat(F6x8_Converse[c][i]); 
  	  else OLED_WrDat(F6x8[c][i]);
  	}
  	x+=6;
  	j++;
  }
}
Пример #10
0
void OLED_clear_line(unsigned int line)
{
  unsigned char x;
  OLED_WrCmd(0xb0+line);
  OLED_WrCmd(0x01);
	OLED_WrCmd(0x10);
  for(x=0;x<X_WIDTH;x++)
			OLED_WrDat(0x00);
}
Пример #11
0
Файл: ccd.c Проект: oldjohnh/car
void oled_show()
{
	uint8_t i,j;
	for(i = 7;i >= 4;i--)
	{
		OLED_Set_XY(0,i);
	  for(j = 0;j <= 124;j++) OLED_WrDat(oled_data[i][j]);
	}
}
Пример #12
0
/******************************************************************************
 函数名称 :OLED_Write_Char
 功能描述 :字符显示
 参数说明 :x  SmallChars(小字体) -- (0 - 20)共21列
               LargeChars(大字体) -- (0 - 15)共16列
            y  SmallChars(小字体) -- (0 - 7) 共 8行
               LargeChars(大字体) -- (0 - 6) 共 4行  ** y只能取"0, 2, 4, 6" 4行 **
            c  字体库中任意字符
 函数返回 :无
 备    注 :无
*******************************************************************************/
void OLED_Write_8x8(uint8_t x,uint8_t y,uint8_t *s)
{
	uint8_t t;
	OLED_Set_XY(x*8,y);
	for(t=0;t<8;t++)
	{
		OLED_WrDat(s[t]);
	}
}
Пример #13
0
//==============================================================
//函数名: void LCD_Rectangle(uint8 x1,uint8 y1,
//                   uint8 x2,uint8 y2,uint8 color,uint8 gif)
//功能描述:绘制一个实心矩形
//参数:左上角坐标(x1,y1),右下角坐标(x2,y2)
//      其中x1、x2的范围0~127,y1,y2的范围0~63,即真实坐标值
//返回:无
//==============================================================
void OLED_Rectangle(uint8 x1,uint8 y1,uint8 x2,uint8 y2,uint8 gif)
{
	uint8 n;

	OLED_Set_Pos(x1,y1>>3);
	for(n=x1;n<=x2;n++)
	{
		OLED_WrDat(0x01<<(y1%8));
		if(gif == 1) 	OLED_DLY_ms(50);
	}
	OLED_Set_Pos(x1,y2>>3);
  for(n=x1;n<=x2;n++)
	{
		OLED_WrDat(0x01<<(y2%8));
		if(gif == 1) 	OLED_DLY_ms(5);
	}

}
Пример #14
0
/**********写一个字符***********/
void OLED_write_char(unsigned char c)
  {
    unsigned char line;

    c -= 32;

    for ( line = 0; line < 6 ; line ++)
    	OLED_WrDat(F6x8[c][line]);
  }
Пример #15
0
void OLED_Write_Picture(uint8_t x,uint8_t y,uint8_t *s) 
{
    uint8_t i,j;
for(j=0;j<(x/8);j++){	
		OLED_Set_XY(0,j);
    for(i=0;i<y;i++){
			OLED_WrDat(s[j*y+i]);
			}
		} 	
   
}
Пример #16
0
//==============================================================
//函数名: void LCD_PutPixel(uint8 x,uint8 y)
//功能描述:绘制一个点(x,y)
//参数:真实坐标值(x,y),x的范围0~127,y的范围0~64
//返回:无
//==============================================================
void OLED_PutPixel(uint8 x,uint8 y)
{
	uint8 data1;  //data1当前点的数据

  OLED_Set_Pos(x,y);
	data1 = 0x01<<(y%8);
	OLED_WrCmd(0xb0+(y>>3));
	OLED_WrCmd(((x&0xf0)>>4)|0x10);
	OLED_WrCmd((x&0x0f)|0x00);
	OLED_WrDat(data1);
}
Пример #17
0
void OLED_Write_Picture1(uint8_t x,uint8_t y,uint8_t *s) 
{
    uint8_t i,j;
for(j=0;j<(8/8);j++){	
		OLED_Set_XY(x*8,j+y);
    for(i=0;i<8;i++){
			OLED_WrDat(s[j*8+i]);
			}
		} 	
   
}
Пример #18
0
void OLED_draw_line(unsigned int data[])
{
  unsigned char y,x;
  for(y=0;y<4;y++)
	{
		OLED_WrCmd(0xb0+y);
		OLED_WrCmd(0x01);
		OLED_WrCmd(0x10);
		for(x=0;x<X_WIDTH;x++)
			OLED_WrDat(data[x]);
	}
}
Пример #19
0
/*********************LCD复位************************************/
void OLED_CLS(void)
{
	unsigned char y,x;	
	for ( y = 0 ; y < 8 ; y ++ )
	{
		OLED_WrCmd(0xb0 + y);
		OLED_WrCmd(0x01);
		OLED_WrCmd(0x10); 
		for ( x = 0 ; x < X_WIDTH ; x ++ )
			OLED_WrDat(0);
	}
}
Пример #20
0
/*********************LCD全屏************************************/
void OLED_Fill(unsigned char bmp_dat) 
{
	unsigned char y,x;
	for ( y = 0 ; y < 8 ; y ++ )
	{
		OLED_WrCmd(0xb0 + y);
		OLED_WrCmd(0x01);
		OLED_WrCmd(0x10);
		for ( x = 0 ; x < X_WIDTH ; x ++ )
			OLED_WrDat(bmp_dat);
	}
}
Пример #21
0
void OLED_Draw_Curve(unsigned char *data)
{
  unsigned char i,temp1,y1,temp2,y2;
  
  for(i=0;i<128;i+=2)   
  {
    y1=7-(data[i]>>3);   //获取行号
    y2=7-(data[i+1]>>3);
    temp1=1<<(7-(data[i]%8));
    temp2=1<<(7-(data[i+1]%8));
    if(y1==y2)
    {
      
      OLED_Set_Pos(i,y1);
      OLED_WrDat(temp1); 
      OLED_WrDat(temp2);
    }
    else
    {
      OLED_Set_Pos(i,y1);
      OLED_WrDat(temp1); 
      OLED_WrDat(0);
      OLED_Set_Pos(i,y2);
      OLED_WrDat(0); 
      OLED_WrDat(temp2);
    }
  }
}
Пример #22
0
/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void Draw_BMP(unsigned char x0, unsigned char y0,unsigned char x1,unsigned char y1,const unsigned char BMP[])
{ 	
 unsigned int j = 0;
 unsigned char x,y;
	for ( y = y0 ; y < y1 ; y ++ )
	{
		OLED_Set_Pos(x0,y);				
	    for ( x = x0 ; x < x1 ; x ++ )
	    {      
	    	OLED_WrDat(BMP[j++]);	    	
	    }
	}
} 
Пример #23
0
void OLED_Fill(uint8 bmp_data)
{
	uint8 y,x;

	for(y=0;y<8;y++)
	{
		OLED_WrCmd(0xb0+y);
		OLED_WrCmd(0x01);
		OLED_WrCmd(0x10);
		for(x=0;x<X_WIDTH;x++)
			OLED_WrDat(bmp_data);
	}
}
Пример #24
0
void Draw_LibLogo(void)
{
  uint16 ii=0;
  uint8 x,y;

	for(y=0;y<8;y++)
	{
		OLED_Set_Pos(34,y);
    for(x=34;x<94;x++)
	    {
	    	OLED_WrDat(LIBLOGO60x58[ii++]);
	    }
	}
}
Пример #25
0
void Draw_Landzo(void)
{
  uint16 ii=0;
  uint8 x,y;

	for(y=2;y<8;y++)
	{
		OLED_Set_Pos(40,y);
            for(x=40;x<90;x++)
	    {
	    	OLED_WrDat(LANDZO_LOGO[ii++]);
	    }
	}
}
Пример #26
0
//==============================================================
//函数名:LCD_P6x8Str(uint8 x,uint8 y,uint8 *p)
//功能描述:写入一组标准ASCII字符串
//参数:显示的位置(x,y),y为页范围0~7,要显示的字符串
//返回:无
//==============================================================
void OLED_P6x8Str(uint8 x,uint8 y,uint8 ch[])
{
  uint8 c=0,i=0,j=0;
  while (ch[j]!='\0')
  {
    c =ch[j]-32;
    if(x>126){x=0;y++;}
    OLED_Set_Pos(x,y);
  	for(i=0;i<6;i++)
  	  OLED_WrDat(F6x8[c][i]);
  	x+=6;
  	j++;
  }
}
Пример #27
0
//==============================================================
//函数名:void OLED_P6x8Char(byte x,byte y,byte ch);
//功能描述:显示一个6x8标准ASCII字符
//参数:x为显示的横坐标0~122,y为页范围0~7,ch要显示的字符
//返回:无
//============================================================== 
void OLED_P6x8Char(uint8 x,uint8 y,uint8 ch)
{
	uint8 c=0,i=0;     
	c =ch-32;
	if(x>122)
	{
		x=0;
		y++;
	}
	OLED_Set_Pos(x,y);    
	for(i=0;i<6;i++)
	{     
		OLED_WrDat(F6x8[c][i]);  
	}
}
Пример #28
0
/*****************************************************************************
 函 数 名  : OLED_Fill
 功能描述  : 对全屏写入同一个字符函数
             如 OLED_Fill(0x01);    对于某一位0为不亮 1为亮
            ------------------------------------------------------
                                共128列
					1				1				1
              共  	0				0                0
              8   	0           0                0
              组  	0     ……0     …………   0
              字  	0           0                0
              符  	0           0                0
              即  	0           0                0
              8   	0           0                0
              页  	1           1                1
              64  0           0                0
              行  	.			.                .
					.           .    …………    .
					.           .                .
					.           .                .
					0           0                0
            ------------------------------------------------------
 输入参数  : uchar8 ucData
 输出参数  : NONE
 返 回 值  : NONE
*****************************************************************************/
void OLED_Fill(uchar8 ucData)
{
    uchar8 ucPage,ucColumn;

    for(ucPage = 0; ucPage < 8; ucPage++)
    {
        OLED_WrCmd(0xb0 + ucPage);  //0xb0+0~7表示页0~7
        OLED_WrCmd(0x00);           //0x00+0~16表示将128列分成16组其地址在某组中的第几列
        OLED_WrCmd(0x10);           //0x10+0~16表示将128列分成16组其地址所在第几组
        for(ucColumn = 0; ucColumn < 128; ucColumn++)
        {
            OLED_WrDat(ucData);
        }
    }
}
Пример #29
0
/*
 *  清屏函数
 */
void OLED_Clear(void)
{
    uint8_t y,x;	
    
    for (y=0; y<8; y++)
    {
        OLED_WrCmd(0xb0 + y);
        OLED_WrCmd(0x01);
        OLED_WrCmd(0x10); 
        for (x=0; x<X_WIDTH; x++)
        {
            OLED_WrDat(0);
        }
    }
}
Пример #30
0
void Draw_BMP(unsigned char x0, unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
{
	unsigned int j=0;
	unsigned char x,y;

  if(y1%8==0) y=y1/8;      
  else y=y1/8+1;
	for(y=y0;y<y1;y++)
	{
		OLED_Set_Pos(x0,y);
    for(x=x0;x<x1;x++)
	    {      
	    	OLED_WrDat(BMP[j++]);
	    }
	}
}