平时我们使用lcd1602显示屏显示很少的数据,但是屏幕接线却非常多,有点浪费IO资源。

然后我们就来整一个595驱动1602

接线方法
83.png
使用的是1602的4线模式这样1个595就够了

595_1602.h

#include "main.h"
#include "stm32l0xx_hal.h"


#define sdi(x)  HAL_GPIO_WritePin(SDI_GPIO_Port,SDI_Pin,x)
#define laod(x) HAL_GPIO_WritePin(LAOD_GPIO_Port,LAOD_Pin,x)
#define sclk(x) HAL_GPIO_WritePin(SCLK_GPIO_Port,SCLK_Pin,x)

#define lcd_e 0x40            //接到595输出端的第n位是x
#define lcd_rw 0x20
#define lcd_rs 0x10

void LCD1602_Init(void);
void LCD1602_Show_Str(char y, char x, char *str);

595_1602.c

#include "595_1602.h"

void send595(char a)
{
    char b,c;
    c=a;

    for(b=0;b<8;b++)
    {

        if((c<>4;
    a=b&0x0f;
    a|=lcd_e;
    send595(a);
    a&=~lcd_e;
    send595(a);

    b=cmd;
    a=b&0x0f;
    a|=lcd_e;
    send595(a);
    a&=~lcd_e;
    send595(a);    
}
void LCD1602_Write_Dat(char dat)
{
    char a,b;
    b=dat>>4;
    a=b&0x0f;
    a|=lcd_e;
    a|=lcd_rs;
    send595(a);
    a&=~lcd_e;
    send595(a);

    b=dat;
    a=b&0x0f;
    a|=lcd_e;
    a|=lcd_rs;
    send595(a);
    a&=~lcd_e;
    send595(a);    
}


void LCD1602_Init(void)
{
    send595(0);
    HAL_Delay(100); 
    LCD1602_Write_Cmd(0x28);    
    HAL_Delay(100); 
    LCD1602_Write_Cmd(0x0C);    
    LCD1602_Write_Cmd(0x06);    
    LCD1602_Write_Cmd(0x01);    
    HAL_Delay(100); 
}

void LCD1602_Set_Cursor(char x, char y)
{
    char addr;

    if (y == 0)
        addr = 0x00 + x;
    else
        addr = 0x40 + x;
    LCD1602_Write_Cmd(addr | 0x80);
}

void LCD1602_Show_Str(char y, char x, char *str)
{
    LCD1602_Set_Cursor(x, y);
    while(*str != '')
    {
        LCD1602_Write_Dat(*str++);
    }
}
最后修改:2020 年 06 月 28 日 03 : 54 PM
声明:无闻风博客|版权所有,违者必究|如未注明,均为原创| 转载:转载请注明原文链接