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

📄 example_28xgpio.c

📁 TMS320F2812驱动LCD显示器OCM4X8C 可以显示汉字和位图
💻 C
📖 第 1 页 / 共 2 页
字号:
//11    return (LCDPORT&0x80);
	return 0;
}

//---------------------------------------
uchar Read_data()
{
    Check_busy ();
	DELAY;
    RS=1;   //
	DELAY;
    RW=1;   //Read
	DELAY;
//111    return LCDPORT;
	return 0;
}
//---------------------------------------
void Send_comm(uint content)
{
	Check_busy ();
	RS=0;   //command
	DELAY;
	RW=0;   //write
	DELAY;
	SetLCDPORT(content);   //output data or comm
	DELAY;
	EN=1;
	DELAY;
	EN=0;
}
//---------------------------------------
void Send_data (uint content)
{
	Check_busy ();
	RS=1;   //data
	DELAY;
	RW=0;   //write
	DELAY;
	SetLCDPORT(content);   //output data or comm
	DELAY;
	EN=1;
	DELAY;
	EN=0;
}
//------------------初始化-----------------
void LCD_init (void)
{
	Send_comm(0x30);  //30---基本指令动作 
	DELAY;
	Send_comm(0x01);  //清屏,地址指针指向00
	DELAY;
	DELAY;
	Send_comm(0x06);  //光标的移动方向,写入时,游标右移动
	DELAY;
	Send_comm(0x0c);  //开显示,关游标游标off,游标位置off
	
}
//---------------显示汉字或字符串----------------
void  Disp_String(uint StartRow, uint StartColumn,uchar *pStr)
{//字符串长度必须是2的整数倍
	uchar PosIndex,ConIndex,BASEADDR;
	uchar CurRow=0,CurCol=0;
	if(StartRow<1||StartRow>4||StartColumn<1||StartColumn>16)return;//输入位置错误
	Send_comm(0x30);//基本指令
	
	for(PosIndex=0,ConIndex=0;ConIndex<strlen(pStr);PosIndex+=2){
		CurRow = (StartRow+PosIndex)/16;
		CurCol = ((StartRow+PosIndex-1)-16*CurRow)/2;
		switch(CurRow) {
			case 0: BASEADDR = 0x80;
				break;
			case 1: BASEADDR = 0x90;
				break;
			case 2: BASEADDR = 0x88;
				break;
			case 3: BASEADDR = 0x98;
				break;	
			default:;
			}
		Send_comm(BASEADDR+CurCol);//设定DDRAM地址
		Send_data(pStr[ConIndex]);  
		if(pStr[ConIndex]<0x80 && pStr[ConIndex+1]>0x80){
			Send_data(' ');
			ConIndex++;
			}
		else{
			Send_data(pStr[ConIndex+1]);
			ConIndex+=2;
			}
	}
}
//----------------显示图形-----------------
void Disp_Img (int left, int top, uint width, uint heigh, uchar *pimg)
{//显示区域图形,此处left必须是16的整倍数,width也必须是16的整倍数
  uchar row,column,rowAddr,colAddr;
  if(left<0||top<0||top>31||0!=(width%16)||0!=(left%16)) return;
    //
    for(row=top;row<MIN(top+heigh,64);row++)
    {
      for(column=left;column<MIN(left+width,128);column+=16)
      {
		  if (row>32) {
			  rowAddr = row-0x21;
			  colAddr = (column+128)/16;
		  }
		  else{
		  	  rowAddr = row;
			  colAddr = column/16;
		  }
        Send_comm(0x34);//扩展指令,关闭图形
        Send_comm(0x80+rowAddr);
        Send_comm(0x80+colAddr);//设地址
        Send_comm(0x30);//基本指令
        Send_data(pimg[(column-left)/8+(row-top)*width/8]);
        Send_data(pimg[(column-left)/8+(row-top)*width/8+1]);//写内容
        }
    }
  Send_comm(0x36);//显示图形
}
void	 Clear_Img(int left, int top, uint width, uint heigh)
{
  uchar row,column,rowAddr,colAddr;
  if(left<0||top<0||top>31||0!=(width%16)||0!=(left%16)) return;
    //
    for(row=top;row<MIN(top+heigh,64);row++)
    {
      for(column=left;column<MIN(left+width,128);column+=16)
      {
		  if (row>32) {
			  rowAddr = row-0x21;
			  colAddr = (column+128)/16;
		  }
		  else{
		  	  rowAddr = row;
			  colAddr = column/16;
		  }
        Send_comm(0x34);//扩展指令,关闭图形
        Send_comm(0x80+rowAddr);
        Send_comm(0x80+colAddr);//设地址
        Send_comm(0x30);//基本指令
        Send_data(0);
        Send_data(0);//写内容
        }
    }
  Send_comm(0x36);//显示图形
}
void Disp_FullImg(uchar *pImg)
{
	uchar i,j;
	//上半屏
	for (j=0;j<32;j++) {
		for(i=0;i<8;i++){
			Send_comm(0x34);//扩展指令
			Send_comm(0x80+j);//垂直的坐标
			Send_comm(0x80+i);//水平坐标	
			Send_comm(0x30);//基本指令
			Send_data(pImg[j*16+2*i]);
			Send_data(pImg[j*16+2*i+1]);			
		}
	}
	//下半屏
	for (j=0;j<32;j++) {
		for(i=0;i<8;i++){
			Send_comm(0x34);//扩展指令
			Send_comm(0x80+j);//垂直坐标
			Send_comm(0x88+i);//水平坐标	
			Send_comm(0x30);//基本指令
			Send_data(pImg[512+j*16+2*i]);
			Send_data(pImg[512+j*16+2*i+1]);			
		}
	}
	Send_comm(0x36);//显示图形
}

