目录
1. 目标:用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!”,在第二行显示WWW.TXMCU.COM。
2.目标:用C语言编程,实现第一行从右侧移入“Hello everyone!”,同时第二行从右侧移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。
一、实验环境与实验器材
环境:Keli,STC-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液晶(简易版)