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