<精学社>LCD1602移屏操作

 本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!

> 发布人:@日月同辉,与我共生_单片机-CSDN博客

> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注👍+收藏🌹+评论☺。

系列专栏: CSDN-单片机串口通信学习系列🎁

> 我的格言是:“尽最大努力,做最好的自己!💪

要转载,请提前告知!!!

版权声明:本文为CSDN博主「日月同辉,与我共生」的原创文章,CSDN独一份。

LCD1602是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符。它属于点阵型液晶显示屏,总共有2行16列,也就是可以同时显示32个字符。每个字符都是由5*7的液晶矩阵显示,总共有1120颗点阵组成。它有16个引脚(带背光),通过控制这些引脚可以实现LCD1602在任何位置显示任何字符。LCD1602内置了CGRAM和CGROM字模库,里面包含了ASCII码表的所有字符和一些特殊字符的字模数据。字模数据就是在5*7的点阵里点亮哪几个点可以显示其相应的字符,再由引脚控制输出在哪个位置上,即可完成显示丰富多样的内容的任务。LCD1602(Liquid Crystal Display)液晶显示屏在各种电子设备中得到广泛应用。

一、移屏操作

LCD1602的移屏操作在生活中的应用并不直接,因为这是一种基于电子设备的操作。它主要被用于一些智能设备或电子设备的显示屏幕上,比如小型仪器、仪表、小型闹钟等。在这些设备中,通过LCD1602的移屏操作,可以实现对设备界面的操作和信息的显示。

然而,我们也可以间接地感受到LCD1602移屏操作在生活中的重要性。例如,在一些智能家居系统中,我们可以通过移动屏幕来查看和控制不同设备的状态,如灯光、空调、电视等。在这些情况下,LCD1602的移屏操作就成为了实现这些功能的关键之一。

此外,在一些需要显示动态信息的场合,比如商场的展示屏幕、广告牌等,LCD1602的移屏操作也可以被用于实现更加丰富和动态的展示效果,提高观众的观看体验。

总的来说,LCD1602的移屏操作虽然可能不直接影响到我们的日常生活,但是在一些智能设备和电子设备中,它却是实现各种功能和操作的重要手段之一。

二、先设置模式后写数据

2.1涉及命令1

//显示模式控制
#define LCD_AC_ADD_MOVE     0x07 //数据读写操作后,AC自动加1,画面平移
#define LCD_AC_ADD                  0x06 //数据读写操作后,AC自动加1,画面不平移
#define LCD_AC_RED_MOVE     0x05 //数据读写操作后,AC自动减1,画面平移
#define LCD_AC_RED                  0x04 //数据读写操作后,AC自动减1,画面不平移

2.2思路1

先根据命令设置命令,接着选择字符显示的位置,最后写数据。

strlen(str2):用于计算出数组str2的长度。

2.3代码1

		unsigned char i;
		LCDWriteCmd(LCD_AC_ADD_MOVE);
		LCDSetPosition(10,0);
		for(i=0;i<strlen(str2);i++)
		{
			LCDWritedata(str2[i]);
			delay(3000);
		}

三、先写数据后设置光标画面控制

3.1涉及命令2

//光标移动指令
#define SUR_LEFT                       0x10   //光标左移,画面显示不移动
#define SUR_RIGHT                    0x14   //光标右移,画面显示不移动
#define LCD_DIS_FRA_LEFT     0x18   //光标不移动,画面显示左移,操作后AC自增
#define LCD_DIS_FRA_RIGHT   0x1C //光标不移动,画面显示右移,操作后AC自减

3.2思路2

先选择字符显示的位置,接着写数据,最后选择光标移动的方式。

strlen(str):用于计算出数组str的长度。

3.3代码2

        unsigned char i;
		LCDSetPosition(1,1);
		for(i=0;i<strlen(str);i++)
		{
		  LCDWritedata(str[i]);
	    }
		LCDWriteCmd(LCD_DIS_FRA_RIGHT);
		delay(100);

四、LCD1602模块代码

4.1初始化

void LCDInit()
{
	LCDWriteCmd(EDI8_DISTWO_57);//8位数据接口,2行显示,5*7点阵
	LCDWriteCmd(LCD_BIS);//显示开,光标关,不闪烁
	LCDWriteCmd(SUR_RIGHT);//光标右移,画面显示不移动
}

4.2读忙命令

void LCDReadBF() //读忙检测(读命令)
{
	unsigned char i;
	unsigned char state;
	LCD1602_DB=0XFF;
	LCD1602_RS=0;
	LCD1602_RW=1;
	do
	{
	  LCD1602_E=1;
	  state=LCD1602_DB;
	  LCD1602_E=0;
		i++;
		if(i>200)
			break;
	}
	while(state&0x80); //判断忙不忙
}

4.3写命令/数据

void LCDWriteCmd(unsigned char cmd) //写命令
{
	LCDReadBF();
	LCD1602_RS=0;
	LCD1602_RW=0;
	LCD1602_DB=cmd;
	LCD1602_E=1;
	LCD1602_E=0;
}

void LCDWritedata(unsigned char dat) //写数据
{
	LCDReadBF();
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_DB=dat;
	LCD1602_E=1;
	LCD1602_E=0;
}

4.4位置函数

void LCDSetPosition(unsigned char x,unsigned char y) //位置函数  y:行  0-1
{                                                    //          x:列  0-7
	if(y==0)
	{
		LCDWriteCmd(0x80|x);
	}
	else
	{
		LCDWriteCmd(0x80|(x+0x40));
	}
}

void LCDShowStr(unsigned char x,unsigned char y,unsigned char *str)
{
	LCDSetPosition(x,y);
	while(*str!='\0')
	{
	  LCDWritedata(*str++);
	}
}

4.5delay.c

#include "delay.h"
/******************************************************************************************
函数名:delay
功能:延时函数
参数:unsigned char xms
返回值:无
******************************************************************************************/
void delay(unsigned char xms)
{
	unsigned char i,j;
	for(i=xms;i>0;i--)
	  for(j=124;j>0;j--);
}

下一文将着重LCD1602整数及小数编程,亲爱的读者敬请期待,下一文更精彩!!!

一日不读书,胸臆无佳想。我叫不白吃,喜欢我的,可以支持我,博主名叫@日月同辉,与我共生

@日月同辉,与我共生_单片机基础,单片机串口通信-CSDN博客@日月同辉,与我共生擅长单片机基础,单片机串口通信,等方面的知识,@日月同辉,与我共生关注stm32,c语言,51单片机,proteus,单片机领域.https://blog.csdn.net/LIN___IT?spm=1000.2115.3001.5343

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生管理系统是一种常见的管理系统,可以用C语言来实现。下面是一个简单的学生管理系统的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 struct student { char name[20]; int age; int score; }; struct student students[MAX_STUDENT_NUM]; int student_num = 0; void add_student() { if (student_num >= MAX_STUDENT_NUM) { printf("The number of students has reached the upper limit.\n"); return; } struct student s; printf("Please enter the name of the student:\n"); scanf("%s", s.name); printf("Please enter the age of the student:\n"); scanf("%d", &s.age); printf("Please enter the score of the student:\n"); scanf("%d", &s.score); students[student_num++] = s; printf("Add student successfully.\n"); } void delete_student() { if (student_num <= 0) { printf("There is no student to delete.\n"); return; } char name[20]; printf("Please enter the name of the student you want to delete:\n"); scanf("%s", name); int i; for (i = 0; i < student_num; i++) { if (strcmp(students[i].name, name) == 0) { break; } } if (i == student_num) { printf("The student does not exist.\n"); return; } for (; i < student_num - 1; i++) { students[i] = students[i + 1]; } student_num--; printf("Delete student successfully.\n"); } void modify_student() { if (student_num <= 0) { printf("There is no student to modify.\n"); return; } char name[20]; printf("Please enter the name of the student you want to modify:\n"); scanf("%s", name); int i; for (i = 0; i < student_num; i++) { if (strcmp(students[i].name, name) == 0) { break; } } if (i == student_num) { printf("The student does not exist.\n"); return; } printf("Please enter the new age of the student:\n"); scanf("%d", &students[i].age); printf("Please enter the new score of the student:\n"); scanf("%d", &students[i].score); printf("Modify student successfully.\n"); } void query_student() { if (student_num <= 0) { printf("There is no student to query.\n"); return; } char name[20]; printf("Please enter the name of the student you want to query:\n"); scanf("%s", name); int i; for (i = 0; i < student_num; i++) { if (strcmp(students[i].name, name) == 0) { printf("Name: %s, Age: %d, Score: %d\n", students[i].name, students[i].age, students[i].score); break; } } if (i == student_num) { printf("

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值