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

📄 12864.c.120714080216

📁 atmega128串行操作lcd12864
💻 120714080216
字号:
/*****************************************
 *文件名:lcd12864.c
 *功能:LCD12864串行方式AVR驱动程序
 *日期:2010年7月10日
 ****************************************/
 
#include "12864.h"		//包含头文件

/*****************************************
 *函数名:delay_12864
 *功能:利用寄存器操作实现延时效果
 *参数:延时变量x
 *返回值:无
 ****************************************/

void delay_ms(uint x) 
{ 
	uint i,j; 
	for(j=0;j<x;j++)  
		for(i=0;i<1141;i++); 
}

void delay_12864(uint x) 
{ 
	uint i,j; 
	for(j=0;j<x;j++)  
		for(i=0;i<40;i++); 
}
/*****************************************
 *函数名:send_command
 *功能:向LCD控制器的寄存器写指令
 *参数:指令command_data
 *返回值:无
 ****************************************/
void send_command(uchar command_data) 
{ 
	uchar i,temp; 
	uchar i_data;
	DDR_lcd12864=0XFF;
	i_data=0xf8; 
	PORT_lcd12864&=~BIT(PB1); 
	for(i=0;i<8;i++) 
		{ 
			temp=i_data&0x80;
			if(temp==0x80) 
			PORT_lcd12864|=BIT(PB0);//PB0=1;
			if(temp==0x00) 
			PORT_lcd12864&=~BIT(PB0);//PB0=0;
			PORT_lcd12864&=~BIT(PB1);
			PORT_lcd12864|=BIT(PB1);
			i_data=i_data<<1; 
		} 
	i_data=command_data; 
	i_data&=0xf0;
	for(i=0;i<8;i++) 
		{ 
			temp=i_data&0x80;
			if(temp==0x80) 
			PORT_lcd12864|=BIT(PB0);
			if(temp==0x00) 
			PORT_lcd12864&=~BIT(PB0);
			PORT_lcd12864&=~BIT(PB1);
			PORT_lcd12864|=BIT(PB1);
			i_data=i_data<<1; 
		} 
	i_data=command_data; 
	i_data<<=4;
	for(i=0;i<8;i++) 
		{ 
			temp=i_data&0x80;
			if(temp==0x80) 
			PORT_lcd12864|=BIT(PB0);
			if(temp==0x00) 
			PORT_lcd12864&=~BIT(PB0);
			PORT_lcd12864&=~BIT(PB1);
			PORT_lcd12864|=BIT(PB1);
			i_data=i_data<<1;  
		} 
	delay_12864(15); 
} 

/*****************************************
 *函数名:send_data
 *功能:向LCD的寄存器写数据
 *参数:数据command_data
 *返回值:无
 ****************************************/
void send_data(uchar command_data) 
{ 
	uchar i,temp; 
	uchar i_data;
	DDR_lcd12864=0XFF;
	i_data=0xfa;  
	for(i=0;i<8;i++) 
		{ 
			temp=i_data&0x80;
			if(temp==0x80)
			PORT_lcd12864|=BIT(PB0);
			if(temp==0x00) 
			PORT_lcd12864&=~BIT(PB0);
			PORT_lcd12864&=~BIT(PB1);
			PORT_lcd12864|=BIT(PB1);
			i_data=i_data<<1;  
		} 
	i_data=command_data; 
	i_data&=0xf0; 
	for(i=0;i<8;i++) 
		{ 
			temp=i_data&0x80;
			if(temp==0x80) 
			PORT_lcd12864|=BIT(PB0);
			if(temp==0x00) 
			PORT_lcd12864&=~BIT(PB0);
			PORT_lcd12864&=~BIT(PB1);
			PORT_lcd12864|=BIT(PB1);
			i_data=i_data<<1; 
		} 
	i_data=command_data;
	i_data<<=4; 
	for(i=0;i<8;i++) 
		{ 
			temp=i_data&0x80;
			if(temp==0x80) 
		    PORT_lcd12864|=BIT(PB0);
			if(temp==0x00) 
			PORT_lcd12864&=~BIT(PB0);
			PORT_lcd12864&=~BIT(PB1);
			PORT_lcd12864|=BIT(PB1);
			i_data=i_data<<1; 
		}  
	delay_12864(15);  
}

/*****************************************
 *函数名:lcd_displayString
 *功能:在LCD12864上定坐标显示字符串
 *参数:行坐标x,列坐标y,显示字符串string
 *返回值:无
 ****************************************/
void lcd_displayString(uchar	x,uchar	y,uchar	*string)
{
	uchar	i;
	switch(x)
	{
		case	0:send_command(0x80);send_command(0x80+y);break;
		case	1:send_command(0x90);send_command(0x90+y);break;
		case	2:send_command(0x88);send_command(0x88+y);break;
		case	3:send_command(0x98);send_command(0x98+y);break;
	}
	
	for(i=0;string[i]!='\0';i++)
	{
		send_data(string[i]);
	}	
}

/*****************************************
 *函数名:lcd_init
 *功能:LCD12864的初始化函数
 *参数:无
 *返回值:无
 ****************************************/
void lcd_init() 
{ 
	delay_12864(150); 
	send_command(0x30); /*设置8位数据接口,基本指令模式。*/ 
	send_command(0x02); /*清DDRAM*/ 
	send_command(0x06); /*游标及显示右移一位*/  
	send_command(0x0c); /*整体显示开,游标关,反白关*/ 
	send_command(0x01); /*写入空格清屏幕*/ 
	send_command(0x80); /*设定首次显示位置*/ 
}

⌨️ 快捷键说明

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