📄 lcd4.c
字号:
#include "LCD4.h"
void LCD_Init(void)
{
SET_DISABLE;
SET_RS_OUT;
SET_RW_OUT;
SET_EN_OUT;
need_check_busy = 0;
LCD_WriteChar(0x28,0); //reset
Timer_Wait_ms(15);
LCD_WriteChar(0x28,0);
Timer_Wait_ms(15);
LCD_WriteChar(0x28,0);
need_check_busy = 1;
LCD_WriteChar(0x28,0);
LCD_WriteChar(0x08,0); //close display
LCD_WriteChar(0x01,0); //clear
LCD_WriteChar(0x06,0); //set pointer
LCD_WriteChar(0x0e,0); //open display
}
void LCD_WaitReady(void)
{
LCD_DATA |= (0x0f<<LCD_DATA_LSHIFT);
LCD_DDR &= (~(0x0f<<LCD_DATA_LSHIFT));
SET_RS_CMD;
SET_RW_READ;
SET_ENABLE; //RS=0 R/W=1 EN=1
DELAY_8M_us;
while(LCD_PIN & (0x08<<LCD_DATA_LSHIFT))
; //if Hignest Bit = 1 then busy
SET_DISABLE;
}
void LCD_WriteChar(uint8_t cmd,uint8_t data)
{
uint8_t buf,bit4buf;
if(need_check_busy)
LCD_WaitReady();
if(cmd)
{
SET_RS_CMD;
SET_RW_WRITE; //R/W=0 RS=0
buf = cmd;
}
else
{
SET_RS_DATA;
SET_RW_WRITE; //R/W=0 RS=1
buf = data;
}
LCD_DATA &= (~(0x0f<<LCD_DATA_LSHIFT)); //Write High 4 bit
bit4buf = (buf>>4);
LCD_DATA |= (bit4buf<<LCD_DATA_LSHIFT);
LCD_DDR |= (0x0f<<LCD_DATA_LSHIFT);
Send_EN_SIGNAL;
LCD_DATA &= (~(0x0f<<LCD_DATA_LSHIFT)); //Write Low 4 bit
bit4buf = (buf&0x0f);
LCD_DATA |= (bit4buf<<LCD_DATA_LSHIFT);
Send_EN_SIGNAL;
}
void LCD_Clear(void){LCD_WriteChar(0x01,0);}
void LCD_SetXY(uint8_t x,uint8_t y)
{
if(y)
LCD_WriteChar(ADDR_ROW2 + x,0);
else
LCD_WriteChar(ADDR_ROW1 + x,0);
}
void LCD_DispStr(const char *p)
{
while(*p)
LCD_WriteChar(0,(uint8_t)*(p++));
}
void LCD_DispNum(uint32_t num)
{
char buf[11]={0};
char *p = &buf[10];
do{
*(--p) = num%10 + '0';
num /= 10;
}while(num);
LCD_DispStr(p);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -