📄 lcd.c
字号:
#include "lcd.h"
#include <delay.h>
#include <string.h>
//函数void LcdWriteData(unsigned char data)用于向LCD写入一个数据
void LcdWriteData(unsigned char data)
{
AVRSetLcdDataPortWriteMode;
LCD1602SetWriteMode;
LCD1602SetDataMode;
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
LCD1602WriteDataPort = data;
LCD1602SetEnable;
#asm("nop")
#asm("nop")
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
}
//函数void LcdWriteInstruction(unsigned char data)用于向LCD写入一个指令
void LcdWriteInstruction(unsigned char data)
{
AVRSetLcdDataPortWriteMode;
LCD1602SetWriteMode;
LCD1602SetInstructionMode;
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
LCD1602WriteDataPort = data;
LCD1602SetEnable;
#asm("nop")
#asm("nop")
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
}
//函数unsigned char LcdReadInstruction(void)用于从液晶读取指令
unsigned char LcdReadInstruction(void)
{
unsigned char data;
AVRSetLcdDataPortReadMode;
LCD1602SetReadMode;
LCD1602SetInstructionMode;
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
LCD1602SetEnable;
#asm("nop")
#asm("nop")
data = LCD1602ReadDataPort;
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
return data;
}
//函数unsigned char LcdReadData(void)用于从液晶读取一个字节的数据
unsigned char LcdReadData(void)
{
unsigned char data;
AVRSetLcdDataPortReadMode;
LCD1602SetReadMode;
LCD1602SetDataMode;
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
LCD1602SetEnable;
#asm("nop")
#asm("nop")
data = LCD1602ReadDataPort;
LCD1602ClrEnable;
#asm("nop")
#asm("nop")
return data;
}
//函数void LcdCheckBusy(void)用于跳过液晶的忙状态
void LcdCheckBusy(void)
{
while (0x80 == (LcdReadInstruction() & 0x80))
{
}
}
//函数void LcdClear(void)用于液晶清屏
void LcdClear(void)
{
LcdCheckBusy();
LcdWriteInstruction(0x01);
}
//函数void LcdInit(void)用于初始化液晶
void LcdInit(void)
{
AVRInitLcdControlPort;
delay_ms(15);
LcdWriteInstruction(0x38); //LCD内部要求,初始化的时候连续三次设置显示模式
delay_ms(5);
LcdWriteInstruction(0x38);
delay_ms(5);
LcdWriteInstruction(0x38);
LcdCheckBusy();
LcdWriteInstruction(0x38); //8位数据接口
LcdCheckBusy();
LcdWriteInstruction(0x08); //关显示
LcdCheckBusy();
LcdWriteInstruction(0x01); //清屏
LcdCheckBusy();
LcdWriteInstruction(0x06); //读或者写一个字符后地址指针加1
LcdCheckBusy();
LcdWriteInstruction(0x0C); //开显示,不显示光标
}
//函数void LcdSetXY(unsigned char x, unsigned char y)用于指定液晶数据写入的地址
void LcdSetXY(unsigned char x, unsigned char y)
{
unsigned char addr;
addr = 0x80 + x * 0x40 + y; //计算地址
LcdCheckBusy();
LcdWriteInstruction(addr);
}
//函数void LcdPutOneChar(unsigned char c)用于向液晶输入一个显示数据
void LcdPutOneChar(unsigned char c)
{
LcdCheckBusy();
LcdWriteData(c);
}
//函数void LcdPutFlashString(unsigned char flash *str)用于向液晶输入位于Flash中的一个字符串
void LcdPutFlashString(unsigned char flash *str)
{
unsigned char i;
i = 0;
while (str[i] != '\0')
{
LcdCheckBusy();
LcdWriteData(str[i]);
i++;
}
}
//函数void LcdPutRamString(unsigned char *str)用于向液晶输入位于Ram中的一个字符串
void LcdPutRamString(unsigned char *str)
{
unsigned char i;
i = 0;
while (str[i] != '\0')
{
LcdCheckBusy();
LcdWriteData(str[i]);
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -