<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

LCD12864液晶顯示模塊串行連接方式

科技綠洲 ? 來源:單片機實例設計 ? 作者:單片機實例設計 ? 2023-09-11 11:26 ? 次閱讀

1.芯片簡介

LCD12864液晶顯示模塊是 128×64點陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內置 8192個中文漢字(16X16 點陣)(需帶有字庫的型號才能顯示中文)、128 個字符(8X16 點陣)及 64X256 點陣顯示 RAM(GDRAM)??膳c CPU 直接接口,提供兩種界面來連接微處理機:8-位并行及串行兩種連接方式。具有多種功能:光標顯示、畫面移位、睡眠模式等。

圖片

主要特點如下

  • 邏輯工作電壓(VDD):4.5~5.5V;
  • 背光源電壓 :4.5~5.5V;
  • 工作溫度(Ta):0~60℃(常溫) / -20~75℃(寬溫);
  • 顯示角度:6:00 鐘直視;
  • MCU 接口:8位或3位串行模式;

2. LCD12864引腳定義

圖片

3.LCD12864并行控制

(1)讀操作時序如圖

圖片

(2)寫操作時序如圖

圖片

(3)與MCU連接原理圖

并行模式,除電源外,需要將模塊的CS、SCLK、SID、DB0-DB7引腳一一與單片機連接,PSB接VCC(接地為串行模式,接VCC為并行模式),RST接VCC(低電平復位);

圖片

(4)并行模式驅動程序

LCD12864.h

#ifndef __LCD12864_H
#define __LCD12864_H


//---包含頭文件---//
#include< reg51.h >


//---重定義關鍵詞---//
#ifndef uchar
#define uchar unsigned char
#endif


#ifndef uint 
#define uint unsigned int
#endif
//---定義使用的IO口---//


#define LCD12864_DATAPORT P0    //數據IO口


sbit LCD12864_RS  =  P2^6;             //(數據命令)寄存器選擇輸入 
sbit LCD12864_RW  =  P2^5;             //液晶讀/寫控制
sbit LCD12864_EN  =  P2^7;             //液晶使能控制
sbit LCD12864_PSB =  P3^2;             //串/并方式控制
sbit LCD12864_RST =  P3^4;         //復位端
//---聲明全局函數---//
void LCD12864_Delay1ms(uint c);
uchar LCD12864_Busy(void);
void LCD12864_WriteCmd(uchar cmd);
void LCD12864_WriteData(uchar dat);
void LCD12864_Init();
void LCD12864_ClearScreen(void);
void LCD12864_SetWindow(uchar x, uchar y,uchar *word);


#endif

LCD12864.c

#include"lcd12864.h"
/*******************************************************************************
* 函 數 名         : LCD12864_Delay1ms
*******************************************************************************/
void LCD12864_Delay1ms(uint c)
{
    uchar a,b;
  for(; c >0; c--)
  {
      for(b=199; b >0; b--)
    {
          for(a=1; a >0; a--);
    }
  }
}


/*******************************************************************************
* 函 數 名         : LCD12864_Busy
* 函數功能       : 檢測LCD是否忙
* 輸    出         : 1或0(1表示不忙,0表示忙)
*******************************************************************************/
uchar LCD12864_Busy(void)
{
  uchar i = 0;
  LCD12864_RS = 0;     //選擇命令
  LCD12864_RW = 1;  //選擇讀取
  LCD12864_EN = 1;
  LCD12864_Delay1ms(1);
  while((LCD12864_DATAPORT & 0x80) == 0x80)  //檢測讀取到的值
  {
    i++;
    if(i > 100)
    {
      LCD12864_EN = 0;
      return 0;     //超過等待時間返回0表示失敗
    }
  }
  LCD12864_EN = 0;
  return 1;
}


