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

📄 lcd._c

📁 包含无线收发模块 NREF905的所有功能库函数 本库函数与外部函数接口简单易用
💻 _C
字号:
///****************************************************************//
//液晶显示模块,采用ATmega8单片机和OCM4*8液晶,串行方式
//采用PORTD的高三位
//pd5---lcd_cs
//pd7---lcd_sdat
//pd6---lcd_sclk
//周金广2006年7月20日整理
///****************************************************************//
///////////////////////////////////////////////////
//lcd初始化程序
//////////////////////////////////////////////////
#include <stdio.h>
#include <iom8v.h>
#include <macros.h>


///////////////////////////////////////////////
//
//////////////////////////////////////////////
void delay(unsigned int times)
{unsigned int i;
for(i=0;i<times;i++)
;
}

void lcd_send_byte(char data)
{unsigned int i,data1;
for(i=0;i<8;i++)
{data1=data&0x80;       //test data bit7 为零则放送零,为一则放送一
 if(data1!=0)
 { PORTD|=BIT(PD7);
     delay(20);
  }
 else {PORTD&=~BIT(PD7);          ///当单片机速度太快时,加延时
     delay(20); }
	   
//PORTD=PORTD&data;
PORTD|=BIT(PD6);     // set sclk high

PORTD&=~BIT(PD6);    // set sclk low
data=data<<1;
}
}
/////////////////////////////////////////////////////////////
////
////////////////////////////////////////////////////////////
void lcd_write_data(char data)
{char data1=0xfa,data2,data3;
    
	PORTD|=BIT(PD5);      //set cs high
	
   data2=data&0xf0;
   data3=data&0x0f;
   data3=data3<<4;
   
   lcd_send_byte(data1);
   lcd_send_byte(data2);
   lcd_send_byte(data3);
   
   PORTD&=~BIT(PD5);       //set cs low

}
/////////////////////////////////////////////////////////////
////
////////////////////////////////////////////////////////////
void lcd_write_comm(char data)
//int data;
{char data1=0xf8,data2,data3;
   PORTD|=BIT(PD5);     //set cs high
   
   data2=data&0xf0;
   data3=data&0x0f;
   data3=data3<<4;
   
   lcd_send_byte(data1);
   lcd_send_byte(data2);
   lcd_send_byte(data3);
   
   PORTD&=~BIT(PD5);     //set cs low

}
void lcd_initial(void)
{
   DDRD=0xf0;
   PORTD=0xf8;
 
   lcd_write_comm(0x30);			//基本指令集
   lcd_write_comm(0x01);			//清除显示屏幕,把DDRAM位址计数器调整为"00H"
   lcd_write_comm(0x03);			//把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM
   lcd_write_comm(0x06);			//光标右移
   lcd_write_comm(0x0c);			//显示屏打开
}
/////////////////////////////////////////////////////
////
/////////////////////////////////////////////////////

void screen(data)
char data[65];

 {         
	    unsigned int i,j;
		lcd_write_comm(0x08);
		for (i=0;i<64;i++)
			{lcd_write_data(data[i]);
			if (i==15)
			lcd_write_comm(0x90);      //设定DDRAM第二行,第一列
			if (i==31)
			lcd_write_comm(0x88);     //设定DDRAM第三行,第一列
			if (i==47)
			lcd_write_comm(0x98);     //设定DDRAM第四行,第一列
			if (i==63)
			lcd_write_comm(0x80);     //设定DDRAM第一行,第一列
			}
		lcd_write_comm(0x0c);
}	
//////////////////////////////////
void fanxian(unsigned char hang)   //  0x80-1     0x90-2   0x88-3    0x98-4
	{	
	    unsigned char x,y,i,j;
	     lcd_write_comm(0x34);        //开启绘图功能显示 
		 lcd_write_comm(0x34);
	    
	    y=0x80;
        x=0x80;
		lcd_write_data(0x00);
		lcd_write_comm(x);             //设置x 坐标 
		lcd_write_comm(y); 
		for (j=0;j<32;j++)
		  {for (i=0;i<16;i++)
			lcd_write_data(0x00);
		
			
			lcd_write_comm(++x);
			lcd_write_comm(y);
			
		  }
		
        y=0x88; 
		x=0x80;
		lcd_write_data(0x00);
     	lcd_write_comm(x);
		lcd_write_comm(y);
		for (j=32;j<64;j++)
		  {for (i=0;i<16;i++)
			lcd_write_data(0x00);
			lcd_write_comm(++x);
			lcd_write_comm(y); 	 
			
		  
		  }
		    
		  lcd_write_comm(0x36);        //开启绘图功能显示 	
		    	
		if(hang==1)
    	{
    	y=0x80; 
		x=0x80;}
		else if(hang==2)
		{
		y=0x80;
		x=0x90;}
		else if(hang==3)
		{y=0x88;
		 x=0x80;}
		else
		{y=0x88;
		x=0x90;}
		
		lcd_write_comm(x);             //设置x 坐标 
		lcd_write_comm(y);             //设置y 坐标

		
		for (j=0;j<16;j++)
		  {for (i=0;i<16;i++)
			lcd_write_data(0xff);
	
			lcd_write_comm(++x);
			lcd_write_comm(y);
			
		  }
		// lcd_write_comm(0x36);        //开启绘图功能显示   
    } 
//////////////////////////////////////////////////////
///
//////////////////////////////////////////////////
/*
void fanbai(char data)
{	lcd_write_comm(0x0034);       //关闭绘图显示功能
		
		y=data;
        x=0x0080;
		lcd_write_comm(x);             //设置x 坐标 
		lcd_write_comm(y); 
		for (j=0;j<32;j++)
		  {for (i=0;i<16;i++)
			lcd_write_data(0x0000);
		
			
			lcd_write_comm(++x);
			lcd_write_comm(y);
			*P_Watchdog_Clear=0x0001;
		  }
		y=0x0088; 
		x=0x0080;
	    		  
	lcd_write_comm(0x0036);        //开启绘图功能显示 
}


*/

/*********************************************************************************
/**液晶部分小功能的实现
//*********************************************************************************
   //  打开游标,使游标位置的字忽闪忽闪的.若是英文,则忽闪两字符.

lcd_lcd_write_comm(0x30);
lcd_lcd_write_comm(0x  );   //此处是设定的游标位置
lcd_lcd_write_comm(0x0d);     
*/
/***2   打开游标,使游标位置的字下面带一横线.若是英文,则横线跨两字符.
lcd_lcd_write_comm(0x30);
lcd_lcd_write_comm(0x  );   //此处是设定的游标位置
lcd_lcd_write_comm(0x0e);
*/
/***3   打开游标,使游标位置的字下面带一横线,且字正常与反白显示相间.若是英文,则横跨两字符.
lcd_lcd_write_comm(0x30);
lcd_lcd_write_comm(0x  );   //此处是设定的游标位置
lcd_lcd_write_comm(0x0f);
*/


/*************反显程序
lcd_lcd_write_comm(0x34);    //扩充指令集动作
lcd_lcd_write_comm(0x04);            //1.3行呈现反显
lcd_lcd_write_comm(0x05);          //2,4行有变化 .根据实际情况选择.只可开两行,全开没变化*/

⌨️ 快捷键说明

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