3

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

 3 years ago
source link: https://houye.xyz/2018-09/pi1602/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
树莓派连接lcd1602液晶屏幕(c语言版)

树莓派连接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);
}

Author: houye

Created: 2018-09-16 Sun 14:53

Emacs 24.5.1 (Org mode 8.2.10)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK