⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcb8000.c

📁 拓普微TCB8000中文液晶的驱动程序,并在此基础上完成了显示汉字,游标,图片等功能.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "TCB8000.h"

uint8 PkgFgColor[]={3,0x20,0xe0,0x07};                         // 前景颜色 
uint8 PkgBgColor[]={3,0x15,0xe0,0x07};                         // 背景颜色 
uint8 CharCoord[]={5,0x12,0x00,0x00,0x00,0x00};                 // 字符写入位置 

//----------------------------------- 
// 延时子程序 
//----------------------------------- 
void crt_delay(uint16 m)                                             // 12MHz Xtal, close to ms value 
{ 
      uint16 j; 
      uint16 i; 
 
      for(i=0; i<m; i++) 
         for(j=0; j<500; j++) 
			;//            NOP (); 
} 
//----------------------------------- 
// 写命令  
//----------------------------------- 
#define SdCmd(dat)  	LCD_DAT_ADDR = dat
//----------------------------------- 
//结束命令  
//----------------------------------- 
#define  CmdEnd()	    LCD_COM_ADDR = 0x01 

//复位LCD
void LcdReset() 
{
	IO2DIR |= (1 << 24);
	IO2CLR |= (1 << 24);
	crt_delay(2);
	IO2SET |= (1 << 24);	
	OSTimeDly(OS_TICKS_PER_SEC / 10);
}
//----------------------------------- 
//写入一个命令包 
//----------------------------------- 
void WritePKG(const uint8 *pkg) 
{ 
      uint8 i; 
      crt_delay(20); 
      //OSTimeDly(OS_TICKS_PER_SEC/200);

      for(i=*pkg;i;i--) 
          SdCmd(*(++pkg)); 
    
      CmdEnd();

} 

//----------------------------------- 
//设置前景颜色 
//----------------------------------- 
void SetFgColor(uint8 par,uint16 color) 
{ 
      PkgFgColor[1]=par; 
      PkgFgColor[2]=color; 
      PkgFgColor[3]=color>>8; 
      WritePKG(PkgFgColor); 
} 

//----------------------------------- 
//设置背景颜色 
//----------------------------------- 
void SetBgColor(uint16 color) 
{ 
      PkgBgColor[2]=color; 
      PkgBgColor[3]=color>>8; 
      WritePKG(PkgBgColor); 
} 

//----------------------------------- 
//由填充颜色清屏 
//----------------------------------- 
const uint8 PkgCLS[]={9,0x27,0x00,0x00,0x00,0x00,0x3f,0x01,0xef,0x00};  
void ClearScreen(uint16 color) 
{ 
	uint8 buf[5];
    SetFgColor(0x20,color); 
    WritePKG(PkgCLS); 
    crt_delay(5); 
	buf[0]=4;
	buf[1]=0x83;
	buf[2]=0x00;
	buf[3]=0xf1;
	buf[4]=0x00; //清楚游标寄存器 D[1:0]=01 2bpp
	WritePKG(buf);		  
    crt_delay(5);
} 

//----------------------------------- 
//画点 
//----------------------------------- 
uint8 dot[]={5,0x23,0x00,0x00,0x00,0x00}; 
void Draw_Dot(uint16 X,uint16 Y) 
{ 
      dot[2]=X; 
      dot[3]=X>>8; 
      dot[4]=Y; 
      dot[5]=Y>>8; 
      WritePKG(dot); 
      crt_delay(10); 
} 

//----------------------------------- 
//画线段或矩形 
//----------------------------------- 
uint8 rect[]={9,0x27,0x00,0x00,0x00,0x00,0x3f,0x01,0xef,0x00}; 
void Draw_Rect(uint8 para,uint16 x0,uint16 y0,uint16 x1,uint16 y1) 
{ 
      rect[1]=para; 
      rect[2]=x0; 
      rect[3]=x0>>8; 
      rect[4]=y0; 
      rect[5]=y0>>8; 
      rect[6]=x1; 
      rect[7]=x1>>8; 
      rect[8]=y1; 
      rect[9]=y1>>8; 
      WritePKG(rect); 
      crt_delay(10); 
} 
//----------------------------------- 
//设置字符坐标 
//----------------------------------- 
void SetCharCoord(uint16 coordX,uint16 coordY) 
{ 
      CharCoord[2]=coordX; 
      CharCoord[3]=coordX>>8; 
      CharCoord[4]=coordY; 
      CharCoord[5]=coordY>>8; 
      WritePKG(CharCoord); 
} 

//----------------------------------- 
//写入 16*16的字符串 
//----------------------------------- 
void Printstr(const uint8 *pstr) 
{ 
      while(*pstr>0) 
      { 
          SdCmd(0x16); 
          SdCmd(*pstr++); 
          SdCmd(*pstr++); 
          CmdEnd(); 
          crt_delay(5); 
      } 
} 

//----------------------------------- 
//写入 8*8或 8*16的字符串 
//----------------------------------- 
void Print(const uint8 *pstr) 
{ 
      while(*pstr>0) 
      { 
          SdCmd(0x16); 
          SdCmd(*pstr++); 
          CmdEnd(); 
          crt_delay(5); 
      } 
} 
//游标建立子程序
void SET_SPRITE()
{
	uint8 j,k;
	uint8 Buffer[5];

	//下面是一个箭头(16*16 点阵)的游标图案数据,仅作为示例
	const unsigned char gImage_1[64] = { /* 0X00,0X02,0X10,0X00,0X10,0X00, */
	0X04,0X00,0X00,0X00,0X2A,0X00,0X00,0X00,0X2A,0XA0,0X00,0X00,0X28,0XAA,0X00,0X00,
	0X28,0X0A,0X90,0X00,0X28,0X00,0XA8,0X00,0X28,0X00,0X1A,0X80,0X28,0X00,0X02,0XA8,
	0X28,0X00,0X00,0XA8,0X28,0X00,0X0A,0X90,0X28,0X00,0XAA,0X00,0X28,0X0A,0XA0,0X00,
	0X28,0X6A,0X00,0X00,0X2A,0XA0,0X00,0X00,0X2A,0X40,0X00,0X00,0X04,0X00,0X00,0X00,
	};

	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x00;
	Buffer[3]=0xf1;
	Buffer[4]=0x01; //激活游标寄存器 D[1:0]=01 2bpp
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x02;
	Buffer[3]=0xf1;
	Buffer[4]=BLUE; //设置游标数据00 的显示色彩(低8 位)
	WritePKG(Buffer);
	Buffer[0]=4; //LUT 00 high
	Buffer[1]=0x83;
	Buffer[2]=0x03;
	Buffer[3]=0xf1;
	Buffer[4]=BLUE>>8; //设置游标数据00 的显示色彩(高8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x04;
	Buffer[3]=0xf1;
	Buffer[4]=(uint8)GREEN; //设置游标数据01 的显示色彩(低8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x05;
	Buffer[3]=0xf1;
	Buffer[4]=GREEN>>8; //设置游标数据01 的显示色彩(高8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x06;
	Buffer[3]=0xf1;
	Buffer[4]=(uint8)WHITE; //设置游标数据10 的显示色彩(低8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x07;
	Buffer[3]=0xf1;
	Buffer[4]=WHITE>>8; //设置游标数据10 的显示色彩(高8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x08;
	Buffer[3]=0xf1;
	Buffer[4]=BLACK; //设置游标数据11 的显示色彩(低8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x09;
	Buffer[3]=0xf1;
	Buffer[4]=BLACK>>8; //设置游标数据11 的显示色彩(高8 位)
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x0a;
	Buffer[3]=0xf1;
	Buffer[4]=0x0f; // 设置游标图案水平像素点数,示例为16*16 点阵
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x0b;
	Buffer[3]=0xf1;
	Buffer[4]=0x0f; // 设置游标图案水蛭像素点数,示例为16*16 点阵
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x42;
	Buffer[3]=0xf1;
	Buffer[4]=0x00; //设置游标图案存储单元起始地址(低8 位) 示例为2b000H
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x43;
	Buffer[3]=0xf1;
	Buffer[4]=0xb0; //设置游标图案存储单元起始地址(中8 位) 示例为2b000H
	WritePKG(Buffer);
	Buffer[0]=4;
	Buffer[1]=0x83;
	Buffer[2]=0x44;
	Buffer[3]=0xf1;
	Buffer[4]=0x02; //设置游标图案存储单元起始地址(高2 位) 示例为2b000H
	WritePKG(Buffer);
	Buffer[0]=4;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -