📄 lcd_51.c
字号:
#define _LCD_51_C_
#include "LCD_51.h"
//==========================================
//函数名称:液晶模块使能
//函数作用: 使能液晶
//入口参数: 无
//返回类型:无
//==========================================
void LCD_en_write(void) reentrant
{
EN_SET;
delay_nus(4);
EN_CLR;
}
//==========================================
//函数名称:写指令
//函数作用:
//入口参数: 液晶指令command
//返回类型:无
//==========================================
void LCD_write_command(uchar command) reentrant
{
delay_nus( 16 );
RS_CLR;
DB &= 0X0F; //清高四位
DB |= command & 0xf0; //写高四位
LCD_en_write();
command=command << 4; //低四位移到高四位
DB &= 0x0f; //清高四位
DB |= command & 0xf0; //写低四位
LCD_en_write();
//delay_nms(2); //清屏指令时间很长, 保险起见,可以增加
}
//==========================================
//函数名称:写数据
//函数作用:
//入口参数: 数据DATA
//返回类型:无
//==========================================
void LCD_write_data(uchar DATA) reentrant
{
delay_nus(16);
RS_SET; //RS=1
DB &= 0X0f; //清高四位
DB |= DATA&0xf0; //写高四位
LCD_en_write();
DATA = DATA << 4; //低四位移到高四位
DB &= 0X0f; //清高四位
DB |= DATA&0xf0; //写低四位
LCD_en_write();
}
//==========================================
//函数名称:液晶初始化函数
//函数作用:
//入口参数: 无
//返回类型:无
//==========================================
void LCD_init( void )reentrant
{
LCD_write_command(0x28);
LCD_en_write(); //********总结这里一定要加这液晶使能*********
delay_nus(20);
LCD_write_command(0x28); //4位显示
LCD_write_command(0x0c); //显示开
LCD_write_command(0x01); //清屏
delay_nms(5); //延时一定要长
}
//==========================================
//函数名称:写地址
//函数作用:
//入口参数: 行位置r, 列位置c
//返回类型:无
//==========================================
void LCD_set_rc( uchar r, uchar c )reentrant
{
uchar address;
if (r == 1)
address = 0x80 + c;
else if(r == 2)
address = 0xc0 + c;
LCD_write_command( address );
}
//==========================================
//函数名称:写字符串
//函数作用: 在指定位置写一串字符串
//入口参数: 行位置r, 列位置c, 字符串*s
//返回类型:无
//==========================================
void LCD_write_string(uchar r, uchar c, uchar *s)reentrant
{
LCD_set_rc( r, c ); //写地址
while( *s ) // 写显示字符
{
LCD_write_data( *s );
s++;
}
}
void LCD_write_char(uchar r, uchar c, uchar DATA)reentrant //写字符
{
LCD_set_rc( r, c );
LCD_write_data( DATA );
}
//==========================================
//函数名称:写字符数组
//函数作用: 在指定位置写一串字符串
//入口参数: 行位置r, 列位置c, 字符数组chardata[], 字符个数
//返回类型:无
//==========================================
void LCD_write_array( uchar r, uchar c, uchar array[] )reentrant
{
uchar i = 0;
while( array[i] != '\0' )
{
LCD_write_char( r, c, array[i] );
if( ++c == 16 )
{
if( r == 1 )
{
c = 0;
r = 2;
LCD_write_char( r, c, array[i] );
}
else if( r == 2 )
{
c = 0;
r = 1;
LCD_write_char( r, c, array[i] );
}
}
i++;
}
}
//==========================================
//函数名称:显示一个整型数据
//函数作用: 在指定位置显示整数
//入口参数: 行位置r, 列位置c, 字符数组dataint[]
//返回类型:无
//==========================================
void LCD_write_datalongint( uchar r, uchar c, long int dataint )reentrant
{
uchar datachar1[8];
uchar datachar2[8];
uchar n = 0;
uchar i =0;
uchar k =0; //取字符个数
uchar kk = 0; //取字符个数
long int datainttmp = dataint;
while( datainttmp != 0 )
{
datachar1[n++] = ( datainttmp % 10 ) + 0x30; //转换为字符
datainttmp /= 10;
}
if( dataint != 0 ) //*/*//*/
{
k = n - 1;
kk = n;
for( i = 0; i < kk; i++, k-- )
{
datachar2[k] = datachar1[i]; //将数字符串倒过来
}
LCD_set_rc( r, c );
for( i = 0; i < kk; i++ )
{
LCD_write_char( r, c++, datachar2[i] );
}
}
else
LCD_write_char( r, c, '0' );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -