📄 lcd_driver.c
字号:
#include"lcd_driver.h"
/*******************************写指令***********************************/
void WriteCommandLCD( uint8_t ucCmd, bool bFgBusy )
{
uint16_t i;
LCD_SET_RS_CMD; //命令
LCD_DATA = ucCmd; //要写的命令 ,读—修改—写
for(i=0; i<3; i++); //小延时,写操作时序
LCD_ENABLE; //使能开
for(i=0; i<50; i++); //延时约45us,写入命令时间
LCD_DISABLE; // 命令写入完毕,使能关
if ( bFgBusy ){
for(i=0; i<1600; i++); //延时约1.52ms,代替忙检测
bFgBusy = 0;
}
}
/****************************写数据 **********************************/
void WriteDataLCD(uint8_t ucData)
{
uint16_t i;
for(i=0; i<600; i++); //延时,代替忙检测
LCD_SET_RS_DATA; //数据
LCD_DATA = ucData; //要写的数据
for(i=0; i<3; i++); //小延时,写操作时序
LCD_ENABLE;
for(i=0; i<50; i++); //延时约45us,写入数据时间
LCD_DISABLE; //写入完毕,使能关
}
/***************设置显示位置**************************/
void SetXY( uint8_t X, bool Y )
{
uint8_t ucAddress;
if ( true ){
ucAddress = B1100_0000 | X; //第二行
}else{
ucAddress = B1000_0000 | X; //第一行
}
WriteCommandLCD( ucAddress, false );
}
void WriteCGRAM( uint8_t ucCGRAM_Add, const uint8_t *pStr, uint8_t ucBytes ) //写字符发生器RAM
{
uint8_t n;
uint8_t ucAddress;
ucAddress = B0100_0000 | ( ucCGRAM_Add << 3 );
WriteCommandLCD( ucAddress, 0 );
n = ucBytes << 3;
while( n-- ){ //当执行CGRAM/DDRAM数据读写的时候,RAM地址计数器将
WriteDataLCD( *pStr++ ); //自动加1或自动减1
// pStr++;
}
}
/********************按指定位置显示一个字符**********************/
void DisOneChar(uint8_t X, uint8_t Y, uint8_t ucData)
{
SetXY( X, Y );
WriteDataLCD( ucData );
}
/*********按指定位置显示指定长度(strl)的一串字符***********/
void DisListChar(uint8_t X, uint8_t Y, const uint8_t *pStr, uint8_t ucStrLen)
{
SetXY( X, Y );
while( ucStrLen-- ){
WriteDataLCD( *pStr++ ); //当执行CGRAM/DDRAM数据读写的时候,RAM地址计数器将
// pStr++; //自动加1或自动减1
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -