目录
一、实验环境与实验器材
二、实验内容及实验步骤
1. 目标:用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!”,在第二行显示WWW.TXMCU.COM。
2.目标:用C语言编程,实现第一行从右侧移入“Hello everyone!”,同时第二行从右侧移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。
3.简易仿真
一、实验环境与实验器材
环境: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);//写一个字符后,地址指针自动加1write_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液晶(简易版)