3.液晶屏代码单独文件

发布日期:2020-12-26 09:09:57 来源:网络转载

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


1.lcd.c的代码

#include <reg52.h>
#include <lcd.h>

/* 等待液晶准备好 */
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 != '\0')    //连续写入字符串数据,直到检测到结束符
    {
        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 <reg52.h> 
#include <function.h>//详见第六章第8讲
#include <lcd.h>

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

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。