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

STM32 使用LCD12864顯示屏(串行方式)

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

LCD12864

簡介

12864LCD液晶顯示模塊是一款4位/8位并行、2線或3線接口方式,內(nèi)部含有國際一級、二級簡體中文字庫的圖形點陣液晶模塊。顯示分辨率為12864,內(nèi)置8198個1616點漢字,和128個16*8點ASCII字符集。

功能引腳圖

STM32 使用LCD12864顯示屏(串行方式)

串口通訊需要使用的引腳

  1. CS片選信號 (如果只有一款屏,可以將CS直接接到VCC上,實現(xiàn)兩線通訊。)
  2. SID數(shù)據(jù)傳輸引腳
  3. CLK時鐘
  4. PSB(低電平表示串行通訊,串口通訊時可以直接接地。)
  5. VSS、VDD電源腳

原理圖

工作電壓:5V
驅(qū)動電壓:0-7V
邏輯電平:2.7-5.5V
工作溫度:0-55°C
STM32 使用LCD12864顯示屏(串行方式)

串行時序圖

  1. 在操作液晶屏前,將CS片選信號拉高。
  2. SID前8位是控制字符,1-5位固定為1。
    RW為0時,表示寫操作。RS為1時,表示寫數(shù)據(jù),RS為0時,表示寫指令。
    因此寫指令CMD固定為0xF8,寫數(shù)據(jù)DAT固定為0xFA。
  3. 發(fā)送數(shù)據(jù)分為兩組,將發(fā)送的8位數(shù)據(jù)截取成兩段,第一段發(fā)送給1byte的高4位,第二段發(fā)送給2byte的高4位。
    STM32 使用LCD12864顯示屏(串行方式)

基本指令說明

  1. 功能設定
    本設計使用(0x30),表示8位MPU控制,選擇基本指令集。
    STM32 使用LCD12864顯示屏(串行方式)

  2. 顯示開關設置
    本設計使用(0x0C),表示設定顯示開,關閉光標,正常顯示。
    STM32 使用LCD12864顯示屏(串行方式)

  3. 進入設定點
    本設計使用(0x06),表示顯示數(shù)據(jù)的讀寫時,設定游標方向右移,DDRAM地址計數(shù)器加1。
    STM32 使用LCD12864顯示屏(串行方式)

  4. 清楚顯示
    本設計使用(0x01),表示清除顯示。
    STM32 使用LCD12864顯示屏(串行方式)

  5. 設定DDRAM地址
    本設計使用(0x80),表示設置啟動位置到地址計數(shù)器。
    128x64點陣原理上等同于256x32點陣,第三行對應的DDRAM地址緊接著第一行,第四行對應的DDRAM地址緊接著第二行。在使用反白功能時,第一行反白,第三行必然反白。
    STM32 使用LCD12864顯示屏(串行方式)

6. 屏幕與DDRAM地址的對應關系

STM32 使用LCD12864顯示屏(串行方式)

代碼配置

lcd12864.h

#ifndef __LCD12864_H
#define __LCD12864_H

#include "stm32f10x.h"
#include "Delay.h"

#define CS 	GPIO_Pin_0	//片選信號
#define SID GPIO_Pin_1	//數(shù)據(jù)傳輸
#define CLK GPIO_Pin_2	//時鐘
#define PSB GPIO_Pin_3	//串并選擇 低電平為串行
#define CMD_PROT GPIOC	//GPIO分組

#define CS_HIGH GPIO_SetBits(CMD_PROT,CS)
#define CS_LOW GPIO_ResetBits(CMD_PROT,CS)
#define SID_HIGH GPIO_SetBits(CMD_PROT,SID)
#define SID_LOW GPIO_ResetBits(CMD_PROT,SID)
#define CLK_HIGH GPIO_SetBits(CMD_PROT,CLK)
#define CLK_LOW GPIO_ResetBits(CMD_PROT,CLK)
#define PSB_HIGH GPIO_SetBits(CMD_PROT,PSB)
#define PSB_LOW GPIO_ResetBits(CMD_PROT,PSB)

