历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2021年08月27日 | 51单片机-液晶屏代码单独文件

发布者:三青 来源: eefocus关键字:51单片机  液晶屏 手机看文章 扫描二维码
随时随地手机看文章

同样我们创建好“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

关键字:51单片机  液晶屏 引用地址:51单片机-液晶屏代码单独文件

上一篇:51单片机-指向数组的指针
下一篇:51单片机-各功能代码的运用

推荐阅读

17天过去,马斯克最终宣布,放弃特斯拉私有化。 美东时间8月24日,特斯拉董事长兼CEO埃隆·马斯克(Elon Musk)在公司官网发表公开信,正式宣布放弃特斯拉私有化。这距离8月7日,马斯克发推特,希望通过交易将特斯拉私有化已过去两周多的时间。 在此期间,马斯克一共在官网发布三封公开信,伴随其中的,均是一路不断的利空消息。截至8月24日收盘,特斯...
7.1 初学者重要提示如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 http://forum.armfly.com/forum.php?mod=viewthread&tid=21708 。7.2 使用IAR调试和下载程序设置(JLINK)调试下载STM32H7,务必使用JLINK V9或V...
集微网8月27日消息(文/数码控),百度网盘终于迎来强有力的竞争对手。有媒体报道称,阿里于近日推出了一款名为“阿里云网盘”的独立App。其开发者为阿里旗下的阿里云团队,定位是为C端用户提供可靠安全的存储备份及智能相册等服务的网盘产品。目前,该App采用的是邀请方式注册登录。据官方介绍,阿里云网盘具备空间更大,速度更快;安全可靠的云存储;AI...
  随着生产的发展和自动化要求的提高,为解决在物料储藏和运输过程中可靠、准确进行物位测量的问题,各种物位测量仪表不断涌现,性能也不断提升。其中进行高、低位检测的称之为料位开关,有:音叉式、振动棒式、阻旋式、电容式、浮球式。进行连续料位测量的有:射频电容式、超声波式、雷达式、称重式、压力式,这些方法都有各自的适用范围。一般根据不同...

史海拾趣

问答坊 | AI 解惑

19264顯示屏

這是我自己做得程序用PIC彙編編寫的…

查看全部问答∨

各位高手帮帮我吧。。

刚学单片机,主要实现这样的功能, 给一个下降沿,输出一系列脉冲。在硬件上,这个下降沿由红外传感器给出。 现在存在的问题是,一通电,单片机立刻就输出一个脉冲。 之后在运行时大部分时间是正常的,但是偶尔会出现只给一个下降沿却输出两个脉 ...…

查看全部问答∨

如何用51单片机读取u盘

大家好,现有ch375b,89C52,u盘接口,请问如何通过这些器件读取u盘数据并显示到12864上哪,哪位高手做过,可以指点一下吗,谢谢!!…

查看全部问答∨

What is “Protocol Based“?

What is “Protocol Based“?…

查看全部问答∨

AVR中IO输出频率的问题

在ICC AVR中如何编写一个管脚是对另一个管脚取反,  但取反后输出的端口的频率要比实际端口输出的频率低十几倍请问如何才能使他们同步? …

查看全部问答∨

寻找技术合作伙伴

寻找RFID和嵌入式开发技术合作伙伴,有意者请回复…

查看全部问答∨

求CTL语言在什么环境下运行?

我打算做SOC中IP核的测试的工作,请问CTL语言的解释、执行环境?…

查看全部问答∨

gprs连接成功但是socket连接失败

连接上GPRS后,能打开网页(baidu.com),但是通过socket ,tcp连不上自己的服务器。为啥呢。…

查看全部问答∨

Rectangle 画出的矩形怎么去掉边框

        HDC hdc;         hdc = GetDC (hWnd);                HBRUSH hBr;                  ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved