首页 资讯 论坛 我的社区 搜索 用户

[HAL库]使用ne595驱动lcd1602

无闻风
发表于 2019-07-26 13:45:57
0
686

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

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

接线方法

使用的是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++); } }

最后修改 2019-07-26 13:45:57
0
686
用户评论
一起折腾