#define CMD 0xF8	//寫指令
#define DAT 0xFA	//寫數(shù)據(jù)

typedef struct{
	uint8_t com;	//地址
	uint8_t num;	//長度
	uint8_t *dat;	//數(shù)據(jù)
}LCD_InitTypeDef;	//定義寫文字用的結(jié)構(gòu)體

void LCD12864_UserConfig(void);/*用戶配置*/
void LCD12864_Write_Init(void);/*LCD12864上電初始化流程*/
void LCD12864_Write_CMD_Data(uint8_t cmd,uint8_t data);/*LCD12864寫函數(shù) 傳入指令寫指令,傳入數(shù)據(jù)寫數(shù)據(jù)*/
void LCD12864_Write_Word(LCD_InitTypeDef LCD_InitStructure);/*LCD12864寫文字*/
void LCD12864_Write_Number(uint8_t com,uint8_t num);/*LCD12864寫數(shù)字*/
void LCD12864_Open(void);/*屏幕開顯示*/
void LCD12864_Shut(void);/*屏幕關顯示,進入睡眠*/

#endif

lcd12864.c

#include "lcd12864.h"

/*用戶配置*/
void LCD12864_UserConfig(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin	= CS|SID|CLK|PSB;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(CMD_PROT,&GPIO_InitStructure);
}

/*LCD12864寫一個字節(jié)*/
void LCD12864_Write_Byte(uint8_t data)
{
	uint8_t WBi;
	CS_HIGH;	//寫之前拉高片選信號
	for(WBi=0;WBi<8;WBi++)
	{
		(data<<WBi&0x80)?SID_HIGH:SID_LOW;	//移位,判斷高位
	
		CLK_LOW;	//拉低時鐘
		CLK_HIGH;	//拉高時鐘
	}
	CS_LOW;		//釋放片選,不再占據(jù)總線
}
	
/*LCD12864寫函數(shù) 傳入指令寫指令,傳入數(shù)據(jù)寫數(shù)據(jù)*/
void LCD12864_Write_CMD_Data(uint8_t cmd,uint8_t data)
{
	LCD12864_Write_Byte(cmd);
	LCD12864_Write_Byte(data&0xf0);			//根據(jù)時序圖,傳入數(shù)據(jù)的高4位變成發(fā)送數(shù)據(jù)的高4位,發(fā)送的數(shù)據(jù)低4位為0。例0x38 0011 1000 & 1111 0000
	LCD12864_Write_Byte((data<<4)&0xf0);	//再取傳入數(shù)據(jù)的低4位,變成發(fā)送數(shù)據(jù)的高4位,發(fā)送的數(shù)據(jù)低4位為0。例0x38<<4 1000 & 1111 0000
	Delay_ms(2);	//設置傳輸延時
}

/*LCD12864上電初始化流程*/
void LCD12864_Write_Init(void)
{
	PSB_LOW;								//設置串行通訊
	LCD12864_Write_CMD_Data(CMD,0x30);		//功能設定,8位MCU接口,基本指令集
	LCD12864_Write_CMD_Data(CMD,0x06);		//顯示數(shù)據(jù)的讀寫時,設定游標方向右移,DDRAM地址計數(shù)器加1
	LCD12864_Write_CMD_Data(CMD,0x0C);		//開顯示,關閉光標
	LCD12864_Write_CMD_Data(CMD,0x01);		//清除顯示
	LCD12864_Write_CMD_Data(CMD,0x80);		//設置啟動位置
}
	
/*屏幕開顯示*/
void LCD12864_Open(void)
{
	LCD12864_Write_CMD_Data(CMD,0x0C);	
}

/*屏幕關顯示,進入睡眠*/
void LCD12864_Shut(void)
{
	LCD12864_Write_CMD_Data(CMD,0x08);		//進入睡眠模式
}

/*LCD12864寫文字*/
void LCD12864_Write_Word(LCD_InitTypeDef LCD_InitStructure)
{
	uint8_t LWWi;
	LCD12864_Write_CMD_Data(CMD,LCD_InitStructure.com);		//寫指令:寫入地址
	
	for(LWWi=0;LWWi<LCD_InitStructure.num;LWWi++)
	{
		LCD12864_Write_CMD_Data(DAT,*LCD_InitStructure.dat++);	//根據(jù)數(shù)據(jù)長度寫入字節(jié)
		Delay_ms(200);
	}
}
	
