📄 lcd_show.c
字号:
/******************************************/
#include <reg51.h>
#include <string.h>
sbit lcm_rs = P1^2; //寄存器选择
sbit lcm_rw = P1^3; //读/写控制
sbit lcm_e = P1^4; //读/写使能
sbit lcm_blk = P2^4; //背光led 1.off 0.on
#define lcm_data P0
//函数声明
void delay5ms(void);
void delay400ms(void);
void lcm_write_command(unsigned char wc_lcm,busy_c);
/***********************************
//函数名称: void lcm_ini(void)
//传递参数: 无
//返 回 值: 无
//函数功能: LCM初始化
//函数说明:
***********************************/
void lcm_ini(void)
{
lcm_data = 0;
lcm_write_command(0x38,0); //16*2显示,5*7点阵,8位数据接口,不检测忙
delay5ms();
lcm_write_command(0x38,0);
delay5ms();
lcm_write_command(0x38,0); //三次显示模式, 不检测忙
delay5ms();
lcm_write_command(0x38,1); //16*2显示,5*7点阵,8位数据接口,需要检测忙
lcm_write_command(0x80,1); //关闭显示
lcm_write_command(0x01,1); //clear显示
lcm_write_command(0x06,1); //指针和光标+1,不滚屏
lcm_write_command(0x0c,1); //开显示,不显示光标
}
/***********************************
//函数名称: unsigned char lcm_read_status(void)
//传递参数: 无
//返 回 值: unsigned char
//函数功能: 读lcm状态,等待lcm空闲
//函数说明: DB7=1,忙
***********************************/
unsigned char lcm_read_status(void)
{
lcm_data=0xff;
lcm_rs=0;
lcm_rw=1;
lcm_e=0;
lcm_e=0;
lcm_e=1;
while(lcm_data & 0x80);
return lcm_data;
}
/***********************************
//函数名称: void lcm_write_data(unsigned char wd_lcm)
//传递参数: unsigned char wd_lcm
//返 回 值: 无
//函数功能: lcm写数据
//函数说明:
***********************************/
void lcm_write_data(unsigned char wd_lcm)
{
lcm_read_status(); //判断lcm忙标志
lcm_data = wd_lcm;
lcm_rs = 1;
lcm_rw = 0;
lcm_e = 0;
lcm_e = 0;
lcm_e = 1;
}
/***********************************
//函数名称: void lcm_write_command(unsigned char wc_lcm, busy_c)
//传递参数: unsigned char wc_lcm, busy_c
//返 回 值: 无
//函数功能: lcm写命令
//函数说明: busy_c=0是,不用检测忙信号
***********************************/
void lcm_write_command(unsigned char wc_lcm, busy_c)
{
if (busy_c)
lcm_read_status();
lcm_data = wc_lcm;
lcm_rs=0;
lcm_rw = 0;
lcm_e = 0;
lcm_e = 0;
lcm_e = 1;
}
/***********************************
//函数名称: void disp_one_char(unsigned char x, unsigned char y,unsigned char disp_data)
//传递参数: unsigned char x, unsigned char y,unsigned char disp_data
//返 回 值: 无
//函数功能: 指定位置显示一个字符
//函数说明:
***********************************/
void disp_one_char(unsigned char x,unsigned char y,unsigned disp_data)
{
y = y&0x01;
x = x&0x0f; //限制2行,没行15个字
if (y)
x =x + 0x40; //算RAM地址
x = x + 0x80;
lcm_write_command(x,0);
lcm_write_data(disp_data);
}
/***********************************
//函数名称: void disp_one_char(unsigned char x, unsigned char y,unsigned char *disp_data)
//传递参数: unsigned char x, unsigned char y,unsigned char *disp_data
//返 回 值: 无
//函数功能: 指定位置显示一串字符
//函数说明:
***********************************/
void disp_list_char(unsigned char x,unsigned char y,unsigned char *disp_data)
{
unsigned char char_length,j;
lcm_write_command(0x01,1); //clear显示
char_length = strlen(disp_data);
y = y&0x1;
x = x&0x0f;
for (j=0;j<char_length;j++)
{
disp_one_char( x,y,disp_data[j]); //显示一个字符
x++;
}
}
/***********************************
//函数名称: void delay5ms(void)
//传递参数: 无
//返 回 值: 无
//函数功能: 延时5MS
//函数说明:
***********************************/
void delay5ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
/***********************************
//函数名称: void delay400ms(void)
//传递参数: 无
//返 回 值: 无
//函数功能: L延时400MS
//函数说明: LCM开机延时
***********************************/
void delay400ms(void)
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
/*****d******************************
//函数名称: void main(void)
//传递参数: 无
//返 回 值: 无
//函数功能: 主函数
//函数说明:
************************************/
void lcd_disp(void)
{// unsigned char i;
delay400ms();
lcm_ini();// for(i=0;i<9;i++)
//{disp_list_char(0,0,&tab[i]);
delay400ms();
delay400ms();
delay400ms();
delay400ms();
disp_list_char(0,0,"BY QIANSHAOFENG");
// while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -