`
iaiai
  • 浏览: 2195323 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

树莓派驱动LCD12864显示屏

 
阅读更多
适用于ST7920控制器的LCD12864显示屏,使用wiringPi GPIO库,C语言编写.


代码在文章结尾处

硬件连接
采用LCD12864的8位并行驱动方式,与树莓派GPIO连接已在程序开头处定义

驱动原理
使用wiringPi控制GPIO,按通讯协议向LCD发送指令以及要显示的数据即可显示
主要由进制转换、字符编码转换、发送数据构成。

代码
/*
	运行:sudo ./12864 [字符]
	编译:gcc 12864.c -o 12864 -L lib -l wiringPi (需已安装wiringPi)
	by:WuSiYu
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <wiringPi.h>
#include <iconv.h> 
 
#define LCD_RS 4 //显示屏控制线
#define LCD_RW 5
#define LCD_EN 1
 
#define D1 30 //显示屏数据线
#define D2 21
#define D3 22
#define D4 23
#define D5 24
#define D6 25
#define D7 26
#define D8 27
 
char u2g_out[255]; 
 
/*===================================================================
功能:编码转换
输入:UTF8
输出:GB2312
====================================================================*/
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen){
	iconv_t cd;
	int rc;
	char **pin = &inbuf;
	char **pout = &outbuf;
 
	cd = iconv_open(to_charset,from_charset);
	if (cd==0) return -1;
	memset(outbuf,0,outlen);
	if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
	iconv_close(cd);
	return 0;
}
 
int u2g(char *inbuf,int inlen,char *outbuf,int outlen){ 
	return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); 
} 
 
/*===================================================================
功能:总线写入
输入:十六进制数据
输出:无
====================================================================*/
void bus_write(unsigned char data){
	int t[10];
	int f=0,i=0,d=data;
 
	//进制转换
	for(i=0;i<8;i++){
		t[i]=data%2;
		data=data/2;
	}
 
	//输出
	digitalWrite(D1,t[0]);
	digitalWrite(D2,t[1]);
	digitalWrite(D3,t[2]);
	digitalWrite(D4,t[3]);
	digitalWrite(D5,t[4]);
	digitalWrite(D6,t[5]);
	digitalWrite(D7,t[6]);
	digitalWrite(D8,t[7]);
}
/*===================================================================
功能:检查LCD忙状态                                                    
输入:无
输出:lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      
====================================================================*/
void chk_busy(){//检查忙位
	digitalWrite(LCD_RS,0);
	digitalWrite(LCD_RW,1);
	digitalWrite(LCD_EN,1);
	bus_write(0xff);
	pinMode(D8, INPUT);
	while(digitalRead(D8));
	pinMode(D8, OUTPUT);
	digitalWrite(LCD_EN,0);
}
/*====================================================================
功能:写命令
输入:8位数据
输出:无
=====================================================================*/
void WriteCmd_LCD12864(unsigned char cmdcode){
	chk_busy();
	digitalWrite(LCD_RS,0);
	digitalWrite(LCD_RW,0);
	digitalWrite(LCD_EN,1);
	delay(5);
	bus_write(cmdcode);
	digitalWrite(LCD_EN,0);
	delay(5);
}
/*====================================================================
功能:写数据
输入:8位数据
输出:无
=====================================================================*/
void WriteData_LCD12864(unsigned char Dispdata){
	chk_busy();
	digitalWrite(LCD_RS,1);
	digitalWrite(LCD_RW,0);
	digitalWrite(LCD_EN,1);
	delay(5);
	bus_write(Dispdata);
	digitalWrite(LCD_EN,0);
	delay(5);
}
/*==========================================================================
功能:发送字符串
输入:地址,字符串
输出:无
===========================================================================*/
void WriteWord_LCD12864(unsigned char a,unsigned char *d){//向LCD指定位置发送一个字符串,长度64字符之内。
	unsigned char *s;
	u2g(d,strlen(d),u2g_out,255);
	s=u2g_out;
	WriteCmd_LCD12864(a);
	while(*s>0){
		WriteData_LCD12864(*s); 
		s++;
	}
}
/*==========================================================================
功能:发送字符串2
输入:字符串
输出:无
===========================================================================*/
void WriteWord_LCD12864_2(unsigned char *d){//向LCD发送一屏字符串,长度64字符之内。
	int i=0;
	unsigned char *s;
	u2g(d,strlen(d),u2g_out,255);
	s=u2g_out;
	WriteCmd_LCD12864(0x80);
	while(*s>0){
		WriteData_LCD12864(*s); 
		s++;
		i++;
		if(i==16){
			WriteCmd_LCD12864(0x90);
		}
		if(i==32){
			WriteCmd_LCD12864(0x88);
		}
		if(i==48){
			WriteCmd_LCD12864(0x98);
		}
	}
}
/*==========================================================================
功能:初始化LCD
输入:无
输出:无
===========================================================================*/
void Init_LCD12864(void){			//初始化LCD屏
	pinMode(D1, OUTPUT);	//设置GPIO
	pinMode(D2, OUTPUT);
	pinMode(D3, OUTPUT);
	pinMode(D4, OUTPUT);
	pinMode(D5, OUTPUT);
	pinMode(D6, OUTPUT);
	pinMode(D7, OUTPUT);
	pinMode(D8, OUTPUT);
 
	pinMode(LCD_RS, OUTPUT);
	pinMode(LCD_RW, OUTPUT);
	pinMode(LCD_EN, OUTPUT);
 
	WriteCmd_LCD12864(0x38);       //选择8bit数据流
	delay(20);
	WriteCmd_LCD12864(0x01);       //清除显示,并且设定地址指针为00H
	delay(20);
	WriteCmd_LCD12864(0x0c);       //开显示(无游标、不反白)
	delay(20);
}
 
int main (int args, char *argv[]){
	wiringPiSetup();
	Init_LCD12864();
 
	WriteCmd_LCD12864(0x01);
	WriteWord_LCD12864(0x80,"Hello LCD12864");
	if(argv[1]){
		WriteCmd_LCD12864(0x01);
		WriteCmd_LCD12864(0x80);
		WriteWord_LCD12864_2(argv[1]);
	}
}
  • 大小: 44.7 KB
  • 大小: 238.1 KB
分享到:
评论

相关推荐

    树莓派3B+ LCD显示屏驱动 LCD-show

    "LCD-show"则是一个专为树莓派设计的驱动程序,用于驱动各种类型的LCD显示屏,尤其适合那些没有内置驱动或者需要手动配置的LCD。 LCD-show驱动程序的安装与使用通常包括以下几个关键步骤: 1. **获取LCD-show驱动*...

    树莓派LCD屏幕驱动

    首先,LCD3.2和LCD3.5是指具有3.2英寸和3.5英寸显示屏的液晶模块,它们通常具有分辨率较低但体积小巧的特点,适合树莓派这类小型计算平台。驱动这些屏幕的关键在于找到合适的驱动程序和库,确保树莓派能够正确识别并...

    树莓派LCD3.5驱动

    树莓派用户经常需要扩展其显示功能,而LCD3.5屏幕就是一种常用的扩展设备,它提供了比默认的HDMI接口更灵活的显示选项。本教程将详细介绍如何在树莓派上驱动3.5英寸的LCD屏幕。 首先,我们需要了解LCD3.5的基本硬件...

    树莓派LCD driver.zip_1602_7HP_树莓派_树莓派3B_树莓派驱动1602

    Python是一种流行的编程语言,常被用于树莓派上的开发工作,因此这个脚本可能是树莓派驱动LCD的关键部分。 3. "LCD1602_IIC": 这可能是一个库或者模块,提供了与1602 LCD通信的接口,它使用I2C(Inter-Integrated ...

    树莓派LCD驱动

    树莓派LCD驱动/2.8/3.2/3.5/3.97/4.3/5/7等! You can focus on the following GitHub web site, for the latest lcd drivers: https://github.com/goodtft/LCD-show =============================================...

    树莓派状态LCD显示屏程序C源码+程序说明.zip

    树莓派状态LCD显示屏程序C源码+程序说明.zip树莓派状态LCD显示屏程序C源码+程序说明.zip 1.基本信息: 本例程使用单独LCD模块进行了验证,你可以在工程的Examples\中查看对应的测试例程; 本例程均在Raspberry Pi 4B...

    树莓派4b镜像(默认是3.5寸lcd显示).zip

    这个压缩包文件“树莓派4b镜像(默认是3.5寸lcd显示).zip”显然是为树莓派4B提供了一个预配置的操作系统镜像,特别之处在于它包含了对3.5英寸LCD显示器的支持。在本文中,我们将深入探讨树莓派4B、LCD显示驱动以及...

    树莓派+3.5寸屏幕的使用方法

    树莓派+3.5寸屏幕的使用方法包括硬件连接、驱动安装、屏幕校准、显示方向设置、触摸驱动安装等几个方面。通过正确地安装和配置,树莓派+3.5寸屏幕可以发挥出其强大的功能,为各种项目和应用提供强有力的支持。

    树莓派2 I2C 接口 LCD1602显示驱动程序

    标题中的“树莓派2 I2C 接口 LCD1602显示驱动程序”指的是在树莓派2型开发板上,通过I2C(Inter-Integrated Circuit)接口来控制LCD1602显示屏的驱动程序。LCD1602是一种常见的16x2字符型液晶显示器,常用于各种电子...

    树莓派屏幕驱动

    树莓派屏幕驱动是指在树莓派上配置和使用LCD(液晶显示器)屏幕的过程,这通常涉及到硬件连接、软件配置以及内核模块的加载。在本篇文章中,我们将深入探讨树莓派屏幕驱动的相关知识点。 首先,硬件连接是树莓派...

    树莓派LCD1602 i2c驱动golang版.zip

    通过这个驱动,开发者可以方便地在树莓派上利用I2C总线控制LCD1602显示器,显示自定义的文本信息。为了使用这个驱动,你需要按照`readme.md`中的步骤配置和编译代码,然后在你的项目中调用相应的接口来与LCD进行交互...

    树莓派2——驱动5110

    【树莓派2——驱动5110】这篇文章主要探讨的是如何在树莓派2代硬件平台上驱动5110液晶显示屏。5110,也称为PCF8574扩展接口的 Nokia 5110/3310 LCD,是一款84x48像素的单色液晶屏,常用于嵌入式项目,因其小巧、低...

    LCD1602_树莓派_液晶显示器模块_

    本文将深入探讨如何在树莓派上驱动LCD1602显示器模块,以及涉及的相关知识点。 首先,LCD1602是指具有16字符x2行显示能力的液晶显示器,它使用了 Hitachi HD44780 控制器。这种控制器使得LCD1602能够通过较少的I/O...

    树莓派最新LDC驱动.gz文件

    "树莓派最新LDC驱动.gz"文件就是针对树莓派LCD显示设备的驱动程序更新。 该驱动程序以.gz格式压缩,这是一种常见的文件压缩格式,通常用于Linux系统中。.gz文件是gzip压缩工具生成的,它能有效地减小文件的大小,...

    树莓派3.5寸tft屏幕安装

    本文将详细介绍如何为树莓派3安装3.5寸TFT触摸屏,并完成触摸屏驱动的安装。 #### 二、准备工作 在进行触摸屏驱动安装之前,确保拥有以下硬件及软件: - **硬件**:树莓派3代B、3.5寸TFT触摸屏、SD卡(建议容量...

    LCD 4.3驱动资料

    文档列举了一系列可靠性测试项目,确保显示屏在不同环境和使用条件下的稳定性和耐用性。 #### 7. 通用预防措施 - **安全**: 使用过程中的注意事项,如避免短路、防止过热等。 - **处理**: 在安装和使用过程中应...

    如何旋转安装在Raspberry Pi或Pi Zero W上的LCD触摸屏

    总结来说,在树莓派或树莓派零W上旋转安装LCD触摸屏,首先需要了解TFT LCD与OLED的显示原理及其在视觉质量上的优势。随后,正确的硬件连接和软件安装步骤是实现这一目的的关键。通过使用适当的Linux命令和配置工具,...

    树莓派状态信息显示 via LCD1602.zip

    标题中的“树莓派状态信息显示 via LCD1602”指的是使用LCD1602液晶显示屏来实时显示树莓派的操作系统状态信息。LCD1602是一种常见的字符型液晶显示器,通常用于嵌入式系统,具有16行2列的字符显示能力。 在树莓派...

    LCD-show-161112.tar.gz

    为了充分利用其功能,有时我们需要连接外部LCD显示屏,以便进行更直观的操作和交互。"LCD-show-161112.tar.gz"这个压缩包文件正是为此目的提供的一种解决方案。 首先,我们需要了解树莓派的视频输出接口。树莓派...

    TFT彩屏模块资料&C51-STM32测试程序&LCD电容触摸屏&ILI9341驱动(包含源程序原理图参考手册等)

    8)树莓派2.8寸TFT显示屏设计(原理图、PCB源文件、源码等) 9)基于单片机车牌识别系统2.8寸TFT液晶屏显示ILI9341(包含原理图源程序等) 10)基于STM32单片机的心电检测系统2.4寸TFT屏显示(包含原理图源程序等)

Global site tag (gtag.js) - Google Analytics