【51单片机】LCD1602液晶显示实验

目录

         一、认识51单片机:

      1、单片机概念:

      2、51单片机功能图解:

二、认识单片机LCD液晶显示屏:

      1、LCD概念:

      2、LCD图解: 

        三、整体代码为:

      1、分模块:

      2、main.c

      3、LCD1602.c

      4、LCD1602.h

      5、public.c

      6、public.h

四、 仿真图:


一、认识51单片机:

1、单片机概念:

   单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

 2、51单片机功能图解:

 

二、认识单片机LCD液晶显示屏:

1、LCD概念:

       要在1602上显示字符,要大概明白1602液晶显示屏工作原理。
       一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。
       1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。1602LCD是指显示的内容16×2,即最多只能显示32个字符。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。5X7点阵可以看做5行7列等间距分布的led灯,每一个灯相当于一个像素点,你要表达的字母或者数字都是由这些像素点组成的。只需控制灯的亮灭就可以了。一般1602一共有16位引脚。

2、LCD图解: 

三、整体代码为:

1、分模块:

2、main.c

#include "public.h"
#include "lcd1602.h"



void main()
{	
	lcd1602_init();
	lcd1602_show_string(0,0,"Hello World!");
	lcd1602_show_string(0,1,"0123456789");
	while(1)
	{
		
	}	
}

 在主函数里面想显示什么内容可以根据自己意愿填入。

 3、LCD1602.c

#include "lcd1602.h"
#if (LCD1602_4OR8_DATA_INTERFACE==0)
void lcd1602_write_cmd(u8 cmd)
{
	LCD1602_RS=0;
	LCD1602_RW=0;
	LCD1602_E=0;
	LCD1602_DATAPORT=cmd;
	delay_ms(1);
	LCD1602_E=1;
	delay_ms(1);
	LCD1602_E=0;	
}
#else	
void lcd1602_write_cmd(u8 cmd)
{
	LCD1602_RS=0;
	LCD1602_RW=0;
	LCD1602_E=0;
	LCD1602_DATAPORT=cmd;
	delay_ms(1);
	LCD1602_E=1;
	delay_ms(1);
	LCD1602_E=0;
	
	LCD1602_DATAPORT=cmd<<4;
	delay_ms(1);
	LCD1602_E=1;
	delay_ms(1);
	LCD1602_E=0;	
}
#endif


#if (LCD1602_4OR8_DATA_INTERFACE==0)
void lcd1602_write_data(u8 dat) 
{
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_E=0;
	LCD1602_DATAPORT=dat;
	delay_ms(1);
	LCD1602_E=1;
	delay_ms(1);
	LCD1602_E=0;	
}
#else
void lcd1602_write_data(u8 dat) 
{
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_E=0;
	LCD1602_DATAPORT=dat;
	delay_ms(1);
	LCD1602_E=1;
	delay_ms(1);
	LCD1602_E=0;
	
	LCD1602_DATAPORT=dat<<4;
	delay_ms(1);
	LCD1602_E=1;
	delay_ms(1);
	LCD1602_E=0;		
}
#endif


#if (LCD1602_4OR8_DATA_INTERFACE==0)
void lcd1602_init(void)
{
	lcd1602_write_cmd(0x38);
	lcd1602_write_cmd(0x0c);
	lcd1602_write_cmd(0x06);
	lcd1602_write_cmd(0x01);	
}
#else
void lcd1602_init(void)
{
	lcd1602_write_cmd(0x28);
	lcd1602_write_cmd(0x0c);
	lcd1602_write_cmd(0x06);
	lcd1602_write_cmd(0x01);
}
#endif


void lcd1602_clear(void)
{
	lcd1602_write_cmd(0x01);	
}


void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
	u8 i=0;

	if(y>1||x>15)return;

	if(y<1)	
	{	
		while(*str!='\0')
		{
			if(i<16-x)
			{
				lcd1602_write_cmd(0x80+i+x);	
			}
			else
			{
				lcd1602_write_cmd(0x40+0x80+i+x-16);	
			}
			lcd1602_write_data(*str);
			str++;
			i++;	
		}	
	}
	else	
	{
		while(*str!='\0')
		{
			if(i<16-x) 
			{
				lcd1602_write_cmd(0x80+0x40+i+x);	
			}
			else
			{
				lcd1602_write_cmd(0x80+i+x-16);	
			}
			lcd1602_write_data(*str);
			str++;
			i++;	
		}	
	}				
}

