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

📄 雪中梅花.c

📁 利用89C52单片机与12864液晶在液晶上显示图片
💻 C
📖 第 1 页 / 共 3 页
字号:
   ddd();
  tupian(tab4);
   ddd();
   tupian(tab5);
   ddd();
   tupian(tab6);
   ddd();
  }
  }
/******************************************************************
 延时程序
 ****************************************************************/
void delay(unchar ms)
{unchar i;
for(i=0;i<ms;i++)
{_nop_();}
}
/***************************************************************
检测子程序
***************************************************************/
BOOL lcd_bz()
{      
 BOOL result;
 rs = 0;
 rw = 1;
 ep = 1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 result = (BOOL)(P0 & 0x80);
 ep = 0;
 return result;
}
/*********************************************************************
命令写入子程序
********************************************************************/
void lcd_wcmd(unchar cmd)   
{
 while(lcd_bz())
 rs = 0;
 rw = 0;
 ep = 0;
 _nop_();
 _nop_();
 P0 = cmd;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ep = 1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ep = 0;
}
/***************************************************************************
数据写入子程序
****************************************************************************/
void lcd_wdat(unchar dat)
{
 while(lcd_bz());
 rs = 1;
 rw = 0;
 ep = 0;
 P0 = dat;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ep = 1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ep = 0;
}
/**************************************************************************
从LCD中读出数据
*****************************************************************************/
unsigned char Lcd_ReadData(void)
{
	unsigned char Temp;
	while(lcd_bz());
    P0=0xff;
 	rs=1;
	rw=1;
	ep=1;
	_nop_();
   	Temp=P0;
   	ep=0;
   	return Temp;
}
/*向LCD中写入图片*/


void tupian(unsigned char *tab)
{unchar jishu1,jishu2;
 for(jishu2=0;jishu2<32;jishu2++)
 {for(jishu1=0;jishu1<8;jishu1++)
   {lcd_wcmd(0x36);   
  	lcd_wcmd(jishu2+0x80);         //行地址
	lcd_wcmd(jishu1+0x80);         //列地址  
 	lcd_wdat(*tab);
	tab++;
	lcd_wdat(*tab);
	tab++;
	lcd_wcmd(0x30);
	 }
  }
for(jishu2=0;jishu2<32;jishu2++)
 {for(jishu1=8;jishu1<16;jishu1++)
   {lcd_wcmd(0x36);   
  	lcd_wcmd(jishu2+0x80);         //行地址
	lcd_wcmd(jishu1+0x80);         //列地址  
 	lcd_wdat(*tab);
	tab++;
	lcd_wdat(*tab);
	tab++;
	lcd_wcmd(0x30);
	 }
  }
  }

/***************************************
向LCD指定坐标写入一个象素,象素颜色有两种,0代表白(无显示),1代表黑(有显示)
****************************************/
void Lcd_PutPixel(unsigned char x,unsigned char y,unsigned char Color)
{
	unsigned char z,w;
	unsigned int Temp;
	if(x>=128||y>=64)
		return;
	Color=Color%2;
	w=15-x%16;//确定对这个字的第多少位进行操作
	x=x/16;//确定为一行上的第几字

	if(y<32) //如果为上页
		z=0x80;
	else     //否则如果为下页
		z=0x88;

	y=y%32;
	lcd_wcmd(0x36);
	lcd_wcmd(y+0x80);     //行地址
	lcd_wcmd(x+z);     //列地址 
	Temp=Lcd_ReadData();//先空读一次
	Temp=(unsigned int)Lcd_ReadData()<<8;//再读出高8位
	Temp|=(unsigned int)Lcd_ReadData();//再读出低8位
	if(Color==1) //如果写入颜色为1
		Temp|=MaskTab[w];//在此处查表实现加速
	else         //如果写入颜色为0
		Temp&=~MaskTab[w];//在此处查表实现加速
	lcd_wcmd(y+0x80);     //行地址
	lcd_wcmd(x+z);     //列地址
	lcd_wdat(Temp>>8);
	lcd_wdat(Temp&0x00ff);
    lcd_wcmd(0x30);
	
}
void Lcd_HoriLine(unsigned char x,unsigned char y,unsigned char Length,unsigned char Color)
{
	unsigned char i;
	if(Length==0)
		return;
	for(i=0;i<Length;i++)
	{
		Lcd_PutPixel(x+i,y,Color);
	}
}
void lcd_init()
{lcd_wcmd(0x30);
 lcd_wcmd(0x0c);
 lcd_wcmd(0x01);
 lcd_wcmd(0x06);
 }
 void ddd()
 {unchar i,j;
  for(i=0;i<250;i++)
  {for(j=0;j<250;j++)
  {_nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  }
  }
  }

⌨️ 快捷键说明

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