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

STM32—LCD1602

這篇具有很好參考價(jià)值的文章主要介紹了STM32—LCD1602。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

LCD1602(Liquid Crystal Display)是一種工業(yè)字符型液晶,能夠同時(shí)顯示 16×02 即 32 字符(16列兩行)
STM32—LCD1602

第 1 腳: VSS 為電源地

第 2 腳: VDD 接 5V 正電源

第 3 腳: VL 為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度 過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)
10K 的電位器調(diào)整對(duì)比度。

第 4 腳:RS 為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。

第 5 腳:R/W 為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng) RS 和 R/W 共 同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS 為低電平 R/W 為高電平時(shí)可以讀忙信號(hào), 當(dāng) RS 為高電平 R/W 為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。

第 6 腳:E 端為使能端,當(dāng) E 端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。

第 7-14 腳:D0~D7 為 8 位雙向數(shù)據(jù)線。

第 15 腳:背光源正極。

第 16 腳:背光源負(fù)極。

STM32—LCD1602
STM32—LCD1602
開(kāi)發(fā)邏輯

  • 在哪顯示

STM32—LCD1602
例如第二行第一個(gè)字符的地址是 40H,那么是否直接寫(xiě)入 40H 就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷?xiě)入顯示地址時(shí)要求最高位 D7 恒定為高電平 1 所以實(shí)際寫(xiě)入的數(shù)據(jù)應(yīng)該是 01000000B(40H) +10000000B(80H)=11000000B(C0H)

  • 顯示什么
    STM32—LCD1602
    讀寫(xiě)操作時(shí)序
    讀操作
    STM32—LCD1602
    檢測(cè)忙信號(hào)的時(shí)候需要讀時(shí)序
/*當(dāng) RS 為低電平 R/W 為高電平時(shí)可以讀忙信號(hào)讀忙信號(hào)和光標(biāo)地址。
BF(bit7):為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),
如果為低電平表示不忙。
*/

void check_busy()//檢測(cè)忙信號(hào)
{
	char tmp = 0x80;
	dataBuff = 0x80;
	while(tmp & 0x80){//檢測(cè)BF,1忙 0閑
	
	RS = 0;
	RW = 1;
	
	EN = 0;
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	tmp = dataBuff; 
	_nop_();
	EN = 0;
	_nop_();
	}
}

寫(xiě)操作STM32—LCD1602
數(shù)序參數(shù)STM32—LCD1602

/*
RS 為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。

*/
void Write_Cmd_Func(char cmd)
{
	check_busy();
	RS = 0;
	RW = 0;
	
	EN = 0;
	_nop_();
	
	dataBuff = cmd;
	_nop_();
	
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
	
}

void Write_Data_Func(char dataShow)
{
	check_busy();
	RS = 1;
	RW = 0;
	
	EN = 0;
	_nop_();
	
	dataBuff = dataShow;
	_nop_();
	
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
}

LCD1602的初始化函數(shù)

void LCD1602_INIT()
{
 //(1)延時(shí) 15ms

 Delay15ms();

//(2)寫(xiě)指令 38H(不檢測(cè)忙信號(hào)) 

 Write_Cmd_Func(0x38);

//(3)延時(shí) 5ms

 Delay5ms();

//(4)以后每次寫(xiě)指令,讀/寫(xiě)數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)
	check_busy();

//(5)寫(xiě)指令 38H:顯示模式設(shè)置

 Write_Cmd_Func(0x38);

//(6)寫(xiě)指令 08H:顯示關(guān)閉

 Write_Cmd_Func(0x08);

//(7)寫(xiě)指令 01H:顯示清屏

 Write_Cmd_Func(0x01);

//(8)寫(xiě)指令 06H:顯示光標(biāo)移動(dòng)設(shè)置

 Write_Cmd_Func(0x06);

//(9)寫(xiě)指令 0CH:顯示開(kāi)及光標(biāo)設(shè)置}

 Write_Cmd_Func(0x0c);
}

C51實(shí)驗(yàn)顯示:hello world

#include "reg52.h"
#include "intrins.h"

#define dataBuff P0

sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;

/*當(dāng) RS 為低電平 R/W 為高電平時(shí)可以讀忙信號(hào)讀忙信號(hào)和光標(biāo)地址。
BF(bit7):為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),
如果為低電平表示不忙。
*/

void check_busy()//檢測(cè)忙信號(hào)
{
	char tmp = 0x80;
	dataBuff = 0x80;
	while(tmp & 0x80){//檢測(cè)BF,1忙 0閑
	
	RS = 0;
	RW = 1;
	
	EN = 0;
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	tmp = dataBuff; 
	_nop_();
	EN = 0;
	_nop_();
	}
}

/*
RS 為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。

*/
void Write_Cmd_Func(char cmd)
{
	check_busy();
	RS = 0;
	RW = 0;
	
	EN = 0;
	_nop_();
	
	dataBuff = cmd;
	_nop_();
	
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
	
}

void Write_Data_Func(char dataShow)
{
	check_busy();
	RS = 1;
	RW = 0;
	
	EN = 0;
	_nop_();
	
	dataBuff = dataShow;
	_nop_();
	
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
}


void Delay5ms() //@11.0592MHz

{
 unsigned char i, j;
 i = 9;
 j = 244;
 do

 {
 while (--j);
 } while (--i);
}

void Delay15ms() //@11.0592MHz

{
 unsigned char i, j;
 i = 27;
 j = 226;
 do

 {
 while (--j);
 } while (--i);
}


void LCD1602_INIT()
{
 //(1)延時(shí) 15ms

 Delay15ms();

//(2)寫(xiě)指令 38H(不檢測(cè)忙信號(hào)) 

 Write_Cmd_Func(0x38);

//(3)延時(shí) 5ms

 Delay5ms();

//(4)以后每次寫(xiě)指令,讀/寫(xiě)數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)
	check_busy();

//(5)寫(xiě)指令 38H:顯示模式設(shè)置

 Write_Cmd_Func(0x38);

//(6)寫(xiě)指令 08H:顯示關(guān)閉

 Write_Cmd_Func(0x08);

//(7)寫(xiě)指令 01H:顯示清屏

 Write_Cmd_Func(0x01);

//(8)寫(xiě)指令 06H:顯示光標(biāo)移動(dòng)設(shè)置

 Write_Cmd_Func(0x06);

//(9)寫(xiě)指令 0CH:顯示開(kāi)及光標(biāo)設(shè)置}

 Write_Cmd_Func(0x0c);
}

void lcd1602_Show_line(int row,int col,char *SendData)
{
	switch(row){
		case 1:
						Write_Cmd_Func(0x80+col);
					while(*SendData){
						Write_Data_Func(*SendData);
						SendData++;
					}
					break;
		
		case 2:
					Write_Cmd_Func(0x80+0x40+col);
					while(*SendData){
						Write_Data_Func(*SendData);
						SendData++;
					}
					break;
		
	}
	
}

void main()
{
	LCD1602_INIT();
	
	lcd1602_Show_line(1,3,"hello world");

	

}

STM32HAL庫(kù)

RS、RW、EN三根信號(hào)線經(jīng)常需要進(jìn)行拉高/拉低操作,可以進(jìn)行封裝

#define RS_GPIO_Port GPIOB
#define RW_GPIO_Port GPIOB
#define EN_GPIO_Port GPIOB
#define RS_Pin GPIO_PIN_1
#define RW_Pin GPIO_PIN_2
#define EN_Pin GPIO_PIN_10

#define RS_HIGH HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_SET)

#define RS_LOW HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_RESET)

#define RW_HIGH HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, GPIO_PIN_SET)

#define RW_LOW HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, GPIO_PIN_RESET)

#define EN_HIGH HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET)

#define EN_LOW HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET)

如何將一個(gè)字節(jié)的數(shù)據(jù)按位一次性發(fā)送到GPIOA的8個(gè)管腳?

GPIOA->ODR = cmd;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440070.html

