单片机
返回首页

51单片机-液晶屏代码单独文件

2021-08-27 来源:eefocus

同样我们创建好“lcd.c”和“lcd.h”,然后添加进工程文件中。“lcd.c”的代码集合了所有宋老师为我们写好的各种常用函数。


1.lcd.c的代码


#include

#include

 

/* 等待液晶准备好 */

void LcdWaitReady()

{

    unsigned char sta;

   

    LCD1602_DB = 0xFF;

    LCD1602_RS = 0;

    LCD1602_RW = 1;

    do {

          LCD1602_E = 1;

          sta = LCD1602_DB;//读取状态字

          LCD1602_E = 0;

    } while (sta & 0x80);  //bit7等于1表示液晶正忙,重复检测直到其等于0为止

}

 

/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */

void LcdWriteCmd(unsigned char cmd)

{

    LcdWaitReady();

    LCD1602_RS = 0;

    LCD1602_RW = 0;

    LCD1602_DB = cmd;

    LCD1602_E  = 1;

    LCD1602_E  = 0;

}

 

/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */

void LcdWriteDat(unsigned char dat)

{

    LcdWaitReady();

    LCD1602_RS = 1;

    LCD1602_RW = 0;

    LCD1602_DB = dat;

    LCD1602_E  = 1;

    LCD1602_E  = 0;

}

 

/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */

void LcdSetCursor(unsigned char x, unsigned char y)

{

    unsigned char addr;

     

    if (y == 0)              //由输入的屏幕坐标计算显示RAM的地址

        addr = 0x00 + x;     //第一行字符地址从0x00起始

    else

        addr = 0x40 + x;     //第二行字符地址从0x40起始

    LcdWriteCmd(addr | 0x80);//设置RAM地址

}

 

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)

{

    LcdSetCursor(x, y);     //设置起始地址

    while (*str != '')    //连续写入字符串数据,直到检测到结束符

    {

        LcdWriteDat(*str++);//先取str指向的数据,然后str自加1

    }

}

 

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针,len-需显示的字符长度 */

void LcdShowStr_len(unsigned char x, unsigned char y, unsigned char *str, unsigned char len)

{

    LcdSetCursor(x, y);     //设置起始地址

    while (len--)           //连续写入len个字符数据

    {

        LcdWriteDat(*str++);//先取str指向的数据,然后str自加1

    }

}

 

/* 区域清除,清除从(x,y)坐标起始的len个字符位 */

void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len)

{

    LcdSetCursor(x, y);   //设置起始地址

    while (len--)         //连续写入空格

    {

        LcdWriteDat(' ');

    }

}

 

/* 整屏清除 */

void LcdFullClear()

{

    LcdWriteCmd(0x01);

}    

 

/* 初始化1602液晶 */

void InitLcd1602()

{

    LcdWriteCmd(0x38);  //16*2显示,5*7点阵,8位数据接口

    LcdWriteCmd(0x0C);  //显示器开,光标关闭

    LcdWriteCmd(0x06);  //文字不动,地址自动+1

    LcdWriteCmd(0x01);  //清屏

}


2.lcd.h的代码


#ifndef __LCD_H__

#define __LCD_H__

  

#define LCD1602_DB  P0

sbit LCD1602_RS = P1^0;

sbit LCD1602_RW = P1^1;

sbit LCD1602_E  = P1^5;

void LcdWaitReady();//等待液晶准备好

void LcdWriteCmd(unsigned char cmd);//向LCD1602液晶写入一字节命令,cmd-待写入命令值

void LcdWriteDat(unsigned char dat);//向LCD1602液晶写入一字节数据,dat-待写入数据值

void LcdSetCursor(unsigned char x, unsigned char y);//设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);//在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针

void LcdShowStr_len(unsigned char x, unsigned char y, unsigned char *str, unsigned char len);//在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针,len-需显示的字符长度

void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len);//区域清除,清除从(x,y)坐标起始的len个字符位

void LcdFullClear();//整屏清除

void InitLcd1602(); //初始化1602液晶

  

#endif


3.main.c的代码


#include  

#include //详见第六章第8讲

#include

 

void main()

{  

    unsigned char str[] = 'Kingst Studio';

   

    InitLcd1602();//初始化液晶屏

    LcdShowStr(2, 0, str);//在第一行第3格开始显示数组里的字符串

    LcdShowStr(0, 1, 'Welcome to KST51');//在第二行第1格显示'Welcome to KST51'这段字符串

    while (1);

}


再次提醒要添加进工程文件,不添加的话编译不会报错,但是下载进去无法执行相应的代码,也就不能正常显示内容。

11.3.png

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章