4、LCD1602.h

#ifndef _lcd1602_H
#define _lcd1602_H

#include "public.h"


#define LCD1602_4OR8_DATA_INTERFACE	0	


sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^5;
sbit LCD1602_E=P2^7; 
#define LCD1602_DATAPORT P0	



void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);

#endif

5、public.c

#include "public.h"


void delay_10us(u16 ten_us)
{
	while(ten_us--);	
}


void delay_ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);
}

6、public.h

#ifndef _public_H
#define _public_H

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
typedef unsigned long u32;

void delay_10us(u16 ten_us);
void delay_ms(u16 ms);

#endif

四、 仿真图:

五、总结:

  1. 初始化LCD1602液晶显示屏:在使用LCD1602之前,需要对其进行初始化。初始化包括设置显示模式、清屏等操作。

  2. 显示字符:通过向LCD1602发送指令和数据,我们可以在液晶显示屏上显示字符。可以显示的字符包括数字、字母、符号等。

  3. 移动光标:LCD1602液晶显示屏上有一个光标,我们可以通过控制信号线和指令来移动光标的位置。

  4. 控制显示区域:LCD1602液晶显示屏可以分为两行,每行可以显示16个字符。我们可以通过指令来控制显示的区域。

  5. 在实验中,我们可以结合以上功能,进行一些简单的实际应用。比如显示温度、湿度等传感器数据,显示实时时间等。

总的来说,通过实验我们学习了如何使用51单片机控制LCD1602液晶显示屏,实现了一些基本的显示功能。这对于嵌入式系统的开发和应用有着重要的意义

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是51单片机按键控制LCD1602的代码,其中使用了Keil C编译器和STC89C52单片机: ```c #include <reg52.h> // 引入头文件 sbit RS = P2^0; // 定义LCD1602的RS, RW, EN三个引脚 sbit RW = P2^1; sbit EN = P2^2; void delay_ms(unsigned int ms) // 延时函数,单位为毫秒 { unsigned int i, j; for(i=0; i<ms; i++) for(j=0; j<1141; j++); } void lcd_write_command(unsigned char command) // 向LCD1602写入命令 { RS = 0; RW = 0; P0 = command; EN = 1; delay_ms(5); EN = 0; } void lcd_write_data(unsigned char data) // 向LCD1602写入数据 { RS = 1; RW = 0; P0 = data; EN = 1; delay_ms(5); EN = 0; } void lcd_init() // LCD1602初始化函数 { lcd_write_command(0x38); // 设置数据总线为8位,显示2行,5x7点阵字符 lcd_write_command(0x0c); // 显示开启,光标关闭,光标闪烁关闭 lcd_write_command(0x06); // 光标右移,字符串不动 lcd_write_command(0x01); // 清屏 } void main() { unsigned char key; lcd_init(); // LCD1602初始化 while(1) { key = P1; // 读取P1口的按键值 switch(key) { case 0xfe: // 按下第一个按键 lcd_write_command(0x80); // 光标移到第一行第一个字符 lcd_write_data('H'); lcd_write_data('e'); lcd_write_data('l'); lcd_write_data('l'); lcd_write_data('o'); break; case 0xfd: // 按下第二个按键 lcd_write_command(0x80); // 光标移到第一行第一个字符 lcd_write_data('W'); lcd_write_data('o'); lcd_write_data('r'); lcd_write_data('l'); lcd_write_data('d'); break; case 0xfb: // 按下第三个按键 lcd_write_command(0xc0); // 光标移到第二行第一个字符 lcd_write_data('E'); lcd_write_data('m'); lcd_write_data('b'); lcd_write_data('e'); lcd_write_data('d'); break; case 0xf7: // 按下第四个按键 lcd_write_command(0xc0); // 光标移到第二行第一个字符 lcd_write_data('M'); lcd_write_data('a'); lcd_write_data('k'); lcd_write_data('e'); lcd_write_data('r'); break; default: break; } } } ``` 上述代码中,P1口连接了4个按键,分别对应LCD1602上的4个位置。当按下某个按键时,根据其对应的位置,向LCD1602写入相应的字符串。其中,使用了延时函数进行了一定的时间控制。需要注意的是,LCD1602的RS、RW、EN三个引脚需要根据实际连接情况进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值