#define RS_GPIO_Port GPIOB
#define RW_GPIO_Port GPIOB
#define EN_GPIO_Port GPIOB
#define RS_Pin GPIO_PIN_1
#define RW_Pin GPIO_PIN_2
#define EN_Pin GPIO_PIN_10
#define RS_HIGH HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_SET)

#define RS_LOW HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_RESET)

#define RW_HIGH HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, GPIO_PIN_SET)

#define RW_LOW HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, GPIO_PIN_RESET)

#define EN_HIGH HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET)

#define EN_LOW HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET)

void Write_Cmd_Func(uint8_t cmd)
{

 RS_LOW;

 RW_LOW;

 EN_LOW;

 GPIOA->ODR = cmd;

 HAL_Delay(5);

 EN_HIGH;

 HAL_Delay(5);

 EN_LOW;
}

void Write_Data_Func(uint8_t dataShow)
{

 RS_HIGH;

 RW_LOW;

 EN_LOW;

 GPIOA->ODR = dataShow;

 HAL_Delay(5);

 EN_HIGH;

 HAL_Delay(5);

 EN_LOW;
}

void LCD1602_INIT(void)
{

//(1)延時(shí) 15ms

 HAL_Delay(15);

//(2)寫(xiě)指令 38H(不檢測(cè)忙信號(hào)) 

 Write_Cmd_Func(0x38);

//(3)延時(shí) 5ms

 HAL_Delay(5);

//(4)以后每次寫(xiě)指令,讀/寫(xiě)數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)

//(5)寫(xiě)指令 38H:顯示模式設(shè)置

 Write_Cmd_Func(0x38);

//(6)寫(xiě)指令 08H:顯示關(guān)閉
 Write_Cmd_Func(0x08);

//(7)寫(xiě)指令 01H:顯示清屏

 Write_Cmd_Func(0x01);

//(8)寫(xiě)指令 06H:顯示光標(biāo)移動(dòng)設(shè)置

 Write_Cmd_Func(0x06);

//(9)寫(xiě)指令 0CH:顯示開(kāi)及光標(biāo)設(shè)置}

 Write_Cmd_Func(0x0c);
}

void LCD1602_showLine(char row, char col, char *string)
{

 switch(row){

 case 1:

 Write_Cmd_Func(0x80+col);

 while(*string){

 Write_Data_Func(*string);

 string++;

 }

 break;

 case 2:

 Write_Cmd_Func(0x80+0x40+col);

 while(*string){

 Write_Data_Func(*string);

 string++;

 }

 break;

 }
}

main函數(shù)里:

 //char position = 0x80 + 0x05;

 //char dataShow = 'C';

 LCD1602_INIT();

 //Write_Cmd_Func(position);//選擇要顯示的地址

 //Write_Data_Func(dataShow);//發(fā)送要顯示的字符

 LCD1602_showLine(1,5,"hello world");

到了這里,關(guān)于STM32—LCD1602的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • stm32項(xiàng)目之DHT11溫濕度顯示(LCD1602)

    stm32項(xiàng)目之DHT11溫濕度顯示(LCD1602)

    掌握LCD1602的使用 掌握DHT11的原理及使用 看懂LCD1602和DHT11時(shí)序圖 看懂DHT11的原理 掌握LCD1602的顯示 編寫(xiě)程序用LCD1602顯示溫濕度 DHT11部分: DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次 通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說(shuō)明,當(dāng)

    2024年02月02日
    瀏覽(28)
  • STM32F103C8T6驅(qū)動(dòng)LCD1602液晶篇

    1 電路連接 LCD1602有5V供電和3.3V供電,此次采用3.3V供電。 LCD1602共有16個(gè)引腳,不做一一介紹,其中主要的是第3引腳,3.3V背光電源供電時(shí),接100-1K電阻,5V供電時(shí),接2k-4.7k電阻。其余正常連接就行。 2 遇到的問(wèn)題 2.1 液晶不顯示 仿真驗(yàn)證時(shí)可以顯示的,但是實(shí)物連接后還是不

    2024年02月07日
    瀏覽(25)
  • STM32F103系列 Proteus仿真 4*4矩陣鍵盤(pán) 串口+LCD1602顯示

    STM32F103系列 Proteus仿真 4*4矩陣鍵盤(pán) 串口+LCD1602顯示

    ????????最近一直在肝STM32系列芯片,這里我想要檢驗(yàn)一下自己的初步學(xué)習(xí)成果,簡(jiǎn)單的運(yùn)用一下IO口的配置,代碼使用正點(diǎn)的庫(kù)函數(shù)模板寫(xiě)的,仿真軟件是Proteus 8.13,代碼編寫(xiě)編譯軟件是Keil MDK5,仿真芯片是STM32F103R6小容量芯片。 目錄 一、硬件設(shè)計(jì) ?二、軟件設(shè)計(jì) 1、L

    2024年02月03日
    瀏覽(18)
  • STM32單片機(jī)直流電機(jī)PID速度控制正反轉(zhuǎn)控制(霍爾磁鐵測(cè)速)LCD1602
  • 一文讀懂使用STM32驅(qū)動(dòng) LCD1602 液晶顯示屏(基于Mbed Studio平臺(tái))

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

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

    2024年02月05日
    瀏覽(26)
  • ESP32設(shè)備驅(qū)動(dòng)-I2C-LCD1602顯示屏驅(qū)動(dòng)

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

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

    2024年02月07日
    瀏覽(22)
  • 【stm32】使用STM32與LCD屏幕進(jìn)行通信

    STM32芯片廣泛應(yīng)用于各種嵌入式系統(tǒng)中,其中包括液晶顯示器。本文將介紹如何使用STM32與LCD屏幕進(jìn)行通信,并提供相關(guān)的代碼示例。 液晶顯示器(LCD)是一種數(shù)字顯示技術(shù),它通過(guò)在液晶屏幕上加電來(lái)控制液晶的偏振方向和透光度,從而顯示圖像和文字。LCD屏幕通常由多個(gè)

    2024年02月13日
    瀏覽(43)
  • 單片機(jī)——LCD1602

    單片機(jī)——LCD1602

    1.基礎(chǔ)知識(shí)介紹 1.1、為什么叫1602 因?yàn)榭梢燥@示兩行,一行16個(gè) 1.2、LCD1602管腳認(rèn)識(shí) 編號(hào) 符號(hào) 引腳說(shuō)明 1 VSS 電源地 2 VDD 電源正極 3 VEE 液晶顯示偏壓信號(hào) 4 RS 數(shù)據(jù)/命令選擇(H/L) 5 R/W 讀/寫(xiě)選擇(H/L) 6 E 使能端 7 D0 數(shù)據(jù) 8 D1 數(shù)據(jù) 9 D2 數(shù)據(jù) 10 D3 數(shù)據(jù) 11 D4 數(shù)據(jù) 12 D5 數(shù)據(jù) 13 D6 數(shù)

    2024年02月07日
    瀏覽(19)
  • 液晶LCD1602使用介紹

    液晶LCD1602使用介紹

    液晶LCD1602簡(jiǎn)介 ? ? ? LCD1602 液晶也叫1602字符型液晶模塊,LCD1602液晶是一種專(zhuān)門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)的點(diǎn)陣型液晶模塊。LCD1602液晶是由若干個(gè)5x7點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符(包括字母、數(shù)字、符號(hào)),一共可以顯示16x2個(gè)字符 。LCD1602液晶的每

    2024年01月16日
    瀏覽(15)
  • 【STM32】LCD液晶顯示

    【STM32】LCD液晶顯示

    ??作者:一只大喵咪1201 ??專(zhuān)欄:《STM32學(xué)習(xí)》 ??格言: 你只管努力,剩下的交給時(shí)間! 顯示器屬于計(jì)算機(jī)的 I/O 設(shè)備,即輸入輸出設(shè)備。它是一種將特定電子信息輸出到屏幕上再反射到人眼的顯示工具。常見(jiàn)的有 CRT 顯示器、液晶顯示器、 LED 點(diǎn)陣顯示器及 OLED 顯示器。本

    2024年02月03日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包