4线SPI驱动OLED常规操作

news2025/1/12 22:51:10

拿到一块点阵屏幕,首先找卖家拿驱动例程

步骤

目录

         1.void LCD_IO_Cfg(void)

2.void wr_cmd(u8 wrcmd)

3.void wr_data(u8 wrdata)

4.void init_lcd(void)

5.void disp_all(void)

         6.void Fresh(void)


:根据商家的时序图可以知道数据在上升沿/下降沿有效,我这里是上升沿。如下图

    wr_cmd 写命令,A0=0

    wr_cmd 写数据,A0=1


1.void LCD_IO_Cfg(void)

void LCD_IO_Cfg(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	

	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	//CS
	GPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_CS;
	GPIO_Init(GPIO_PORT_LCD_CS, &GPIO_InitStructure);
	
	//RESET
	GPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_RESET;
	GPIO_Init(GPIO_PORT_LCD_RESET, &GPIO_InitStructure);
	
	//A0
	GPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_A0;
	GPIO_Init(GPIO_PORT_LCD_A0, &GPIO_InitStructure);

	//SCK
	GPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_SCK;
	GPIO_Init(GPIO_PORT_LCD_SCK, &GPIO_InitStructure);
	
	//DATA
	GPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_DATA;
	GPIO_Init(GPIO_PORT_LCD_DATA, &GPIO_InitStructure);
	
}

2.void wr_cmd(u8 wrcmd)

void wr_cmd(u8 wrcmd)
{
  u8 ii,DA;
   
   SCL_Low;
   CS_Low;        
   Delay_us(LCD_DELAY_TIME);
   A0_Low;        
   
   DA=wrcmd;
   for(ii=0;ii<8;ii++)
   {  
  		SCL_Low;
      Delay_us(LCD_DELAY_TIME);
      if((DA&0X80)==0X80)
      {
              SDA_High;
      }
      else
      {
              SDA_Low;
      }
			Delay_us(LCD_DELAY_TIME);
			SCL_High;
      
      DA=DA<<1;                
   }
	 
	 A0_High;  
   CS_High;        
}

3.void wr_data(u8 wrdata)

void wr_data(u8 wrdata)
{
	 u8 ii,DA;
	
   SCL_Low;
   CS_Low;        
   Delay_us(LCD_DELAY_TIME);
   A0_High;    

	DA=wrdata;
	
	for(ii=0;ii<8;ii++)
	{	
		SCL_Low;
		Delay_us(LCD_DELAY_TIME);
		if((DA&0X80)==0X80)
		{
			SDA_High;
		}
		else
		{
			SDA_Low;
		}		
		Delay_us(LCD_DELAY_TIME);
		SCL_High;		
		
		DA=DA<<1;
	}
	
	 A0_High;  
   CS_High;   
}

4.void init_lcd(void)

这里的代码,找商家要,不同商家,代码不一样

5.void disp_all(void)

void disp_all(void)
{
	u8 x,y,Z=0xb0;
	for(x = 0;x<4;x++)
	{
		wr_cmd(Z);
		Z++;
		wr_cmd(0x10);
		wr_cmd(0x00);
		for(y = 0;y<128;y++)
		{
			wr_data(0xff);
		}
	}
}

6.void Fresh(void)

void Fresh(void)
{
		u8 ii,jj;

	
	for(ii=0;ii<4;ii++)
	{
		wr_cmd(0xb0+ii);	//select page
		wr_cmd(0x10);		//set MSB
		wr_cmd(0x00);		//set LSB
		
    LCD_CS_LOW;	
    LCD_SCK_LOW;
    
    
    LCD_A0_HIG;
	
		for(jj=0;jj<128;jj++)
		{
			 wr_data(Dis_RAM[ii][jj]);
		}
	  LCD_CS_HIG;
	}
}

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

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

相关文章

[附源码]Node.js计算机毕业设计高校学科竞赛报名系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

CBCC3 – A CBCC Algorithm with Improved Exploration/Exploitation Balance

0、论文背景 本文是在CBCC1和CBCC2的基础上提出了CBCC3。在本文中&#xff0c;证明了过度探索和过度开发是现有CBCC变体中性能损失的两个主要来源。在此基础上&#xff0c;提出了一种新的基于贡献的算法&#xff0c;可以在探索和开发之间保持更好的平衡。 Omidvar M N, Kazimi…

复现readme中的一个坑...

今天在运行一个项目的时候“Molecule Optimization via Fragment-based Generative Models”&#xff1a;GitHub - ninglab/Modof: The implementation of Modof for Molecule Optimization 然后妈的死活运行不出来&#xff0c;就是说在运行readme的时候都不行&#xff0c;我看…

Win10系统下与VMware中Ubuntu20.04建立共享文件夹

一、在VMware中设置 二、在Ubuntu中设置 1.在终端中输入下面命令&#xff0c;列出步骤一中设置的VMware共享文件夹名称&#xff0c;说明可以挂载 ~$ vmware-hgfsclient 返回 ubuntushare 2.执行下面命令&#xff0c;创建共享文件夹专用的挂载目录 ~$ sudo mkdir -p /mnt/hgfs …

基于ESP32-S3方案的2.1寸旋钮屏ZX2D10来了,同步分享ESP32应用功能技术之「WEB API接口」

启明智显基于ESP32-S3与国产芯高效开发平台8ms设计开发的一款磁编码结构的旋钮屏。结构紧凑、简单&#xff0c;外观精致&#xff1b;支持WIFI、蓝牙&#xff0c;语音交互等功能。 产品说明&#xff1a; 1. 使用乐鑫ESP32-S3 WI-FI SOC芯片&#xff0c;SOC提供WI-FI与BLE连接能力…

Java容器源码重点回顾——CopyOnWriteArrayList

1. CopyOnWriteArrayList概述 之前介绍过ArrayList&#xff0c;但是我们知道ArrayList是线程不安全的。如果多个线程同时写数据&#xff0c;就会抛出ConcurrentModificationException。然后我们又学过Vector&#xff0c;它的实现方式是在方法中都加入synchronized关键字&#…

selenium自动测试常用脚本

一、控制已经打开页面的浏览器&#xff08;已登录状态&#xff09; 1、简述&#xff1a; 自动化执行时&#xff0c;一些页面操作需要用户是登录状态才能进行访问。如果每次运行自动化脚本都需要重新登录、输入短信验证码&#xff0c;不利于自动化快速运行。因此&#xff0c;需…

[附源码]Python计算机毕业设计高校学生宿舍管理信息系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

C语言易错的选择判断题解析

有定义语句&#xff1a;int a10;&#xff0c;则表达式a的值是10。 ( A ) A.正确 B.错误 以下程序段完全正确的是( A ) A.int k, *p&k; scanf(“%d”,p); B.int k,*p: *p&k;scanf(“%d”,p); C.int *p;scanf(“%d”,p); D.51 以下程序段运行后&#xff0c;循环体运行…

Java发布和溢出简述

发布和溢出前言前置知识发布溢出简述类型案例环境发布溢出溢出类型1——未完全初始化就企图获取该对象中数据溢出类型2——在构造函数中调用非private和final的方法前言 回顾《Java并发编程实战》&#xff0c;这里附上一些总结和小案例加深理解。这里重点是对溢出的阐释。 前…

差分约束

前置知识: 最短路问题、SPFA判环&#xff0c;为了保证学习效果&#xff0c;请保证已经掌握前置知识之后&#xff0c;再来学习本章节&#xff01; 引出 当我们遇到一个不等式组&#xff0c;比如下面这个 \begin{cases} x_{1}-x_{3} \leq 5 \\ x_{1}-x_{2} \leq 2 \\ x_{2}-x_{…

3.2 图像分类

文章目录LeNet&#xff08;小图像&#xff09;LeNet在手写数字识别上的应用LeNet在眼疾识别数据集iChallenge-PM上的应用数据集准备查看数据集图片定义数据读取器启动训练AlexNet&#xff08;大图像&#xff09;VGG&#xff08;深度&#xff09;GoogLeNet&#xff08;深度兼广度…

苹果电脑怎么用移动硬盘ntfs?快速读取和编辑Mac外置移动硬盘

苹果电脑怎么用移动硬盘ntfs&#xff1f;如果你对电脑比较熟悉的话&#xff0c;可能知道NTFS磁盘格式。该格式专门为Windows系统设计的&#xff0c;也称为Windows NT文件系统。从Windows系统迁移到Mac可能是一项相当困难的任务&#xff0c;因为NTFS格式的硬盘在Mac上不能正常工…

音视频面试涨知识(一)

1 直播中为什么会出现花屏、黑屏、闪屏&#xff1f; 主播没有打开摄像头权限&#xff0c;推流端没有做好权限校验处理。 采集Camera数据&#xff0c;就要开始编码&#xff0c;如果编码失败&#xff0c;没有推送数据&#xff0c;那就会黑屏。 拉流段遇到不支持的视频格式&…

某讯滑块验证码反汇编分析-第二章

某讯滑块验证码反汇编分析-第二章反汇编难点分析反汇编帮助跟踪参数生成函数反汇编难点分析 首先就是上一章提到的&#xff0c;指令的顺序是会变的 假设某序号为1的指令为【I[I.length - 2] I[I.length - 2] I.pop();】 这个指令可能在下一次请求的时候&#xff0c;序号变…

C++ Reference: Standard C++ Library reference: Containers: map: map: end

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/end/ 公有成员函数 <map> std::map::end C98 iterator end(); const_iterator end() const; C11 iterator end() noexcept; const_iterator end() const noexcept;返回指向结束的iterator 返回一个指…

常用代码模板2——基础算法

构思算法&#xff1a;可以先想暴力解法&#xff0c;然后观察时间复杂度&#xff0c;如果超时&#xff0c;再考虑优化&#xff0c;优化的方向就是时间复杂度要下降&#xff0c;下表可以给出一些算法选择的参考&#xff1a; 暴力枚举 -> 枚举优化 -> 正解 数据范围时间复…

Qt扫盲-QTabWidget理论总结

QTabWidget理论总结1. 简述2. 用法流程3. 选项卡设置3. 页面信息3. 外观4. 扩展1. 简述 QTabWidget 提供一个选项卡栏和一个“页面区域”&#xff0c;用于显示与每个选项卡相关的页面。默认情况下&#xff0c;选项卡栏显示在页面区域上方&#xff0c;但可以使用不同的配置&…

智能合约简单介绍

本学期学习了区块链的课程&#xff0c;作业是对于智能合约学习后的报告&#xff1a; 1 智能合约简单了解 1.1智能合约是什么 智能合约是由事件驱动的、具有状态的、部署于可共享的分布式数据库上的计算机程序&#xff0c;多用IF-THEN语句。狭义来说&#xff0c;智能合约是设计…

函数式编程 | 图文详解 | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘函数式编程 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出…