目錄
前言
從實驗室翻出來一塊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液晶顯示模塊說明文檔已上傳百度網盤