/*LCD12864寫數(shù)字*/
void LCD12864_Write_Number(uint8_t com,uint8_t num)
{
	const uint8_t number[] = {"0123456789"};
	LCD12864_Write_CMD_Data(CMD,com);					//寫地址
	
	LCD12864_Write_CMD_Data(DAT,number[num/1000]);		//1234 1
	LCD12864_Write_CMD_Data(DAT,number[num%1000/100]);	//1234 2
	LCD12864_Write_CMD_Data(DAT,number[num%100/10]);	//1234 3
	LCD12864_Write_CMD_Data(DAT,number[num%100%10]);	//1234 4
}

main.c文章來源地址http://www.zghlxwxcb.cn/news/detail-447824.html

#include "stm32f10x.h"   // Device header
#include "lcd12864.h"
#include "Delay.h"

LCD_InitTypeDef LCD_InitStructure;

int main(void)
{
	LCD12864_UserConfig();		//LCD12864用戶配置初始化
	LCD12864_Write_Init();		//LCD12864流程初始化
	
	LCD_InitStructure.com = 0x80;	//0x80-0x87 16 8
	LCD_InitStructure.num =16;
	LCD_InitStructure.dat = (u8*)&"桃之夭夭灼灼其華";
	LCD12864_Write_Word(LCD_InitStructure);
	
	LCD_InitStructure.com = 0x90;	//0x90-0x97 16 8
	LCD_InitStructure.num =16;
	LCD_InitStructure.dat = (u8*)&"之子于歸宜其室家";
	LCD12864_Write_Word(LCD_InitStructure);
	
	LCD_InitStructure.com = 0x88;	//0x88-0x8F 16 8
	LCD_InitStructure.num =16;
	LCD_InitStructure.dat = (u8*)&"桃之夭夭有蕡其實";
	LCD12864_Write_Word(LCD_InitStructure);
	
	LCD_InitStructure.com = 0x98;	//0x98-0x9F 16 8
	LCD_InitStructure.num =16;
	LCD_InitStructure.dat = (u8*)&"之子于歸宜其家室";
	LCD12864_Write_Word(LCD_InitStructure);
	
	Delay_ms(500);	//等待500ms
	
	LCD12864_Write_CMD_Data(CMD,0x01);	//清屏
	while(1)
	{
		uint8_t i;
		for(i=0;i<200;i++)
		{
			LCD12864_Write_Number(0x90,i);		//第二行顯示動態(tài)的數(shù)字
			Delay_ms(200);
		}
	}
}

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

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

領支付寶紅包贊助服務器費用