/*******************************************************************************
* 函 數 名         : LCD12864_WriteCmd
* 函數功能       : 寫命令
*******************************************************************************/
void LCD12864_WriteCmd(uchar cmd)
{
  uchar i;
  i = 0;
  while( LCD12864_Busy() == 0)
  {
    LCD12864_Delay1ms(1);
    i++;
    if( i >100)
    {
      return;     //超過等待退出
    }  
  } 
  LCD12864_RS = 0;     //選擇命令
  LCD12864_RW = 0;     //選擇寫入
  LCD12864_EN = 0;     //初始化使能端
  LCD12864_DATAPORT = cmd;   //放置數據
  LCD12864_EN = 1;       //寫時序
  LCD12864_Delay1ms(5);
  LCD12864_EN = 0;              
}


/*******************************************************************************
* 函 數 名         : LCD12864_WriteData
* 函數功能       : 寫數據
*******************************************************************************/
void LCD12864_WriteData(uchar dat)
{
  uchar i;
  i = 0;
  while( LCD12864_Busy() == 0)
  {
    LCD12864_Delay1ms(1);
    i++;
    if( i >100)
    {
      return;     //超過等待退出
    }  
  }
  LCD12864_RS = 1;     //選擇數據
  LCD12864_RW = 0;     //選擇寫入
  LCD12864_EN = 0;     //初始化使能端
  LCD12864_DATAPORT = dat;   //放置數據
  LCD12864_EN = 1;       //寫時序
  LCD12864_Delay1ms(5);
  LCD12864_EN = 0;                    
}


/*******************************************************************************
* 函 數 名         : LCD12864_Init
*******************************************************************************/
void LCD12864_Init()
{
  LCD12864_PSB = 1;    //選擇并行輸入
  LCD12864_RST = 1;    //復位
  LCD12864_WriteCmd(0x30);  //選擇基本指令操作
  LCD12864_WriteCmd(0x0c);  //顯示開,關光標
  LCD12864_WriteCmd(0x01);  //清除LCD12864的顯示內容
}


/*******************************************************************************
* 函 數 名         : LCD12864_SetWindow
*******************************************************************************/
void LCD12864_SetWindow(uchar x, uchar y,uchar *word)
{
  uchar pos;
  uchar i=y;
  if(x == 0)     // 第一行的地址是80H
  {
    x = 0x80;
  }    
  else if(x == 1)  //第二行的地址是90H
  {
    x = 0x90;  
  }  
  else if(x == 2)  //第三行的地址是88H
  {
    x = 0x88;
  }  
  else if(x == 3)  //第三行的地址是98H
  {
    x = 0x98;
  }  
  pos = x + y;
  LCD12864_WriteCmd(pos);  
  while(word[i]!='?')
  {
    if(i< 16)    //判斷是否在本行的顯示范圍內
    {
      LCD12864_WriteData(word[i]);
      i++;
    }  
   }
}

4.LCD12864串行控制

(1)串行控制時序如圖:

第一字節:格式 11111ABC

  • A 為數據傳送方向控制:H 表示數據從 LCD 到 MCU,L 表示數據從 MCU 到 LCD;
  • B 為數據類型選擇:H 表示數據是顯示數據,L 表示數據是控制指令;
  • C 固定為 0;

第二字節:(串行)8 位數據的高 4 位—格式 DDDD0000;

第三字節:(串行)8 位數據的低 4 位—格式 0000DDDD;

圖片

(2)與MCU連接原理圖

串行模式,除電源外,只需要將模塊的CS、SCLK、SID引腳與單片機連接,PSB接GND(接地為串行模式,接VCC為并行模式),RST接VCC(低電平復位);

圖片

(3)串行模式驅動程序

LCD12864.h

#ifndef   _LCD12864_h_
#define   _LCD12864_h_
/**************************************************************
               iO口宏定義區
***************************************************************/
sbit CS =P2^3;//RS
sbit SID=P2^4;//RW
sbit SCK=P2^5;//E


extern void WriteCommand( unsigned char Cbyte );   //寫入指令函數
extern void WriteData( unsigned char Dbyte );  //寫入指令數據
extern void LcmInit( void );   //顯示屏初始化
extern void LcmClearTXT( void );  //顯示屏清屏
extern void Location_xy_12864(unsigned char x,unsigned char y);
extern void PutStr(unsigned char row,unsigned char col,unsigned char *puts);
#endif

