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

📄 lcd例程.c

📁 这个程序为TC9636的液晶驱动程序 这个程序为TC9636的液晶驱动程序 这个程序为TC9636的液晶驱动程序 这个程序为TC9636的液晶驱动程序
💻 C
字号:
#define lcd_da P0
sbit lcd_ce_wr   =P2^7;
sbit lcd_c_d     =P2^6;
void lcd_write_byte(bit com_or_data,unsigned char  buff)
{
 uchar	i=0;
 lcd_da=buff;
 lcd_ce_wr=1;
 lcd_c_d=com_or_data;
 lcd_ce_wr=0;
 lcd_ce_wr=1;
}

void lcd_write_1byte(uchar buff)
{
	lcd_write_byte(0,buff);
}
void lcd_write_1com(uchar buff)
{
	lcd_write_byte(1,buff);
}
void lcd_write_2byte(uchar  *  buff)
{
	lcd_write_byte(0,*buff);
	lcd_write_byte(1,*(buff+1));
}
void lcd_write_3byte(uchar  *   buff)
{
	lcd_write_byte(0,*buff);
	lcd_write_2byte(buff+1);
}
void lcd_init(void)
{
	lcd_comm_buff[0]=0;
	lcd_comm_buff[1]=0;
	lcd_comm_buff[2]=0x42;          //图形显示区首地址设置:0x0000
	lcd_write_3byte(lcd_comm_buff);
	lcd_comm_buff[0]=0x1e;
	lcd_comm_buff[2]=0x43;         //图形显示宽度设置
	lcd_write_3byte(lcd_comm_buff);
	lcd_write_1com(0x81);          //逻辑" EXOR"
	lcd_write_1com(0x9b);          //文本关,图形开,光标开,闪烁开
}
void clear_lcd_buff(void)
{
	lcd_comm_buff[0]=0;
	lcd_comm_buff[1]=0;
	lcd_comm_buff[2]=0;
}
void lcd_clear_page(void)
{
	uint i=0;
  clear_lcd_buff();

	lcd_comm_buff[2]=0x24;
	lcd_write_3byte(lcd_comm_buff);
	lcd_write_1com(0xb0);//自动写数据

	for(i=0xf00;i>0;i--)
	{
		#ifdef ZhengChang_Display
			lcd_write_1byte(0x00);
		#else
		  lcd_write_1byte(0xff);
		#endif
	}
	lcd_write_1com(0xb3);//自动写数据
}
void display_acsii(uint Display_Addr,uchar buff,uchar j)
{
	uchar i;
	uint at24_Addr_buff;
	at24_Addr_buff=0x4990+(uint)(buff-0x20)*16;
	clear_lcd_buff();
	for (i=0;i<16;i++)
	{
		lcd_Addr_Input(Display_Addr);
		if(power_display_bit)
			{
		    lcd_comm_buff[0]=~(~(at24_RanRead_byte(at24_Addr_buff+i))^main_xor_data)^Not_Xor[j];
			}
		else
			{
		    lcd_comm_buff[0]=(~(at24_RanRead_byte(at24_Addr_buff+i))^main_xor_data);
		  }
		#ifdef ZhengChang_Display
		 lcd_comm_buff[0]=~lcd_comm_buff[0];
		#endif
		lcd_comm_buff[1]=0xc0;
		lcd_write_2byte(lcd_comm_buff);
		Display_Addr=Display_Addr+30;
	}
}
void display_Chinese(uint Display_Addr,uint P_Add)
{
	uchar i;
	clear_lcd_buff();
	for(i=0;i<16;i++)
	{
		lcd_Addr_Input(Display_Addr);
		#ifdef ZhengChang_Display
		  lcd_comm_buff[0]=~(at24_RanRead_byte(P_Add+i*2)^main_xor_data);
		#else
		  lcd_comm_buff[0]=at24_RanRead_byte(P_Add+i*2)^main_xor_data;
		#endif

		lcd_comm_buff[1]=0xc0;
		lcd_write_2byte(lcd_comm_buff);

		#ifdef ZhengChang_Display
		  lcd_comm_buff[0]=~(at24_RanRead_byte(P_Add+i*2+1)^main_xor_data);
		#else
		  lcd_comm_buff[0]=at24_RanRead_byte(P_Add+i*2+1)^main_xor_data;
		#endif

		lcd_comm_buff[1]=0xc0;
		lcd_write_2byte(lcd_comm_buff);
		Display_Addr=Display_Addr+30;
	}
}
void lcd_Addr_Input(uint Display_Addr)
{
		lcd_comm_buff[0]=(uchar)Display_Addr;
		lcd_comm_buff[1]=(uchar)(Display_Addr>>8);
		lcd_comm_buff[2]=0x24;
		lcd_write_3byte(lcd_comm_buff);
}
void display_Chinese_24x24(uint Display_Addr,uchar Word_count)
{
	uchar i;
	uint at24_Addr_buff;
	at24_Addr_buff=0x4000+(uint)Word_count*72;
	clear_lcd_buff();
	for(i=0;i<24;i++)
	{
		lcd_Addr_Input(Display_Addr);
		lcd_write_1com(0xb0);//自动写数据
		#ifdef ZhengChang_Display
			 lcd_write_1byte(~(at24_RanRead_byte(at24_Addr_buff+i*3)^main_xor_data));
		   lcd_write_1byte(~(at24_RanRead_byte(at24_Addr_buff+i*3+1)^main_xor_data));
		   lcd_write_1byte(~(at24_RanRead_byte(at24_Addr_buff+i*3+2)^main_xor_data));
		#else
		   lcd_write_1byte(at24_RanRead_byte(at24_Addr_buff+i*3)^main_xor_data);
		   lcd_write_1byte(at24_RanRead_byte(at24_Addr_buff+i*3+1)^main_xor_data);
		   lcd_write_1byte(at24_RanRead_byte(at24_Addr_buff+i*3+2)^main_xor_data);
		#endif
	  lcd_write_1com(0xb3);//自动写数据
		Display_Addr=Display_Addr+30;
	}
}
uchar dprintf(uint Display_Addr,uchar WordType,char *fmt,...)
{
  uint tmp_Y;
	va_list arg_ptr;
	char c1,c2;
	uchar uLen,i=0,j=0;
	char xdata  *tmpBuf;
	EA_save=EA;
	EA=0;
	tmpBuf = calloc (32, sizeof (char));
	va_start(arg_ptr,fmt);
	uLen=(uchar)vsprintf(tmpBuf,fmt,arg_ptr);
	va_end(arg_ptr);

  if(printf_bit==0)
  	{
      tmp_Y=Display_Addr%30;
      if((tmp_Y+uLen)>30)
  		 uLen=30-tmp_Y;
  	}
  while(i<uLen)
  {
  	c1=tmpBuf[i];
  	c2=tmpBuf[i+1];
  	if(printf_bit==1)
  		{
  			s_printf(c1);
  		}
  	else
  		{
		  	if(c1>=0x00)
		  		{
		  			if(c1>=0x20)
		  				{
		  					display_acsii(Display_Addr+i,c1,i);
		  				}
		  		}
		  	else//中文
		  		{
            if(WordType==Display_Li24x24)
							{
				  			for(j=0;j<sizeof(GB_24)/sizeof(GB_24[0]);j++)
				  			 {
				  				if(c1==GB_24[j].Index[0]&&c2==GB_24[j].Index[1])
				  					break;
				  			 }
							 	if(j<sizeof(GB_24)/sizeof(GB_24[0]))
							 		{
							 		 	display_Chinese_24x24((Display_Addr+(i/2)*3),j);
							 		}
							}
						else if(WordType==Display_KaiCuType)
		  				{
				  			for(j=0;j<sizeof(KaiCu_Type)/sizeof(KaiCu_Type[0]);j++)
				  			 {
				  				if(c1==KaiCu_Type[j].Index[0]&&c2==KaiCu_Type[j].Index[1])
				  					break;
				  			 }
							 	if(j<sizeof(KaiCu_Type)/sizeof(KaiCu_Type[0]))
							 		{
							 		 	display_Chinese((Display_Addr+i),0x4fb0+j*32);
							 		}
							 }
						else if(WordType==Display_KaiXiType)
		  				{
				  			for(j=0;j<sizeof(KaiXi_Type)/sizeof(KaiXi_Type[0]);j++)
				  			 {
				  				if(c1==KaiXi_Type[j].Index[0]&&c2==KaiXi_Type[j].Index[1])
				  					break;
				  			 }
							 	if(j<sizeof(KaiXi_Type)/sizeof(KaiXi_Type[0]))
							 		{
							 		 	display_Chinese((Display_Addr+i),0x5310+j*32);
							 		}
							 }
						i++;
		  		}
  	  }
  	i++;
  }
  free(tmpBuf);
  EA=EA_save;
	return 0;
}

⌨️ 快捷键说明

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