相關文章

  • STM32-基本知識梳理10-FSMC控制ST7789V-LCD液晶顯示屏

    STM32-基本知識梳理10-FSMC控制ST7789V-LCD液晶顯示屏

    一、ST7789V-LCD液晶顯示 1,一種計算機的I/O設備,即輸入輸出設備; 2,數(shù)據(jù)傳遞結(jié)構(gòu),光線的傳遞通過偏光片進行調(diào)整,最終傳遞到濾光片上,進而不同RGB數(shù)據(jù)點,即像素點; 3, LCD顯示器的關鍵參數(shù) ①像素:顯示器的像素指它成像最小的點 ②分辨率:像素點的個數(shù)的乘積

    2024年02月12日
    瀏覽(21)
  • ESP32設備驅(qū)動-I2C-LCD1602顯示屏驅(qū)動

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

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

    2024年02月07日
    瀏覽(22)
  • STM32-OLED顯示屏

    *本文采用的OLED顯示屏為4針腳IIC顯示屏,4針腳分別為GND,VCC,SCL,SDA OLED.C OLED_Font.h main.c

    2024年02月05日
    瀏覽(23)
  • STM32——OLED顯示屏(4)

    STM32——OLED顯示屏(4)

    目錄 一、調(diào)試方式 二、OLED簡介 三、OLED硬件電路 四、OLED驅(qū)動函數(shù) 五、OLED顯示屏使用 1、硬件接線圖 2、添加OLED驅(qū)動函數(shù) 3、程序 4、實物展示 ?六、Keil軟件自帶調(diào)試模式 ????????對于單片機的編程而言,經(jīng)常會遇到一個很大的問題,就是程序調(diào)試,單片機不像電腦,電

    2024年02月03日
    瀏覽(24)
  • STM32 軟件IIC 控制OLED 顯示屏

    STM32 軟件IIC 控制OLED 顯示屏

    需要看原理圖了

    2024年02月09日
    瀏覽(22)
  • STM32學習記錄0010——TFTLCD液晶顯示屏

    STM32學習記錄0010——TFTLCD液晶顯示屏

    《STM32不完全手冊》第18章 《ILI9341數(shù)據(jù)手冊》 TFT-LCD 即薄膜晶體管液晶顯示器。其英文全稱為:Thin Film Transistor-Liquid Crystal Display。TFT-LCD與無源 TN-LCD、STN-LCD 的簡單矩陣不同,它在液晶顯示屏的每一個象素上都設置有一個薄膜晶體管(TFT),可有效地克服非選通時的串擾,使

    2023年04月09日
    瀏覽(29)
  • 【STM32】SPI通訊控制ILI9341顯示屏

    【STM32】SPI通訊控制ILI9341顯示屏

    ILI9341是一款分辨率為 240x320 分辨率 的a- tft液晶顯示單片SOC驅(qū)動,由720通道源驅(qū)動、320通道門驅(qū)動、 172800字節(jié)GRAM (240RGBx320點位圖形顯示數(shù)據(jù))和電源電路組成。 ILI9341支持并行8-/9-/16-/18位數(shù)據(jù)總線MCU接口,6-/16-/18位數(shù)據(jù)總線RGB接口和3 /4線串行外圍接口 SPI通訊 。通過窗口地址函

    2024年01月21日
    瀏覽(24)
  • STM32F103驅(qū)動oled顯示屏

    STM32F103驅(qū)動oled顯示屏

    oled顯示屏和其他顯示屏類似,不過他只有0.96英寸,屏幕較小,但是使用起來比較方便。有二種驅(qū)動方式,分別為IIC,和SPI驅(qū)動。驅(qū)動方式比較簡單。IIC驅(qū)動的話只需要4根線,電源,地線,數(shù)據(jù)線,和時鐘線。 我這里使用的是IIC協(xié)議驅(qū)動oled顯示屏,如果想了解IIC協(xié)議的可以看

    2024年02月11日
    瀏覽(40)
  • FPGA實現(xiàn)LCD顯示屏顯示彩條

    FPGA實現(xiàn)LCD顯示屏顯示彩條

    目錄 總體設計 ?讀顯示屏ID ?讀顯示屏ID代碼 時鐘分頻 ?時鐘分頻代碼 ?LCD顯示 lcd顯示模塊 LCD驅(qū)動模塊 lcd驅(qū)動代碼 頂層模塊 頂層模塊代碼 系統(tǒng)總體分為五個模塊,分別是:rd_id(讀顯示屏ID模塊),clk_div(時鐘分頻模塊),lcd_display(lcd屏顯示模塊),lcd_driver(lcd屏驅(qū)動模塊),和頂

    2024年02月16日
    瀏覽(24)
  • 5、江科大stm32視頻學習筆記——OLED顯示屏

    5、江科大stm32視頻學習筆記——OLED顯示屏

    目錄 1、OLED簡介? 2、OLED硬件電路 3、OLED驅(qū)動函函數(shù)簡介和應用 4、用keil進行調(diào)試 4引腳OLED SCL和SDA是I2C通信引腳,需要接在I2C通信的引腳上 實驗中用的模塊是GPIO口模擬的I2C通信,故SCL和SDA兩個端口可以接在任意的GPIO口上 7引腳OLED 右邊5個引腳是SPI通信協(xié)議的引腳 如果是GPI

    2024年02月14日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包