久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4360|回復: 10
打印 上一主題 下一主題
收起左側

關于STM32驅動LCD1602引腳不連續的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:428871 發表于 2020-4-26 16:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
設計電路圖時,將LCD1602的D0-D3接在了PC8-PC11,將D4-D7接在了PB4-PB7上,要怎么樣驅動LCD呢?麻煩各位大佬給點指點,我初學STM32,最好是給點程序。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-4-26 21:10 | 只看該作者
了解一下C語言位域(位段)概念,可以解決這個問題
回復

使用道具 舉報

板凳
ID:726709 發表于 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口改一下就可以了
回復

使用道具 舉報

地板
ID:282850 發表于 2020-4-27 00:30 | 只看該作者
非要用并口嗎?1602極小的數據量,串口輕松搞定。1602本身就不是好的顯示。12864或乾12832比1602好的多。我的1602試驗完就丟一邊了。
樓上說的正解,就是取前4、后4位,再相或的方法。
回復

使用道具 舉報

5#
ID:732506 發表于 2020-4-27 03:18 | 只看該作者
可以4位寫入,只用D4-D7就可以了。
回復

使用道具 舉報

6#
ID:328014 發表于 2020-4-27 14:56 | 只看該作者
回復

使用道具 舉報

7#
ID:739441 發表于 2020-4-27 16:43 | 只看該作者
段位操作,可以找個例程參考一下,直接用人家的代碼先驅動起來再說,先亮起來再說,然后再看代碼
回復

使用道具 舉報

8#
ID:446064 發表于 2020-5-5 16:51 | 只看該作者
JFSN 發表于 2020-4-26 21:40
#include "bsp-lcd1602.h"
void LCD1602_GPIO_Config(void)
{

為什么我按照你的改了之后亂碼顯示
回復

使用道具 舉報

9#
ID:152816 發表于 2022-12-10 16:22 | 只看該作者
JFSN 發表于 2020-4-26 21:40
#include "bsp-lcd1602.h"
void LCD1602_GPIO_Config(void)
{

你這個是連續引腳,別人問的是不連續引腳
回復

使用道具 舉報

10#
ID:53813 發表于 2024-12-19 08:52 | 只看該作者
翻老帖,網上這類解答真少,好不容易找打一個,沒明確答案~
回復

使用道具 舉報

11#
ID:517951 發表于 2024-12-23 08:01 | 只看該作者
單片機可以用iicPCF8547T芯片驅動1602, 可以節省IO端口, 詳見  http://www.zg4o1577.cn/bbs/dpj-177486-1.html
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 碰碰视频 | 日韩中文字幕免费 | 久久99这里只有精品 | 国产精品美女久久久久 | 久草99| 羞羞视频网站免费观看 | 日批免费看 | 每日更新av | 国产精品一区二区在线观看 | 中文字幕四虎 | 国产美女在线精品免费 | 99小视频| 欧美a级成人淫片免费看 | 欧美性猛交一区二区三区精品 | 久久成人午夜 | 亚洲精品一二区 | 夜久久 | 成人免费观看男女羞羞视频 | 怡红院怡春院一级毛片 | 91精品国产91久久综合桃花 | 麻豆视频国产在线观看 | 国产精品日韩欧美一区二区三区 | 欧美日韩亚洲系列 | 黄色精品 | 国产精品视频网 | 亚洲精品一二区 | 综合国产 | 国产精品高潮呻吟久久av野狼 | 青青操av | 99精品在线观看 | 最新中文字幕 | 国产中文一区二区三区 | 天天躁日日躁狠狠躁2018小说 | 1204国产成人精品视频 | 国产一区二区三区四区在线观看 | 成人性视频免费网站 | 色婷婷一区二区三区四区 | jlzzjlzz欧美大全 | 狠狠的干狠狠的操 | 国产精品99久久久久久人 | 激情欧美一区二区三区中文字幕 |