国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LCD12864顯示屏原理及使用教程

這篇具有很好參考價值的文章主要介紹了LCD12864顯示屏原理及使用教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.芯片簡介

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

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

主要特點如下

  • 邏輯工作電壓(VDD):4.5~5.5V;

  • 背光源電壓 :4.5~5.5V;

  • 工作溫度(Ta):0~60℃(常溫) / -20~75℃(寬溫);

  • 顯示角度:6:00 鐘直視;

  • 與 MCU 接口:8位或3位串行模式;

2. LCD12864引腳定義

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

3.LCD12864并行控制

(1)讀操作時序如圖

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

(2)寫操作時序如圖

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

(3)與MCU連接原理圖

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

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

(4)并行模式驅(qū)動程序

LCD12864.h


#ifndef __LCD12864_H
#define __LCD12864_H

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

//---重定義關(guān)鍵詞---//
#ifndef uchar
#define uchar unsigned char
#endif

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

#define LCD12864_DATAPORT P0    //數(shù)據(jù)IO口

sbit LCD12864_RS  =  P2^6;             //(數(shù)據(jù)命令)寄存器選擇輸入 
sbit LCD12864_RW  =  P2^5;             //液晶讀/寫控制
sbit LCD12864_EN  =  P2^7;             //液晶使能控制
sbit LCD12864_PSB =  P3^2;             //串/并方式控制
sbit LCD12864_RST =  P3^4;         //復(fù)位端
//---聲明全局函數(shù)---//
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"
/*******************************************************************************
* 函 數(shù) 名         : 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--);
    }
  }
}

/*******************************************************************************
* 函 數(shù) 名         : LCD12864_Busy
* 函數(shù)功能       : 檢測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;
}

/*******************************************************************************
* 函 數(shù) 名         : LCD12864_WriteCmd
* 函數(shù)功能       : 寫命令
*******************************************************************************/
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;   //放置數(shù)據(jù)
  LCD12864_EN = 1;       //寫時序
  LCD12864_Delay1ms(5);
  LCD12864_EN = 0;              
}

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

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

/*******************************************************************************
* 函 數(shù) 名         : 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]!='\0')
  {
    if(i<16)    //判斷是否在本行的顯示范圍內(nèi)
    {
      LCD12864_WriteData(word[i]);
      i++;
    }  
   }
}

4.LCD12864串行控制

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

第一字節(jié):格式 11111ABC

  • ?A 為數(shù)據(jù)傳送方向控制:H 表示數(shù)據(jù)從 LCD 到 MCU,L 表示數(shù)據(jù)從 MCU 到 LCD;

  • ?B 為數(shù)據(jù)類型選擇:H 表示數(shù)據(jù)是顯示數(shù)據(jù),L 表示數(shù)據(jù)是控制指令;

  • ?C 固定為 0;

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

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

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

(2)與MCU連接原理圖

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

lcd12864,單片機模塊使用教程,單片機,stm32,c語言,嵌入式硬件

(3)串行模式驅(qū)動程序

LCD12864.h


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

extern void WriteCommand( unsigned char Cbyte );   //寫入指令函數(shù)
extern void WriteData( unsigned char Dbyte );  //寫入指令數(shù)據(jù)
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"
/**************************************************************


      //串行方式控制
/*******************************************************************
              常量聲明區(qū)
********************************************************************/      
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,
};
/****************************************************************                        
              發(fā)送一個字節(jié)
*****************************************************************/
void SendByte(unsigned char Dbyte)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    SCK = 0;
    Dbyte=Dbyte<<1;
    SID = CY;
    SCK = 1;
    SCK = 0;
  }
}
/**********************************************************
              接收一個字節(jié)
***********************************************************/

unsigned char ReceiveByte(void)
{
  unsigned char i,temp1,temp2;
  temp1=temp2=0;
  for(i=0;i<8;i++)
  {
    temp1=temp1<<1;
    SCK = 0;
    SCK = 1;                
    SCK = 0;
    if(SID) temp1++;
  }
  for(i=0;i<8;i++)
  {
    temp2=temp2<<1;
    SCK = 0;
    SCK = 1;
    SCK = 0;
    if(SID) temp2++;
  }
  return ((0xf0&temp1)+(0x0f&temp2));
}
/****************************************************************
                      檢查忙狀態(tài)
******************************************************************/
void CheckBusy( void )
{
  do SendByte(0xfc);     //11111,RW(1),RS(0),0
  while(0x80&ReceiveByte());
}

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

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

/*******************************************************************************************************
                                 設(shè)定光標函數(shù)
********************************************************************************************************/
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 != '\0')
  {
    if(col==8)
    {
      col=0;
      row++;
    }
    if(row==4) row=0;
    WriteCommand(AC_TABLE[8*row+col]);
    WriteData(*puts);
    puts++;
    if(*puts != '\0')
    {
      WriteData(*puts);
      puts++;
      col++;
    }  
  }
}

如需資料可在該賬號下載頻道下載,或關(guān)注公眾號-單片機實例設(shè)計,發(fā)送“LCD12864”獲取。 文章來源地址http://www.zghlxwxcb.cn/news/detail-803954.html

