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

📄 ocm4x8c.c

📁 小护士脉搏监护仪全套系统
💻 C
字号:
//ocm4x8c驱动
//孙新虎
//20050109

#include "includes.h"

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

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 &= 0x0F;
	LCD_POWER_OFF();
	time_out = 0;
}

void lcd_chk_busy(void)	//测试忙
{
	DDRA &= 0x0F;
	PORTA |= 0xf0;
	
	CLR_RS();
	SET_RW();
	SET_E();
	
	for(INT16U i=0xffff;i;i--)
	{
		if(bit_is_clear(PINA,PA7))
			break;
	}
	CLR_E();
	asm volatile ("nop");
	SET_E();
	asm volatile ("nop");
	CLR_E();
	CLR_RS();
	CLR_RW();
}

void write_byte(INT8U data)
{
	
	DDRA &= 0x0f;
	PORTA &= 0x0f;
	PORTA |= data & 0xf0;
	DDRA |= 0xf0;
	SET_E();
	asm volatile ("nop");
	CLR_E();
	
	asm volatile ("nop");
	DDRA &= 0x0f;
	PORTA &= 0x0f;
	PORTA |= data << 4;
	DDRA |= 0xf0;
	
	SET_E();
	asm volatile ("nop");
	CLR_E();
	CLR_RW();
	CLR_RS();
}

void lcd_write_data(uint8_t data)	//向LCD写入数据
{
	lcd_chk_busy();
	SET_RS();
	CLR_RW();
	write_byte(data);
}

void lcd_write_command(uint8_t command)	//向LCD写入命令
{
	lcd_chk_busy();
	CLR_RS();
	CLR_RW();
	write_byte(command);
}

INT8U_FLASH mycursor[] = 
{
	0x00,0x00,0x01,0x00,0x02,0x80,0x04,0x80,0x09,0x00,0x73,0xFE,0x80,0x01,0x80,0xFE,
	0x80,0x10,0x80,0xE0,0x80,0x20,0xC1,0xE0,0x30,0x40,0x0F,0x80,0x00,0x00,0x00,0x00
};

void lcd_init(void)     //LCD初始化
{
	lcd_write_command(0x20);   //4位接口,基本指令集
	lcd_write_command(0b110);   //点设定,光标右移,DDRAM为读状态
	lcd_write_command(0b1100);   //整体显示,光标不显示,光标位置不反白闪烁
	lcd_write_command(0x01);   //DDRAM清零,DDRAM地址计数器到00H
	lcd_write_command(0x40);
	INT8U *p = (INT8U *)mycursor;
	for(INT8U i=0;i<32;i++)
		lcd_write_data(pgm_read_byte(p++));
}

⌨️ 快捷键说明

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