51单片机实验六:通用型1602液晶操作方法

发布于:2025-04-21 ⋅ 阅读:(71) ⋅ 点赞:(0)

目录

 

一、实验环境与实验器材

二、实验内容及实验步骤

1. 目标:用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!”,在第二行显示WWW.TXMCU.COM。

2.目标:用C语言编程,实现第一行从右侧移入“Hello everyone!”,同时第二行从右侧移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。

3.简易仿真


 

一、实验环境与实验器材

环境:KeliSTC-ISP烧写软件,Proteus.        

器材:TX-1C单片机(STC89C52RC)、电脑。

二、实验内容及实验步骤

1. 目标:用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!”,在第二行显示WWW.TXMCU.COM

代码:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LOVE MCU!";
uchar code table1[]="WWW.TXMCU.COM";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
void write_com(uchar com)
{
  lcdrs=0;
  P0=com;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void write_data(uchar date)
{
  lcdrs=1;
  P0=date;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void init()
{
  dula=0;
  wela=0;
  lcden=0;
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
}
void main()
{
  init();
  write_com(0x80);
  for(num=0;num<11;num++)
  {
    write_data(table[num]);
	delay(5);
  }
  write_com(0x80+0x40);
  for(num=0;num<13;num++)
  {
    write_data(table1[num]);
	delay(5);
  }
  while(1);
}

 图2.1.1 硬件显示效果

图2.1.2 proteus仿真图 

Proteus演示视频:

1602液晶显示1

 

2.目标:用C语言编程,实现第一行从右侧移入“Hello everyone!”,同时第二行从右侧移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。

代码:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="Hello everyone!";
uchar code table1[]="welcome to here!";
sbit lcden=P3^4;//液晶使能端
sbit lcdrs=P3^5;//液晶数据命令选择端
sbit dula=P2^6;//锁存器
sbit wela=P2^7;//同上
uchar num;
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
	   for(y=110;y>0;y--);
}
void write_com(uchar com)//这个是写命令函数
{
	lcdrs=0;//选择数据寄存器
	P0=com;
	delay(5);//延时大约5毫秒
	lcden=1;//打开使能端
	delay(5);
	lcden=0;
}
void write_data(uchar date)//这个是写数据函数
{
	lcdrs=1;
	P0=date;//所有的字符,都是依照ASCII码送过去的,这就是为什么正好数据端是8位的原因,并且不能送汉字的原因
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}
void init()//这个是最开始设置液晶板的函数
{
	dula=0;
	wela=0;
	lcden=0;
	write_com(0x38);//这四个是对液晶初始化的设定,由P0口接数据段送入液晶板.设置16x2显示,5x7点阵,8位数据接口
	write_com(0x0c);//开显示,不显示光标
	write_com(0x06);//写一个字符后,地址指针自动加1
	write_com(0x01);//显示清0,数据指针清0
}
void main()
{
	init();
	write_com(0x80+0x10);//
	for(num=0;num<15;num++)
	{
		write_data(table[num]);
		delay(5);
	}
	write_com(0x80+0x50);//这里是让指针,也就是光标定位到第二行第一个,0x40表示的就是第二行第一个
	for(num=0;num<16;num++)
	{
		write_data(table1[num]);
		delay(5);
	}
    for(num=0;num<16;num++)
    {
        write_com(0x18);
        delay(200);
    }
	while(1);
}

图2.2.1 字母正在移入液晶屏(单片机)

 图2.2.2 字母完全移入液晶屏(单片机)

  图2.2.3 字母正在移入液晶屏(仿真)

 图2.2.4 字母完全移入液晶屏(仿真) 

Proteus仿真视频:

1602液晶显示(2)

3.简易仿真

#include "reg52.h"
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;

unsigned char str[]={"Hello world!"};
void delay(unsigned int t)
{
	unsigned int i=0,j=0;
	for(i=0;i<t;i++)
	{
		for(j=0;j<120;j++);
	}
}
 void writedat(unsigned char dat)
{
   RS=1;
   RW=0;
   E=0;
   P2=dat;
   delay(5);
   E=1;
   E=0;
}

void writecom(unsigned char com)
{
   RS=0;
   RW=0;
   E=0;
   P2=com;
   delay(5);
   E=1;
   E=0;
}

void display()
{
	unsigned int i=0;
	writecom(0x80+2+0x40);
	delay(5);
//	writedat('A');
//	delay(5);
//	writedat(0x32);
//	delay(5);

	while(str[i]!='\0')
	{
		writedat(str[i]);
		delay(5);
		i++;
	}
}
void initlcd()
{
	writecom(0x38);
	writecom(0x0c);
	writecom(0x06);
	writecom(0x01);		
}

void main()
{
	initlcd();
	while(1)
	{
	display();
	}
}

Proteus仿真图:

图2.3.1 仿真图(简易版)

仿真视频 :

1602液晶(简易版)

 

 


网站公告

今日签到

点亮在社区的每一天
去签到