到了這里,關(guān)于LCD12864顯示屏原理及使用教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32—LCD液晶顯示屏

    STM32—LCD液晶顯示屏

    目錄 LCD液晶顯示屏介紹 液晶的組成 ?物理特性 液晶顯示屏內(nèi)部構(gòu)造 ?顏色深度 點亮LCD顯示屏 查看原理圖 圖片顯示 保存到工程用戶代碼的Inc目錄下 參數(shù)為數(shù)組名 字符顯示? 漢字顯示 某些物質(zhì)在熔融狀態(tài)或被溶劑溶解之后,盡管失去固態(tài)物質(zhì)的剛性,卻獲得了液體的易流動

    2024年02月04日
    瀏覽(23)
  • LCD拼接屏、LED顯示屏和OLED顯示屏的主要區(qū)別

    LCD拼接屏、LED顯示屏和OLED顯示屏的主要區(qū)別

    我們在生活或工作中經(jīng)??吹酱蟠笮⌒〉娘@示屏,但很多人卻分不清楚這些屏到底屬于哪一類,今天sostron與大家一起來分享下關(guān)于:LCD拼接屏、LED顯示屏、OLED透明屏三者的區(qū)別。 LCD拼接屏、LED顯示屏和OLED顯示屏是不同類型的顯示技術(shù),它們在構(gòu)成、工作原理和特點上存在明

    2024年02月17日
    瀏覽(23)
  • 【STM32篇】驅(qū)動LCD顯示屏

    【STM32篇】驅(qū)動LCD顯示屏

    本次使用的硬件設(shè)備為野火的霸道V2開發(fā)板,顯示器控制芯片型號為ILI9341,實際型號為ST7789V。在編寫代碼時參考的是ILI9341數(shù)據(jù)手冊,二者差別不大,都是240*320分辨率。 ????????ILI9341是一個用于TFT液晶顯示的單芯片控制驅(qū)動器,具有262144色的240RGB x 320像素顯示解決方案。

    2024年02月12日
    瀏覽(23)
  • 一文讀懂使用STM32驅(qū)動 LCD1602 液晶顯示屏(基于Mbed Studio平臺)

    一文讀懂使用STM32驅(qū)動 LCD1602 液晶顯示屏(基于Mbed Studio平臺)

    LCD (Liquid Crystal Display) 液晶顯示屏是一種廣泛使用的一種字符型液晶顯示模塊。其中型號1602表示每行顯示16個字符、一共2行。LCD1602相比于OLED最大的好處就是不用使用SPI或I2C等任何通信協(xié)議,而是由mbed直接將命令傳給LCD從而實現(xiàn)控制。 LCD1602主要參數(shù)如下: 顯示字符:16×2個

    2024年02月05日
    瀏覽(26)
  • 6.5物聯(lián)網(wǎng)RK3399項目開發(fā)實錄-驅(qū)動開發(fā)之LCD顯示屏使用(wulianjishu666)

    6.5物聯(lián)網(wǎng)RK3399項目開發(fā)實錄-驅(qū)動開發(fā)之LCD顯示屏使用(wulianjishu666)

    90款行業(yè)常用傳感器單片機程序及資料【stm32,stc89c52,arduino適用】 鏈接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwd=c53f? ======================================================== AIO-3399J開發(fā)板外置了兩個LCD屏接口,一個是EDP,一個是LVDS,接口對應(yīng)板子上的位置如下圖: DTS配置 引腳配置 AIO-3

    2024年04月09日
    瀏覽(29)
  • FPGA學習筆記03——RGB LCD顯示屏

    FPGA學習筆記03——RGB LCD顯示屏

    LCD屏與FPGA芯片接口如下,其中LCD_R0—R7,G0—G7,B0—B7為RGB888信號, LCD_BL:背光板使能,為高時背光板才亮 LCD_DE:RGB數(shù)據(jù)使能,為高時RGB數(shù)據(jù)有效 LCD_VSYNC:豎直(列)掃描有效 LCD_HSYNC:水平(行)掃描有效 LCD_CLK:顯示器時鐘 //在控制RGB LCD屏時,即可使用DE使能,也能用VSY

    2024年02月03日
    瀏覽(18)
  • ESP32設(shè)備驅(qū)動-I2C-LCD1602顯示屏驅(qū)動

    ESP32設(shè)備驅(qū)動-I2C-LCD1602顯示屏驅(qū)動

    LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊。它是由字符型液晶顯示屏(LCD)、控制驅(qū)動主電路HD44780及其擴展驅(qū)動電路HD44100,以及少量電阻、電容元件和結(jié)構(gòu)件等裝配在PCB板上而組成。 通過前面的實例我們知道,并口方式連接LCD1602將占用一定數(shù)量的GPIO口,在

    2024年02月07日
    瀏覽(22)
  • STC89C52單片機LCD1602顯示屏介紹與代碼演示

    STC89C52單片機LCD1602顯示屏介紹與代碼演示

    LCD1602顯示屏介紹 引腳介紹 內(nèi)部結(jié)構(gòu)框圖 ?存儲器 ?DDRAM儲存器地址 ?CGRAM與?CGROM的地址 時序介紹 LCD1602快捷指令? LCD1602指令操作流程: 字符、字符串的顯示 ?各種進制的數(shù)字顯示 在LCD1602上顯示十進制數(shù)字 在LCD1602上顯示十六進制數(shù)字 在LCD1602上顯示二進制數(shù)字 LCD1602(Liq

    2024年02月08日
    瀏覽(22)
  • 單片機 用LCD顯示屏 輸出字符串源代碼(附Proteus圖)

    單片機 用LCD顯示屏 輸出字符串源代碼(附Proteus圖)

    附:字符型LCD顯示屏型號:LM016L;這個代碼應(yīng)該是可以直接運行的

    2024年02月14日
    瀏覽(77)
  • 【雕爺學編程】Arduino智能家居之溫濕度監(jiān)測與LCD顯示屏輸出

    【雕爺學編程】Arduino智能家居之溫濕度監(jiān)測與LCD顯示屏輸出

    Arduino是一個開放源碼的電子原型平臺,它可以讓你用簡單的硬件和軟件來創(chuàng)建各種互動的項目。Arduino的核心是一個微控制器板,它可以通過一系列的引腳來連接各種傳感器、執(zhí)行器、顯示器等外部設(shè)備。Arduino的編程是基于C/C++語言的,你可以使用Arduino IDE(集成開發(fā)環(huán)境)來

    2024年02月04日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包