目录
前言
从实验室翻出来一块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液晶显示模块说明文档已上传百度网盘