目录
一、认识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
四、 仿真图:
五、总结:
-
初始化LCD1602液晶显示屏:在使用LCD1602之前,需要对其进行初始化。初始化包括设置显示模式、清屏等操作。
-
显示字符:通过向LCD1602发送指令和数据,我们可以在液晶显示屏上显示字符。可以显示的字符包括数字、字母、符号等。
-
移动光标:LCD1602液晶显示屏上有一个光标,我们可以通过控制信号线和指令来移动光标的位置。
-
控制显示区域:LCD1602液晶显示屏可以分为两行,每行可以显示16个字符。我们可以通过指令来控制显示的区域。
-
在实验中,我们可以结合以上功能,进行一些简单的实际应用。比如显示温度、湿度等传感器数据,显示实时时间等。
总的来说,通过实验我们学习了如何使用51单片机控制LCD1602液晶显示屏,实现了一些基本的显示功能。这对于嵌入式系统的开发和应用有着重要的意义