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

📄 lcd.c

📁 OCM4X8C驱动 作者:孙新虎 sunxinhu@163.com 日期:200412
💻 C
字号:
//OCMJ4X8C驱动程序
//作者: 孙新虎
//日期: 20041211

#include "include.h"

void delay(uint8_t i)		//短时间延时
{
	while(--i);
}

void lcd_power_on(void)	//打开LCD电源
{
	PORTB &= ~(_BV(LCD_E) | _BV(LCD_RS) | _BV(LCD_RW) | _BV(LCD_RST));
	DDRB |= _BV(LCD_E) | _BV(LCD_RS) | _BV(LCD_RW) | _BV(LCD_RST);
	LCD_POWER_ON();
	delay(0xff);
	SET_RST();
}

void lcd_power_off(void)	//关闭LCD电源
{
	DDRB &= ~(_BV(LCD_E) | _BV(LCD_RS) | _BV(LCD_RW));
	PORTB &= ~(_BV(LCD_E) | _BV(LCD_RS) | _BV(LCD_RW));
	DDRA = 0;
	LCD_POWER_OFF();
}


void lcd_chk_busy(void)	//测试忙
{
	uint16_t i;
	DDRA = 0;
	PORTA = 0XFF;
	
	CLR_RS();
	SET_RW();
	SET_E();
	
	for(i=0xffff;i;i--)
	{
		if(bit_is_clear(PINA,PA7))
			return;
	}
}

void lcd_write_data(uint8_t data)	//向LCD写入数据
{
	lcd_chk_busy();
	SET_RS();
	CLR_RW();
	PORTA = data;
	DDRA = 0xff;
	SET_E();
	delay(2);
	CLR_E();
}

void lcd_write_command(uint8_t command)	//向LCD写入命令
{
	lcd_chk_busy();
	CLR_RS();
	CLR_RW();
	PORTA = command;
	DDRA = 0xff;
	SET_E();
	delay(2);
	CLR_E();
}

uint8_t lcd_read_byte(void)	//从LCD读数据
{
	uint8_t retval;
	lcd_chk_busy();
	SET_RS();
	SET_RW();
	SET_E();
	delay(1);
	retval = PINA;
	CLR_E();
	
	return retval;
}

void lcd_write_chinese(uint16_t ch)
{
	lcd_write_data(*((uint8_t *)&ch + 1));
	lcd_write_data(*((uint8_t *)&ch));
}

void lcd_display_string(uint8_t addr,uint8_t * p)
{
	uint8_t temp = *p;
	lcd_write_command(0x80 | addr);
	while(temp)
	{
		lcd_write_data(temp);
		p ++;
		temp = *p;
	}
}

void lcd_init(void)     //LCD初始化
{
	lcd_write_command(0x30);   //基本指令集动作,需要72us
	lcd_write_command(0x01);   //将DDRAM添满20H,并设置DDRAM地址记数器(AC)=00H,需要4.6ms
	lcd_write_command(0x06);   //进入点设定
	lcd_write_command(0x0C);   //开显示,关游标
	lcd_write_command(0x01);   //DDRAM清零,DDRAM地址计数器到00H
}

void test(void) //测试
{
	lcd_display_string(0,"a 液晶显示真 TMD爽啊");
}

⌨️ 快捷键说明

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