📄 lcd4bit.c
字号:
/********************************************************************/
/* Biblioteka LCD dla 4-biotwego interfejsu */
/*------------------------------------------------------------------*/
/* Description : Biblioteka obslugi wyswietlacza LCD */
/* podlaczonego do portu poprzez 4 linie danych */
/* Wyswietlacz podlaczony do portu P0 i P2 */
/* LCD uP */
/* DB4 = P0.0 */
/* DB5 = P0.1 */
/* DB6 = P0.2 */
/* DB7 = P0.3 */
/* RS = P0.5 */
/* RW = P0.6 */
/* E = P2.7 */
/*------------------------------------------------------------------*/
/* Author : Michal Grzybek */
/*------------------------------------------------------------------*/
/* History : 24/03/2009 Keil uVision3 */
/* */
/********************************************************************/
#include <regx52.h>
#include <lcd.h>
#define DATA_LCD P0 //dane sa wystawiane na port P0
#define RS_LCD P0_5 //linia RS
#define RW_LCD P0_6 //linia RW
#define E_LCD P2_7 //linia Enable
/*********************************************************************/
/* Zmienne globalne: obsluga pozycjonowania kursora */
/*********************************************************************/
static unsigned char code row1[16] = {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F};
static unsigned char code row2[16] = {0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF};
/*********************************************************************/
/* Zmienne globalne: obsluga polskich liter */
/*********************************************************************
static const BYTE code fonttab[] = {
0,14,1,15,17,15,2,0, //a
0,14,17,31,16,14,2,0, //e
0,2,4,14,16,16,17,14, //c
2,4,14,16,14,1,30,0, //s
2,4,31,2,4,8,31,0, //z,z
12,4,6,4,12,4,14,0, //l
2,4,22,25,17,17,17,0, //n
2,4,14,17,17,17,14,32};
*/
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : funkcja sprawdza zajetosc flagi */
/*********************************************************************/
BYTE check_busy(void)
{
BYTE bf;
DATA_LCD |= 0x0f; //dane znajduja sie na mlodszej czworce portu
RS_LCD = 0;
RW_LCD = 1;
E_LCD = 1;
bf = DATA_LCD & 0x08;
E_LCD = 0;
E_LCD = 1;
E_LCD = 0;
return (bf);
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : funkcja zapisuje 4-bity do wyswietlacza LCD */
/*********************************************************************/
void write_nibble (BYTE nibble)
{
E_LCD = 0;
DATA_LCD &= 0xf0;
RW_LCD = 0;
nibble &= 0x0f;
DATA_LCD |= nibble;
E_LCD = 1;
E_LCD = 0;
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : funkcja odczytuje 4-bity z wyswietlacza LCD */
/*********************************************************************/
BYTE read_nibble (void)
{
BYTE nibble;
E_LCD = 0;
RW_LCD = 1;
E_LCD = 1;
nibble = DATA_LCD & 0x0f;
E_LCD = 0;
return (nibble);
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : zapis slowa sterujacego Control do wysw. LCD */
/*********************************************************************/
void LCD_ctrlWR ( BYTE cmde)
{
while (check_busy());
RS_LCD = 0;
write_nibble (cmde >> 4);
write_nibble (cmde);
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : zapis danych Data do wyswietlacza LCD */
/*********************************************************************/
void LCD_dataWR (BYTE byte)
{
while (check_busy());
RS_LCD = 1;
write_nibble (byte >> 4);
write_nibble (byte);
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : odczyt danych Data z wyswietlacza LCD */
/*********************************************************************/
BYTE LCD_dataRD (void)
{
BYTE byte;
while (check_busy());
RS_LCD = 1;
byte = read_nibble() <<4;
byte = byte | read_nibble();
return (byte);
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : funkcja inicjalizujaca wyswietlacz LCD */
/*********************************************************************/
void LCD_init (void)
{
// char i;
LCD_ctrlWR (INITDISP);
LCD_ctrlWR (CLEAR);
LCD_ctrlWR (LCDON);
/*LCD_ctrlWR(0x40); //wybierz CG RAM
for (i=0; i<sizeof fonttab; i++)
{
LCD_dataWR(fonttab[i]);
}
LCD_ctrlWR(0x80); */
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : funkcja wypisuje ciag znakow az do napotkania 0x00 */
/*********************************************************************/
void LCD_print (char *s)
{
while (*s)
LCD_dataWR (*s++);
}
/*********************************************************************/
/* Definicje funkcji */
/*-------------------------------------------------------------------*/
/* Description : zapis polskich znakow do pamieci CG RAM wyswietl. */
/*********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -