📄 lcd.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 + -