用51单片机(STC89C52RC、STC12C5A60S2、STC15W104)驱动MzLH03-12864液晶显示模块

 

目录

前言

1.软硬件平台

2.硬件焊接

2.1元件:

2.2电路原理图

2.3焊接

3.新建keil工程

3.1新建文件夹

3.2新建工程

3.3新建main.c文件

3.4编写程序

3.5编译项目

4.程序烧写进单片机

4.1硬件连接

4.2烧写程序

5.实验效果

6.展望

文件下载


前言

从实验室翻出来一块2009年生产的古董12864液晶显示模块,心血来潮想要把它驱动起来,从网上找资料,焊接简单的电路,花费大半天时间才完成,详细记录如下。

1.软硬件平台

硬件:51单片机最小系统(天津锐志电子),本文采用的芯片是STC89C52RC 40I-PDIP,11.0592MHz晶振,也可使用STC12C5A60S2 35I-PDIP40,两者引脚基本一致。此外,也可使用只有8脚的STC15W104,自己焊接外围电路,只要有5个IO口即可。

软件:Keil5 C51

2.硬件焊接

2.1元件:

(1)7cm*9cm洞洞板

(2)插针7P、插座10P、杜邦线11根

(3)68Ω电阻6个(33Ω-100Ω均可)

2.2电路原理图

2.3焊接

焊锡走线大法好,原谅我的垃圾焊工,哈哈哈哈哈哈

正面

用杜邦线连接电路

3.新建keil工程

3.1新建文件夹

这里我建在E盘,E:/12864液晶显示,待会工程放在这个文件夹。

3.2新建工程

启动keil5 C51,点击Project>>New uVision Project,弹出创建窗口,选择我们创建好的文件夹,项目命名为 液晶显示

点击 保存,弹出选择仿真模型窗口,STC89C52RC对应着NXP的P89V51RD2,STC12C5A60S2对应Micro-chip的AT89C52,STC15W104对应Intel的8051AH

点击OK,弹出提示框,选择 否

项目创建完成。

3.3新建main.c文件

右击Source Group 1,选择Add New Item to Group 'Source Group 1'

弹出文件命名窗口,命名为main,类型为C File,点击Add,将main.c添加进项目。

这里也可以先新建main.c文件,再右击 Source Group 1,选择Add Existing Files to Group 'Source Group 1',将main.c添加进项目。

3.4编写程序

汉字GBK码查询网址:http://www.mytju.com/classcode/tools/encode_gb2312.asp

#include "reg52.h"
#include "intrins.h"
#define u8 unsigned char
#define u16 unsigned int
	
sbit res=P1^7;//SPI_RES
sbit cs=P1^6;
sbit sck=P1^5;
sbit sda=P1^4;
sbit busy=P1^3;

void Delay1ms()		//@11.0592MHz
{
	u8 i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

void delay_n_ms(u16 n)
{
	while(n--)
	{
		Delay1ms();
	}
}

/*==============================================
函数:void LCD_init(void)
描述:LCD初始化程序,完成端口初始化以及复位
参数:无
返回:无
================================================*/
void LCD_init(void)
{
	cs=1;
	sda=1;
	sck=1;
	busy=1;
	
	res=0;//复位
	delay_n_ms(10);//延时10ms
	res=1;//恢复高电平,复位完成
	delay_n_ms(20);//延时20ms
}

/*==============================================
函数:void CS_set(u8 Status)
描述:置CS线状态
参数:Status     =1则置高电平,=0则置低电平
返回:无
================================================*/
void CS_set(u8 Status)
{
	while(busy);//如果busy为高电平,则循环等待
	if(Status)
	{
		cs=1;//CS置高电平
	}
	else
		cs=0;//CS置低电平
	
}

/*==============================================
函数:void Send(u8 Data)
描述:通过串行SPI口输送一个byte的数据置模组
参数:Data     要传送的数据
返回:无
================================================*/
void Send(u8 Data)
{
	u16 i=0;
	for(i=0;i<8;i++)
	{
		sck=0;//SCK置低电平
		if(Data&0x0080)
		{
			sda=1;
		}
		else
			sda=0;
		sck=1;//SCK上升沿触发串行数据采样
		Data=Data<<1;//数据左移一位
	}
}

int main(void)
{
	LCD_init();//LCD初始化,清屏
	CS_set(0);//CS置低电平
	Send(0x80);//发送指令0x80
	Send(0xAA);//指令数据
	CS_set(1);//CS置高电平
	
	//接下来设置背光亮度
	CS_set(0);//CS置低电平
	Send(0x8A);//发送指令0x8A
	Send(100);//亮度100
	CS_set(1);//CS置高电平
	
	//绘制点
	CS_set(0);//CS置低电平
	Send(0x01);//发送指令0x01
	Send(100);//设置X轴位置
	Send(5);//设置Y轴位置
	CS_set(1);//CS置高电平
	
	//设置ASCII字符的字型
	CS_set(0);//CS置低电平
	Send(0x81);//发送指令0x81
	Send(0x11);//选择8X16的ASCII字体,黑色
	CS_set(1);//CS置高电平
	
	//显示ASCII字符
	CS_set(0);//CS置低电平
	Send(7);//发送指令0x07
	Send(20);//设置字符左上角的X轴位置
	Send(36);//设置字符左上角的Y轴位置
	Send('A');//字符的ASCII码值,直接用引号即可
	CS_set(1);//CS置高电平
	
	//显示16x16点阵汉字“液”,GBK码为0xD2BA
	CS_set(0);//CS置低电平
	Send(8);//发送指令0x08
	Send(100);//设置字符左上角的X轴位置
	Send(36);//设置字符左上角的Y轴位置
	Send(0xD2);//发送二级字库中汉字GB码的高八位值
	Send(0xBA);//发送二级字库中汉字GB码的低八位值
	CS_set(1);//CS置高电平
	
	while(1);//一直显示
	
}

3.5编译项目

先点击Options for Target,点击Output,勾选创建hex文件,这样编译完成会生成.hex文件,以供烧写使用。

点击OK,完成设置。

点击Rebuild,编译文件

等待状态栏提示".\Objects\液晶显示" - 0 Error(s), 0 Warning(s).

编译完成!

4.程序烧写进单片机

4.1硬件连接

将最小系统板的VCC/TXD/RXD/GND用杜邦线连接USB-TTL转接头的5V0/RXD/TXD/GND

4.2烧写程序

打开STC-ISP软件(可以在宏晶科技官网下载),会自动识别单片机所连串口,单片机型号选择STC89C52RC/LE52RC,点击 打开程序文件,选择E:\12864液晶显示\Objects\液晶显示.hex,点击 下载/编程。

将单片机断电,再重新上电,开始烧写,稍等片刻,烧写完成!

5.实验效果

6.展望

驱动了显示屏,下一步可以做一个温湿度监测,显示出来,或者为其他项目提供交互。

文件下载

项目文件、stc下载软件、MzLH03-12864液晶显示模块说明文档已上传百度网盘

百度网盘链接

 

 

发布了16 篇原创文章 · 获赞 26 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42268054/article/details/103121050