HOME | Links | About | Read

树莓派连接lcd1602液晶屏幕(c语言版)

Table of Contents

前言

树莓派吃灰了将近一年,一直没配屏幕,最近入了一块1602液晶屏幕,用于显示一些简单的信息。网上有很多教程,大多是python的,这篇文章用C语言重新实现了一个最简单的“hello world”。

准备

除了树莓派之外,还需要准备

  • 焊好针脚的lcd1602
  • 若干母对公,母对母的杜邦线
  • 10k电位器
  • 面包板

连接方式可以参考 《打造增强型Raspberry Pi-液晶屏篇》1和《为树莓派3B添加LCD1602液晶屏》2。 接下来,安装wiringPi库,运行 gpio -v 验证是否安装正确,运行 gpio readall 可以查看所有gpio接口。 注意我们使用的是wpi编码方式

关于1602的介绍,网上有很多。这里使用的是4位传输模式,即一个字节分两次写入,先写高四位,再写低四位。

程序

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>

const int	pin_rs = 15;
const int	pin_e = 16;
//8位数据传输模式
//const int	pin_data[8] = {0, 1, 2, 3, 4, 5, 6, 7};
//4位数据传输模式
const int	pin_data[4] = {0, 1, 2, 3};//d4=17,d5=18,d6=27,d7=22

//写数据函数
void writebits(int bits,int rs_mode); 
void pluseEnable(void);
void lcdprint(char *ch);

int main(void){
	
	wiringPiSetup();

	printf("INPUT %d OUTPUT %d",INPUT,OUTPUT);

	//设定引脚为输出模式
	pinMode(pin_e, OUTPUT);
	pinMode(pin_rs, OUTPUT);
	for(int i=0; i<8; i++){
		pinMode(pin_data[i], OUTPUT);
	}
	writebits(0x33, 0); //先以8位传输 
	writebits(0x32, 0);
	writebits(0x28, 0); //4位数据传输模式
	//writebits(0x38, 0); //8位数据传输模式
	writebits(0x0c, 0); //不显示光标
	writebits(0x06, 0); //显示位置递增
	writebits(0x01, 0); //清空屏幕
	//delay(50);
	//writebits(0x80, 0);
	delayMicroseconds(1000);

	lcdprint("hello everyone");

	return 0;
}
void pluseEnable(void){
	//digitalWrite(pin_e, 0);
	//delayMicroseconds(1);
	digitalWrite(pin_e, 1);
	delayMicroseconds(1);
	digitalWrite(pin_e, 0);
}
void writebits(int bits, int rs_mode){
	delayMicroseconds(1000);
	digitalWrite(pin_rs, rs_mode);
	int arr[8];
	int i;
	for(i = 0; i < 8; i++)
		arr[i]=(bits>>i)&1;
	

	//清零
	for(i = 0; i < 4; i++)
		digitalWrite(pin_data[i], LOW);

	//先写高四位
	for(i = 7; i >= 4; i--)
		if (arr[i] == 1)
			digitalWrite(pin_data[i-4], HIGH);
	//使能
	
	pluseEnable();
	for(i = 0; i < 4; i++)
		digitalWrite(pin_data[i], LOW);
	//写低四位
	for(i = 3; i >= 0; i--)
		if (arr[i] == 1)
			digitalWrite(pin_data[i], HIGH);
	pluseEnable();
}
void lcdprint(char *ch){
	for (int i = 0; ch[i]!='\0'; i++)
		writebits(ch[i], 1);
}

Footnotes: