使用i2c子系统驱动i2c oled模块

1、使用linux内核里面的i2c子系统来驱动i2c oled 屏幕
代码如下:

#include "linux/i2c.h"
#include <linux/module.h>
#include <linux/poll.h>#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/mutex.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/kmod.h>
#include <linux/gfp.h>
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/slab.h>
#include <linux/fcntl.h>
#include <linux/timer.h>
#include <linux/delay.h>
#include "font.h"
typedef struct i2cmsg
{int row;int col;int buf_len;void *buf;
} i2cmsg_type;
struct i2c_client *g_client;
static int major = 0;
struct class *i2c_cls;
#define OLED_I2C_ADDRESS 0x3c
#define OLED_CMD 0x00
#define OLED_DATA 0x40
static void Oled_Clear(struct i2c_client *client);
static int i2c_transfer_char(struct i2c_client *client, unsigned char data, unsigned char oled_ctrl);
static void Oled_Show_Str(char row, char col, char *str);
static long i2c_oled_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{return 0;
}
static ssize_t i2c_oled_write(struct file *file, const char __user *buf, size_t size, loff_t *filp)
{int ret;void *kernel_buf;// 分配内存i2cmsg_type *msg = kzalloc(sizeof(i2cmsg_type), GFP_KERNEL);if (!msg) {printk(KERN_ERR "Failed to allocate memory for i2cmsg_type\n");return -ENOMEM;}// 从用户空间复制 i2cmsg_type 结构体ret 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python执行cmd命令

在Python中执行cmd命令&#xff0c;可以使用内置的subprocess模块。以下是一个简单的例子&#xff0c;展示如何执行一个cmd命令并获取输出。 import subprocess# 要执行的cmd命令 cmd "dir"# 使用subprocess.run来执行命令 result subprocess.run(cmd, shellTrue,…

【云原生】docker 部署 Doris 数据库使用详解

目录 一、前言 二、数据分析概述 2.1 什么是数据分析 2.2 数据分析目的和意义 2.3 数据分析常用的技术和工具 2.3.1 编程语言 2.3.2 数据处理和分析库 2.3.3 数据可视化工具 2.3.4 数据库系统 2.3.5大数据处理框架 2.3.6 云服务和平台 2.3.7 其他工具 三、Doris介绍…

gdb中使用python脚本

1、入门案例 首先有1个a.cpp&#xff0c;代码如下&#xff1a; #include <map> #include <set> #include <iostream> #include <string>using namespace std;struct MyStruct {std::string mName;std::map<int, std::string> mField1;std::set…

linux下NTP服务器实战(ntp软件)

linux下NTP服务器实战(ntp软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用ntp软件包安装部署。 1. NTP服务器搭建实战 借助ntp软件包在linux上搭建ntp服务器,同时作为客户端从上游ntp服务器同步时间。 1.1 安装配置NTP服务器 1.1.1 安装NTP服务 在大多数L…

51单片机的无线病床呼叫系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器模块矩阵按键时钟模块等模块构成。适用于病床呼叫系统、16床位呼叫等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、温湿度信息、呼叫床位等信息&#xff1b; 2、DHT11采集病房温湿度信息&…

验证linux gpu是否可用

通过torch验证 import torchprint(torch.__version__) # 查看torch当前版本号 print(torch.version.cuda) # 编译当前版本的torch使用的cuda版本号 print(torch.cuda.is_available()) # 查看当前cuda是否可用于当前版本的Torch&#xff0c;如果输出True&#xff0c;则表示可…

深度学习的发展历程

深度学习的起源 在机器学习中&#xff0c;我们经常使用两种方式来表示特征&#xff1a;局部表示&#xff08;Local Representation&#xff09;和分布式表示&#xff08;Distributed Representation&#xff09;。以颜色表示为例&#xff0c;见下图&#xff1a; 要学习到一种好…

iPhone手机清理软件:照片清理功能全解析

在数字化生活中&#xff0c;智能手机成为我们记录生活点滴的主要工具&#xff0c;尤其是iPhone&#xff0c;以其卓越的相机功能备受用户青睐。然而&#xff0c;成千上万的照片迅速堆积&#xff0c;不仅占用了大量存储空间&#xff0c;还使得设备运行缓慢。在众多解决方案中&…

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能&#xff0c;来提高自己的 逻辑能力&#xff0c;熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class"box"><dl class"tab"><…

【系统架构设计师】工厂方法设计模式

工厂方法(Factory Method)模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化延迟到子类中进行。 工厂方法模式的主要角色 产品(Product):定义工厂的创建对象的接口。具体产品(Concrete Product):实…

【数据分享】《中国城市统计年鉴》(1985-2023)全PDF版本 第一次补档

数据介绍 中国城市&#xff0c;如同一本生动的历史书&#xff0c;承载着经济、社会的快速变迁。《中国城市统计年鉴》记录了城市的发展轨迹&#xff0c;是我们理解城市化进程、洞察城市挑战的重要指南。 这份年鉴的数据庞大而详实&#xff0c;囊括了中国城市发展的多个方面。…

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型

船舶机械设备5G智能工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。在当今数字化浪潮推动下&#xff0c;船舶制造业正经历着前所未有的变革。为了应对市场的快速变化&#xff0c;提升生产效率&#xff0c;降低成本&#xff0c;并增强国际竞争力&#xff0c;船舶机械设…

海底生物检测-目标检测数据集(包括VOC格式、YOLO格式)

海底生物检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Kp4Reqt4tq1IafVF33IrnA?pwddxbv 提取码&#xff1a;dxbv 数据集信息介绍&#xff1a; 共有 7383 张图像和一一对应的标注文件 标…

仕考网:事业编考试考什么?

事业编考试科目为&#xff1a; 《职测》《综应》《公基》三选二 事业编有哪些招考形式? ①联考 多省份统一考试&#xff0c;考试时间、考试内容相同&#xff0c;每年两次&#xff0c;上半年5月和下半年10月各一次; ②单招 用人单位单独招聘&#xff0c;考试时间和内容自…

js原型与原型链详解(万文总结,一文搞懂原型链!)

目录 一&#xff0c;原型 1&#xff0c; 对象 2&#xff0c;原型&#xff08;原型对象&#xff09; 二&#xff0c;隐式原型__proto__ 1&#xff0c;__proto__ 2&#xff0c;考你一下 三&#xff0c;原型链 1&#xff0c;Object.prototype 2&#xff0c;链 四&#xff0c;练…

如何设计项目架构

设计项目架构是软件开发过程中的关键步骤之一&#xff0c;它涉及到如何组织系统的各个部分以及它们之间的交互方式。良好的架构设计能够提高系统的可维护性、扩展性和性能。以下是设计C项目架构的一些基本原则和步骤&#xff1a; 1. 明确需求 在设计任何系统之前&#xff0c;…

C++第四十七弹---深入理解异常机制:try, catch, throw全面解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1.C语言传统的处理错误的方式 2.C异常概念 3. 异常的使用 3.1 异常的抛出和捕获 3.2 异常的重新抛出 3.3 异常安全 3.4 异常规范 4.自定义…

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 查找一个点集的凸包。 函数 cv::convexHull 使用斯克拉斯基算法&#xff08;Sklansky’s algorithm&#xff09;来查找一个二维点集的凸包&#…

SQL Server分页查询

原生SQL语句&#xff0c;实现SQL Server分页查询 DECLARE pageCount INT DECLARE pageIndex INT SET pageCount 10 -- #{page.pageSize} SET pageIndex 2 -- #{page.pageNum} ;WITH ACTE AS (SELECTROW_NUMBER () OVER (ORDER BY id) AS SN,id, table_id, name, workcode,…

java基础-IO(1)

1、从计算机的存储说起 电脑电脑&#xff0c;有电才能发挥出“脑”的作用&#xff0c;没电就是破铜烂铁一堆&#xff0c;根据电的特性&#xff08;高低电平&#xff09;巧妙的使用0、1组合&#xff0c;记住了万事万物&#xff0c;才得以让"破铜烂铁"发挥出神奇的功效…