欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于STM32驅動LCD1602引腳不連續的問題
[打印本頁]
作者:
759李東樾
時間:
2020-4-26 16:26
標題:
關于STM32驅動LCD1602引腳不連續的問題
設計電路圖時,將LCD1602的D0-D3接在了PC8-PC11,將D4-D7接在了PB4-PB7上,要怎么樣驅動LCD呢?麻煩各位大佬給點指點,我初學STM32,最好是給點程序。
作者:
51hei團團
時間:
2020-4-26 21:10
了解一下C語言位域(位段)概念,可以解決這個問題
作者:
JFSN
時間:
2020-4-26 21:40
#include "bsp-lcd1602.h"
void LCD1602_GPIO_Config(void)
{
RCC_APB2PeriphClockCmd(LCD1602_CLK, ENABLE);
GPIO_InitTypeDef LCD1602_GPIOStruct;
LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_PP;
LCD1602_GPIOStruct.GPIO_Speed = GPIO_Speed_10MHz;
LCD1602_GPIOStruct.GPIO_Pin = LCD1602_E | LCD1602_RS | LCD1602_RW ;
GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_OD;
LCD1602_GPIOStruct.GPIO_Pin = DB0 | DB1 | DB2 |DB3 | DB4 | DB5|
DB6 | DB7 ; //設置為開漏輸出
GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
}
void LCD1602_WaitReady(void) //檢測忙狀態
{
uint8_t sta;
GPIOB->ODR =0x00FF;
RSO(0);
RWO(1);
EO(1);
SysTick_Delay_Us(1);
do{
sta=GPIO_ReadInputDataBit(LCD1602_GPIO_PORT,GPIO_Pin_7);
EO(0);
}while(sta);
}
void LCD1602_WriteCmd(uint8_t cmd) //寫指令
{
LCD1602_WaitReady();
RSO(0);
RWO(0);
EO(0);
SysTick_Delay_Us(1);
EO(1);
LCD1602_GPIO_PORT->ODR &= (cmd|0xFF00);
EO(0);
SysTick_Delay_Us(400);
}
void LCD1602_WriteDat(uint8_t dat) //寫數據
{
LCD1602_WaitReady();
RSO(1);
RWO(0);
SysTick_Delay_Us(30);
EO(1);
LCD1602_GPIO_PORT->ODR &=(dat|0xFF00);
EO(0);
SysTick_Delay_Us(400);
}
void LCD1602_SetCursor(uint8_t x, uint8_t y)
{
uint8_t addr;
if (y == 0) //由輸入的屏幕坐標計算顯示RAM的地址
addr = 0x00 + x; //第一行字符地址從0x00起始
else
addr = 0x40 + x; //第二行字符地址從0x40起始
LCD1602_WriteCmd(addr|0x80); //設置RAM地址
}
void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str, uint8_t len)
{
LCD1602_SetCursor(x, y); //設置起始地址
while (len--) //連續寫入len個字符數據
{
LCD1602_WriteDat(*str++);
}
}
void LCD1602_Init(void)
{
LCD1602_GPIO_Config(); //開啟GPIO口
LCD1602_WriteCmd(0X38); //16*2顯示,5*7點陣,8位數據接口
LCD1602_WriteCmd(0x0C); //顯示器開,光標關閉
LCD1602_WriteCmd(0x06); //文字不動,地址自動+1
LCD1602_WriteCmd(0x01); //清屏
}
#ifndef _BSP_LCD1602_H
#define _BSP_LCD1602_H
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "bsp_SysTick.h"
#define LCD1602_CLK RCC_APB2Periph_GPIOB
#define LCD1602_GPIO_PORT GPIOB
#define LCD1602_E GPIO_Pin_10 //定義使能引腳
#define LCD1602_RW GPIO_Pin_11 //定義讀寫引腳
#define LCD1602_RS GPIO_Pin_12 //定義數據、命名引腳
#define EO(X) X? (GPIO_SetBits(LCD1602_GPIO_PORT,LCD1602_E)):(GPIO_ResetBits(LCD1602_GPIO_PORT,LCD1602_E))
#define RWO(X) X? (GPIO_SetBits(LCD1602_GPIO_PORT,LCD1602_RW)):(GPIO_ResetBits(LCD1602_GPIO_PORT,LCD1602_RW))
#define RSO(X) X? (GPIO_SetBits(LCD1602_GPIO_PORT,LCD1602_RS)):(GPIO_ResetBits(LCD1602_GPIO_PORT,LCD1602_RS))
//只能是某個GPIO口的低八位
#define DB0 GPIO_Pin_0
#define DB1 GPIO_Pin_1
#define DB2 GPIO_Pin_2
#define DB3 GPIO_Pin_3
#define DB4 GPIO_Pin_4
#define DB5 GPIO_Pin_5
#define DB6 GPIO_Pin_6
#define DB7 GPIO_Pin_7
void LCD1602_Init(void); //初始化LCD602;
void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str,uint8_t len);
#endif //_BSP_LCD1602_H
這是.c和.h文件對應I/O口改一下就可以了
作者:
f556
時間:
2020-4-27 00:30
非要用并口嗎?1602極小的數據量,串口輕松搞定。1602本身就不是好的顯示。12864或乾12832比1602好的多。我的1602試驗完就丟一邊了。
樓上說的正解,就是取前4、后4位,再相或的方法。
作者:
hotpet
時間:
2020-4-27 03:18
可以4位寫入,只用D4-D7就可以了。
作者:
51hei團團
時間:
2020-4-27 14:56
2種解決方案如下:
http://www.raoushi.com/bbs/dpj-183792-1.html
http://www.raoushi.com/bbs/dpj-186137-1.html
作者:
jiangyan111
時間:
2020-4-27 16:43
段位操作,可以找個例程參考一下,直接用人家的代碼先驅動起來再說,先亮起來再說,然后再看代碼
作者:
123456789lrs
時間:
2020-5-5 16:51
JFSN 發表于 2020-4-26 21:40
#include "bsp-lcd1602.h"
void LCD1602_GPIO_Config(void)
{
為什么我按照你的改了之后亂碼顯示
作者:
nokiagx
時間:
2022-12-10 16:22
JFSN 發表于 2020-4-26 21:40
#include "bsp-lcd1602.h"
void LCD1602_GPIO_Config(void)
{
你這個是連續引腳,別人問的是不連續引腳
作者:
三極管一樣的人
時間:
2024-12-19 08:52
翻老帖,網上這類解答真少,好不容易找打一個,沒明確答案~
作者:
rayin
時間:
2024-12-23 08:01
單片機可以用iicPCF8547T芯片驅動1602, 可以節省IO端口, 詳見
http://www.raoushi.com/bbs/dpj-177486-1.html
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1