久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32與LCD1602連接GPIO_Mode配置用什么方式
[打印本頁]
作者:
lmn2005
時間:
2015-3-27 10:38
標題:
STM32與LCD1602連接GPIO_Mode配置用什么方式
請教:大家在處理STM32與LCD1602連接時,GPIO_Mode配置用什么方式?用什么方式較安全?還有,LCD1602為5V的,可以直接相連嗎?
作者:
popo119
時間:
2015-4-25 21:12
不知道!!我也在學習!!
作者:
liaolinhui
時間:
2015-4-26 02:51
最好使用開漏輸出
作者:
逍遙l天
時間:
2017-8-25 16:47
連接有圖片嗎?
作者:
zhouwentao
時間:
2017-8-26 16:29
1602是什么接口的,I2C嗎
作者:
lmn2005
時間:
2023-1-4 09:28
zhouwentao 發表于 2017-8-26 16:29
**** 作者被禁止或刪除 內容自動屏蔽 ****
I2C或并口
作者:
hi等你
時間:
2023-1-4 10:24
1602液晶屏原生是沒有i2c接口的,有也是用串轉并芯片實現的,如果用并口的話還是用傳統弱上拉模式,要么上拉高電平,要么拉低低電平。開漏模式就是懸空高阻抗容易受干擾
作者:
coody_sz
時間:
2023-1-4 11:09
開漏+上拉。
作者:
阮佳冰
時間:
2023-1-7 12:47
#ifndef _LCD1602_H #define _LCD1602_H #include “LCD1602.H” //============================端口位清除寄存器==============================================// #define LCD1602_RS0 GPIOE-》BRR = 0x00000004 //低電平 PE.2 #define LCD1602_RW0 GPIOE-》BRR = 0x00000010 //低電平 PE.4 #define LCD1602_EN0 GPIOE-》BRR = 0x00000040 //低電平 PE.6 //============================端口位設置/清除寄存器=========================================// #define LCD1602_RS1 GPIOE-》BSRR = 0x00000004 //高電平 PE.2 #define LCD1602_RW1 GPIOE-》BSRR = 0x00000010 //高電平 PE.4 #define LCD1602_EN1 GPIOE-》BSRR = 0x00000040 //高電平 PE.4 #define DATA_OUT GPIOD-》ODR//數據端口 PB0-PB7 //==========================================================================================// //單片機系統時鐘在72MHZ下的延時 void Delay_us(unsigned long CountLing) { signed char i; while(CountLing--) { i = 10; while(i--); } } //==========================================================================================// //LCD1602液晶讀忙狀態 void LCD_FBUF(void) { LCD1602_RS0; //RS信號拉低 LCD1602_RW1; //RW信號拉高 LCD1602_EN1;//EN信號拉高 DATA_OUT = 0xFF; //數據端口 11111111全高電平 while((DATA_OUT & 0x80) == 0x80); //判斷數據端口PB7 是否一直高 LCD1602_RW1;//RW信號拉高 LCD1602_EN0; //EN信號拉低 } //==========================================================================================// //LCD1602寫指令子函數 void Write_LCD1602_InstrucTIon_Com(unsigned char Com) { LCD_FBUF(); //讀忙狀態 LCD1602_RS0; //RS信號拉低寫指令 LCD1602_RW0; //RW信號拉低 LCD1602_EN0; //EN信號拉低 DATA_OUT = Com; //數據端口指令輸入 Delay_us(340); //延時1ms LCD1602_EN1; //EN信號一個高脈沖 Delay_us(340); //延時1ms LCD1602_EN0; } //==========================================================================================// //LCD1602寫數據子函數 void Write_LCD1602_InstrucTIon_Data(unsigned char Date) { LCD_FBUF(); //讀忙狀態 LCD1602_RS1; //RS信號拉高寫數據指令 LCD1602_RW0; LCD1602_EN0; //EN信號拉低 DATA_OUT = Date; //數據端口數據輸入 Delay_us(340); //延時1ms LCD1602_EN1; //EN信號一個高脈沖 Delay_us(340); //延時1ms LCD1602_EN0; } //==========================================================================================// //LCD1602寫指令和寫數據子函數 void Write_LCD1602_InstrucTIon_Com_Data(unsigned char CountLiey, unsigned char Date) { if(CountLiey == 0) //CountLiey == 0 寫指令 { Write_LCD1602_InstrucTIon_Com(Date); // 寫指令 } else //CountLiey !=0 寫數據 { Write_LCD1602_Instruction_Data(Date); //不等于0寫數據 } } //==========================================================================================// //LCD1602寫指令初始化子函數 void Init_LCD1602(void) { Write_LCD1602_Instruction_Com(0x38); //設置16×2顯示,5×7點陣,8位數據接口 Delay_us(6); //延時 200us Write_LCD1602_Instruction_Com(0x38); //設置16×2顯示,5×7點陣,8位數據接口 Delay_us(6); //延時 200us Write_LCD1602_Instruction_Com(0x0C); //設置打開顯示 Delay_us(6); //延時 200us Write_LCD1602_Instruction_Com(0x06); //讀或寫一個字符后地址指針加1 Delay_us(6); Write_LCD1602_Instruction_Com(0x01); //顯示清屏 Delay_us(6); } #endif //========================================END==================================================// #include “stm32f10x_lib.h” #include “LCD1602.H” //#include “DS18B20.H” typedef volatile unsigned char uint8; typedef volatile unsigned int uint16; typedef volatile unsigned long uint32; //==========================================================================================// //配置GPIO端口 void GPIO_InitStructReadtempCmd(void) { GPIO_InitTypeDef GPIO_InitStruct; //GPIOC端口初始化 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_4 | GPIO_Pin_6; // LCD1602 RS-RW-EN腳 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //開漏輸出 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //輸出速率50MHZ GPIO_Init(GPIOE, &GPIO_InitStruct); //GPIOE端口初始化 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |//數據腳 PB0-PB7 GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //開漏輸出 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //輸出速率50MHZ GPIO_Init(GPIOD, &GPIO_InitStruct); //GPIOD端口初始化 } //==========================================================================================// //配置GPIO外設時鐘 void RCC_APB2PeriphReadtempyCmd(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 開啟GPIOD外設時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); // 開啟GPIOE外設時鐘 } //==========================================================================================// //函數主題 int main(void) { RCC_APB2PeriphReadtempyCmd();//外設時鐘初始化 //注意外設初始化一定要在GPIO端口配置初始化前面 GPIO_InitStructReadtempCmd(); //GPIO端口配置初始化 while(1) { Write_LCD1602_Instruction_Com_Data(0, 0x80+4); //0是寫指令 Write_LCD1602_Instruction_Com_Data(1, ‘A’ ); //1是寫數據 } }
作者:
阮佳冰
時間:
2023-1-7 12:48
#ifndef _LCD1602_H
#define _LCD1602_H
#include “LCD1602.H”
//============================端口位清除寄存器==============================================//
#define LCD1602_RS0 GPIOE-》BRR = 0x00000004 //低電平 PE.2
#define LCD1602_RW0 GPIOE-》BRR = 0x00000010 //低電平 PE.4
#define LCD1602_EN0 GPIOE-》BRR = 0x00000040 //低電平 PE.6
//============================端口位設置/清除寄存器=========================================//
#define LCD1602_RS1 GPIOE-》BSRR = 0x00000004 //高電平 PE.2
#define LCD1602_RW1 GPIOE-》BSRR = 0x00000010 //高電平 PE.4
#define LCD1602_EN1 GPIOE-》BSRR = 0x00000040 //高電平 PE.4
#define DATA_OUT GPIOD-》ODR//數據端口 PB0-PB7
//==========================================================================================//
//單片機系統時鐘在72MHZ下的延時
void Delay_us(unsigned long CountLing)
{
signed char i;
while(CountLing--)
{
i = 10;
while(i--);
}
}
//==========================================================================================//
//LCD1602液晶讀忙狀態
void LCD_FBUF(void)
{
LCD1602_RS0; //RS信號拉低
LCD1602_RW1; //RW信號拉高
LCD1602_EN1;//EN信號拉高
DATA_OUT = 0xFF; //數據端口 11111111全高電平
while((DATA_OUT & 0x80) == 0x80); //判斷數據端口PB7 是否一直高
LCD1602_RW1;//RW信號拉高
LCD1602_EN0; //EN信號拉低
}
//==========================================================================================//
//LCD1602寫指令子函數
void Write_LCD1602_InstrucTIon_Com(unsigned char Com)
{
LCD_FBUF(); //讀忙狀態
LCD1602_RS0; //RS信號拉低寫指令
LCD1602_RW0; //RW信號拉低
LCD1602_EN0; //EN信號拉低
DATA_OUT = Com; //數據端口指令輸入
Delay_us(340); //延時1ms
LCD1602_EN1; //EN信號一個高脈沖
Delay_us(340); //延時1ms
LCD1602_EN0;
}
//==========================================================================================//
//LCD1602寫數據子函數
void Write_LCD1602_InstrucTIon_Data(unsigned char Date)
{
LCD_FBUF(); //讀忙狀態
LCD1602_RS1; //RS信號拉高寫數據指令
LCD1602_RW0;
LCD1602_EN0; //EN信號拉低
DATA_OUT = Date; //數據端口數據輸入
Delay_us(340); //延時1ms
LCD1602_EN1; //EN信號一個高脈沖
Delay_us(340); //延時1ms
LCD1602_EN0;
}
//==========================================================================================//
//LCD1602寫指令和寫數據子函數
void Write_LCD1602_InstrucTIon_Com_Data(unsigned char CountLiey, unsigned char Date)
{
if(CountLiey == 0) //CountLiey == 0 寫指令
{
Write_LCD1602_InstrucTIon_Com(Date); // 寫指令
}
else //CountLiey !=0 寫數據
{
Write_LCD1602_Instruction_Data(Date); //不等于0寫數據
}
}
//==========================================================================================//
//LCD1602寫指令初始化子函數
void Init_LCD1602(void)
{
Write_LCD1602_Instruction_Com(0x38); //設置16×2顯示,5×7點陣,8位數據接口
Delay_us(6); //延時 200us
Write_LCD1602_Instruction_Com(0x38); //設置16×2顯示,5×7點陣,8位數據接口
Delay_us(6); //延時 200us
Write_LCD1602_Instruction_Com(0x0C); //設置打開顯示
Delay_us(6); //延時 200us
Write_LCD1602_Instruction_Com(0x06); //讀或寫一個字符后地址指針加1
Delay_us(6);
Write_LCD1602_Instruction_Com(0x01); //顯示清屏
Delay_us(6);
}
#endif
//========================================END==================================================//
#include “stm32f10x_lib.h”
#include “LCD1602.H”
//#include “DS18B20.H”
typedef volatile unsigned char uint8;
typedef volatile unsigned int uint16;
typedef volatile unsigned long uint32;
//==========================================================================================//
//配置GPIO端口
void GPIO_InitStructReadtempCmd(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//GPIOC端口初始化
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_4 | GPIO_Pin_6; // LCD1602 RS-RW-EN腳
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //開漏輸出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //輸出速率50MHZ
GPIO_Init(GPIOE, &GPIO_InitStruct); //GPIOE端口初始化
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |//數據腳 PB0-PB7
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //開漏輸出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //輸出速率50MHZ
GPIO_Init(GPIOD, &GPIO_InitStruct); //GPIOD端口初始化
}
//==========================================================================================//
//配置GPIO外設時鐘
void RCC_APB2PeriphReadtempyCmd(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 開啟GPIOD外設時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); // 開啟GPIOE外設時鐘
}
//==========================================================================================//
//函數主題
int main(void)
{
RCC_APB2PeriphReadtempyCmd();//外設時鐘初始化 //注意外設初始化一定要在GPIO端口配置初始化前面
GPIO_InitStructReadtempCmd(); //GPIO端口配置初始化
while(1)
{
Write_LCD1602_Instruction_Com_Data(0, 0x80+4); //0是寫指令
Write_LCD1602_Instruction_Com_Data(1, ‘A’ ); //1是寫數據
}
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品一级毛片
|
欧美成人二区
|
国产精品精品视频一区二区三区
|
国内自拍视频在线观看
|
麻豆一区二区三区
|
日韩欧美一区二区三区
|
日本午夜精品一区二区三区
|
heyzo在线
|
亚洲精品日韩在线观看
|
三级成人在线
|
精品国产伦一区二区三区观看说明
|
毛片入口
|
亚洲欧美视频一区
|
大伊人久久
|
欧美亚洲综合久久
|
欧美综合久久久
|
国产在线一区二区三区
|
亚洲国产精品一区
|
国产精品久久久久久久久久久久
|
日韩欧美精品在线
|
久久精品欧美一区二区三区麻豆
|
一区二区三区在线
|
久久国产精品一区二区三区
|
成人一区av
|
免费色网址
|
久久久久久久久久久国产
|
日韩在线观看一区
|
欧美一级电影免费观看
|
国产一区2区
|
国产福利免费视频
|
日韩精品免费视频
|
黄网站涩免费蜜桃网站
|
国产精品精品视频一区二区三区
|
伊人天堂网
|
岛国av一区二区
|
亚洲精品乱码久久久久v最新版
|
精品视频999
|
日韩中文字幕在线免费
|
亚洲欧美中文日韩在线v日本
|
亚洲三区在线观看
|
欧美一级片在线看
|