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

📄 lcd.c

📁 MEGA32L 单片机的按键,LED,LCD等测试例程,ICCAVR编译器
💻 C
字号:
//===========================================================================================
//液晶模块山的电阻设置为并行方式即可
//FileName	=lcd.c
//Date		=20071214...20071215
//RewriteBy	=JLXLS
//LCD FORMAT	=16 ASCII CHAR * 2 LINES
//===========================================================================================
//
#include "lcd.h"
#include "delay.h"

//---------------------------------------------------------
//液晶发送半字节的函数
//输入:
//	dat	需要发送的数据字节(高半字节有效)
//输出:
//	无
//---------------------------------------------------------
static	void	lcd_send_nibble(uchar dat)
{
	dat &=0xF0;
	LCD_DATA_PORT &=0x0F;
	LCD_DATA_PORT |=dat;
	delay_x1us(1);
	LCD_CONTROL_PORT |=BIT(LCD_EN_PIN);
	delay_x1us(2);
	LCD_CONTROL_PORT &=~BIT(LCD_EN_PIN);
}

//---------------------------------------------------------
//液晶发送字节的函数
//输入:
//	data_or_cmd	!=0 数据字节标志, =0 指令字节标志
//	dat	需要发送的字节
//输出:
//	无
//---------------------------------------------------------
static	void	lcd_send_byte(uchar data_or_cmd, uchar dat)
{
	LCD_CONTROL_PORT &=~BIT(LCD_RS_PIN);
	if(data_or_cmd)
	{	//数据
		LCD_CONTROL_PORT |=BIT(LCD_RS_PIN);
	}
	else
	{	//指令
		LCD_CONTROL_PORT &=~BIT(LCD_RS_PIN);
	}
	delay_x1us(50);
	
	LCD_CONTROL_PORT &=~BIT(LCD_EN_PIN);
	//高半字节先发送
	lcd_send_nibble(dat);	
	lcd_send_nibble(dat <<4);
}

//---------------------------------------------------------
//液晶初始化函数,4BIT数据口方式
//输入:
//	无
//输出:
//	无
//---------------------------------------------------------
void	lcd_init(void)
{
uchar	i;
	//引脚初始化,都是输出方式,输出0
	LCD_DATA_DDR |= (BIT(LCD_D7) | BIT(LCD_D6) | BIT(LCD_D5) | BIT(LCD_D4));
	LCD_CONTROL_DDR |= (BIT(LCD_RS_PIN) | BIT(LCD_RW_PIN) | BIT(LCD_EN_PIN));

	LCD_DATA_PORT &= ~(BIT(LCD_D7) | BIT(LCD_D6) | BIT(LCD_D5) | BIT(LCD_D4));
	LCD_CONTROL_PORT &= ~(BIT(LCD_RS_PIN) | BIT(LCD_RS_PIN) | BIT(LCD_RS_PIN));
	
	delay_x1ms(50);
	//需要硬件上配合将液晶配置为4位接口方式
	for(i =1; i <=3; ++i)
	{
		lcd_send_nibble(0x30);
		delay_x1ms(15);
	}
	lcd_send_nibble(0x20);
	lcd_send_byte(WRITE_COMMAND, SET_FUNCTION);
	lcd_send_byte(WRITE_COMMAND, DISPLAY_ON);
	lcd_send_byte(WRITE_COMMAND, DISPLAY_CLR);
	lcd_send_byte(WRITE_COMMAND, ENTRY_MODE);
}


//---------------------------------------------------------
//液晶位置定位函数
//输入:
//	x	列位置(1-0x10)
//	y	行位置(1-2)
//输出:
//	无
//---------------------------------------------------------
void	lcd_gotoxy(uchar x, uchar y)
{
uchar	address;
	address =LCD_LINE_ONE;
	if(y !=1) address =LCD_LINE_TWO;
	address +=(x-1);
	lcd_send_byte(WRITE_COMMAND, SET_DDRAM|address);
}


//---------------------------------------------------------
//液晶输出控制函数
//输入:
//	c	命令:	
// 		LCD_OP_CMD_CLR_SCREEN	清屏
// 		LCD_OP_CMD_NEXT_LINE	换行,到第二行
//		LCD_OP_CMD_BACK_COLUM	退格命令
//		其他,显示字符
//输出:
//	无
//---------------------------------------------------------
void	lcd_putc(uchar c)
{
	if(c ==LCD_OP_CMD_CLR_SCREEN)
	{
		lcd_send_byte(WRITE_COMMAND, DISPLAY_CLR);
		delay_x1ms(2);
	}
	else if(c ==LCD_OP_CMD_NEXT_LINE)
	{
		lcd_gotoxy(1, 2);
	}
	else if(c ==LCD_OP_CMD_BACK_COLUM)
	{
		lcd_send_byte(WRITE_COMMAND, CURSOR_BACK);
	}
	else
	{	//显示字节
		lcd_send_byte(WRITE_DATA, c);
	}
}

//---------------------------------------------------------
//液晶显示字符串
//输入:
//	ptr	显示字符串指针
//输出:
//	无
//---------------------------------------------------------
void	lcd_print(uchar *ptr)
{
	while(*ptr)
	{
		lcd_putc(*ptr++);
	}
}

//End Of File

⌨️ 快捷键说明

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