树莓派连接lcd1602液晶屏幕(c语言版)
前言
树莓派吃灰了将近一年,一直没配屏幕,最近入了一块1602液晶屏幕,用于显示一些简单的信息。网上有很多教程,大多是python的,这篇文章用C语言重新实现了一个最简单的“hello world”。
准备
程序
#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); }