LCD12864.c

#include < reg52.h >
#include < intrins.h >
#include"LCD12864.h"
/**************************************************************




      //串行方式控制
/*******************************************************************
              常量聲明區
********************************************************************/      
unsigned char code AC_TABLE[]={                   //坐標編碼
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
};
/****************************************************************                        
              發送一個字節
*****************************************************************/
void SendByte(unsigned char Dbyte)
{
  unsigned char i;
  for(i=0;i< 8;i++)
  {
    SCK = 0;
    Dbyte=Dbyte< 

unsigned char ReceiveByte(void)
{
  unsigned char i,temp1,temp2;
  temp1=temp2=0;
  for(i=0;i< 8;i++)
  {
    temp1=temp1< 

/******************************************************************
           寫一個字節的指令
*******************************************************************/
void WriteCommand( unsigned char Cbyte )
{
  CS = 1;
  CheckBusy();
  SendByte(0xf8);          //11111,RW(0),RS(0),0
  SendByte(0xf0&Cbyte);
  SendByte(0xf0&Cbyte< *************************************************************
                 寫一個字節的數據
**************************************************************/
void WriteData( unsigned char Dbyte )
{
  CS = 1;
  CheckBusy();
  SendByte(0xfa);          //11111,RW(0),RS(1),0
  SendByte(0xf0&Dbyte);
  SendByte(0xf0&Dbyte< 

/******************************************************************
                         lcd初始化函數
*******************************************************************/
void LcmInit( void )
{
     WriteCommand(0x30);
     WriteCommand(0x03);
     WriteCommand(0x0c);
     WriteCommand(0x01);
     WriteCommand(0x06);
}


/*******************************************************************************************************
                                 設定光標函數
********************************************************************************************************/
void Location_xy_12864(unsigned char x,unsigned char y)
{
  switch(x)
  {
    case 0:
      x=0x80;break;
    case 1:
      x=0x90;break;
    case 2:
      x=0x88;break;
    case 3:
      x=0x98;break;
    default:
      x=0x80;
  }
  y=y&0x07;
  WriteCommand(0x30);
  WriteCommand(y+x);
  WriteCommand(y+x);


}
/***********************************************************************************
                  清除文本
************************************************************************************/
void LcmClearTXT( void )
{
  unsigned char i;
  WriteCommand(0x30);
  WriteCommand(0x80);
  for(i=0;i< 64;i++)
  WriteData(0x20);
  Location_xy_12864(0,0);      
}
/****************************************************************************************
                      顯示字符串
*****************************************************************************************/
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{    
  WriteCommand(0x30);
  WriteCommand(AC_TABLE[8*row+col]);
  while(*puts != '?')
  {
    if(col==8)
    {
      col=0;
      row++;
    }
    if(row==4) row=0;
    WriteCommand(AC_TABLE[8*row+col]);
    WriteData(*puts);
    puts++;
    if(*puts != '?')
    {
      WriteData(*puts);
      puts++;
      col++;
    }  
  }
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    7859

    瀏覽量

    149007
  • 液晶顯示模塊

    關注

    0

    文章

    44

    瀏覽量

    11645
  • 串行連接
    +關注

    關注

    1

    文章

    6

    瀏覽量

    6661
  • LCD12864液晶
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1134
收藏 人收藏

    評論

    相關推薦

    TMS320F2812和LCD12864液晶顯示模塊的硬件和程序

    TMS320F2812和LCD12864液晶顯示模塊的硬件和程序
    發表于 04-16 19:21

    LCD12864顯示屏怎么使用

    一.概述LCD12864顯示屏是所說的點陣液晶顯示模塊,就是由12864液晶顯示點組成的一個1
    發表于 02-07 06:23

    LCD12864的相關資料分享

    廢話不多說,LCD12864是一款分辨率為64X128的液晶顯示屏?! 〕R奡T7920主控的LCD12864 引腳定義如下:  1 VSS - 模塊的電源地  2 VDD -
    發表于 02-15 06:41

    LCD12864的相關資料推薦

    一、 LCD12864(ST7565P)簡介LCD12864是一種具有4位/8位并行、2線或3線串行多種接口方式,利用該模塊靈活的接口
    發表于 02-18 07:12

    LCD12864液晶顯示模塊(中文資料)

    FYD12864-0402B是一種具有4位/8位并行、2線或3線串行多種接口方式,內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊
    發表于 02-17 16:02 ?3494次下載
    <b class='flag-5'>LCD12864</b><b class='flag-5'>液晶顯示</b><b class='flag-5'>模塊</b>(中文資料)

    LCD12864液晶使用分析

    LCD12864 液晶分為兩種,帶字庫和不帶字庫的。本文以LCD12864液晶為例進行了無字庫與字庫兩種不同液晶的講解。
    發表于 08-16 14:59 ?600次下載
    <b class='flag-5'>LCD12864</b><b class='flag-5'>液晶</b>使用分析

    LCD12864液晶顯示的設計

    LCD12864液晶顯示的設計基于MSP430單片機片內溫度12864顯示源程序
    發表于 06-21 17:56 ?27次下載

    LCD12864液晶顯示模塊(中文資料)

    FYD12864-0402B 是一種具有 4 位/8 位并行、2 線或 3 線串行多種接口方式,內部含有國標一級、二級簡體中文字庫 的點陣圖形液晶顯示
    發表于 11-17 11:16 ?96次下載

    lcd12864液晶顯示程序

    一:概述 帶中文字庫的128X64 是一種具有4 位/8 位并行、2 線或3 線串行多種接口方式,內部含有國標一級、二級簡體 中文字庫的點陣圖形液晶顯示模塊;其
    發表于 11-06 11:06 ?1.2w次閱讀

    lcd12864液晶顯示屏的特點

      lcd12864是帶中文字庫的128X64 是一種具有4 位/8 位并行、2 線或3 線串行多種接口方式,內部含有國標一級、二級簡體 中文字庫的點陣圖形液晶顯示
    發表于 11-06 14:44 ?3.2w次閱讀

    LCD12864串行顯示的C51程序免費下載

    本文檔的主要內容詳細介紹的是LCD12864液晶串行顯示程序的C51程序免費下載
    發表于 08-14 17:32 ?27次下載
    <b class='flag-5'>LCD12864</b><b class='flag-5'>串行</b><b class='flag-5'>顯示</b>的C51程序免費下載

    使用Proteus仿真LCD12864液晶顯示動畫的程序免費下載

    本文檔的主要內容詳細介紹的是使用Proteus仿真LCD12864液晶顯示動畫的程序免費下載。
    發表于 09-11 10:32 ?85次下載
    使用Proteus仿真<b class='flag-5'>LCD12864</b><b class='flag-5'>液晶顯示</b>動畫的程序免費下載

    dfrobotSPI LCD12864 Module顯示模塊簡介

    SPI LCD12864模塊是一款基于12864液晶顯示器開發的顯示模塊。
    的頭像 發表于 12-15 09:22 ?2968次閱讀
    dfrobotSPI <b class='flag-5'>LCD12864</b> Module<b class='flag-5'>顯示</b><b class='flag-5'>模塊</b>簡介

    LCD12864液晶顯示程序免費下載

    本文檔的主要內容詳細介紹的是LCD12864液晶顯示程序免費下載。
    發表于 06-24 08:00 ?29次下載
    <b class='flag-5'>LCD12864</b>的<b class='flag-5'>液晶顯示</b>程序免費下載

    LCD12864點陣圖形液晶顯示模塊中文資料

    電子發燒友網站提供《LCD12864點陣圖形液晶顯示模塊中文資料.doc》資料免費下載
    發表于 11-17 11:48 ?0次下載
    <b class='flag-5'>LCD12864</b>點陣圖形<b class='flag-5'>液晶顯示</b><b class='flag-5'>模塊</b>中文資料
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>