//--------------------某一行反白显示----------------------/
void Reverse_displine(uint line)
{
      Send_comm(0x34);//扩展指令
	  line = line &0x03;
      Send_comm(0x04+line-1);//基本指令
	  Send_comm(0x30);//基本指令
}
//--------------------某一图形区域反白显示-----------------------
void Reverse_dispRect(uint left, uint top, uint width, uint heigh)
{//显示区域图形,此处left必须是16的整倍数,width也必须是16的整倍数
	uchar row,column,colAddr;
	uchar temp1,temp2;
//	if(left<0||left>15||top<0||top>31||0!=(left%16)||0!=(width%16)) return;
    //
    for(row=top;row<MAX(top+heigh,64);row++)
    {
		for(column=left;column<MAX(left+width,128);column+=16)
		{
			if (row>32) {
				row = row-32;
				colAddr = (column+64)/16;
			}
			else{
				colAddr = column/16;
			}
			Send_comm(0x34);//扩展指令,关闭图形
			Send_comm(0x80+row);
			Send_comm(0x80+colAddr);//设地址
			Send_comm(0x30);//基本指令
			temp1 = Read_data();//读出原内容
			temp2 = Read_data();
			Send_data(temp1^0xff);
			Send_data(temp2^0xff);//写回取反后内容
		}
    }
	Send_comm(0x36);//显示图形
}
//
void Delay_us (uint us)   //delay time
{
	while(us--); 
}
void Delay_ms(uint ms)
{
	uchar i; 
	do{ 
		i = 4; 
		do { 
			Delay_us(39); 
		} while(--i); 
	}while(--ms); 
	
}

//===========================================================================
// No more.
//===========================================================================


//开启或关闭光标
void Cursor_OnOff(uchar CursorOnOff,uchar reverseOnOff)
{
	uchar  res=0x0C;
	if(reverseOnOff){
		res++;
	}
	if(CursorOnOff){
		res +=2;
	}
	Send_comm(res);
}
//光标回到起始处
void Cursor_GoOrig(void)
{
    Send_comm(0x02);
    Send_comm(0x06);
}
//光标移动
void Cursor_Move(int LeftRight)
{
	if (LeftRight<0) {
		while(LeftRight++) Send_comm(0x10);
	}
	if (LeftRight>0) {
		while(LeftRight--) Send_comm(0x14);
	}
}
//卷动使

⌨️ 快捷键说明

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