首页 > 其他分享 >SSD1306驱动

SSD1306驱动

时间:2023-02-26 19:12:45浏览次数:44  
标签:set ++ void uint8 SendCmd 驱动 SSD1306


#include "i2c.h"

void SSD1306_SendCmd(uint8_t cmd) {
	uint8_t buffer[] = {0, cmd};
	IIC_Write(0x78, buffer, 2);
}

void SSD1306_SendData(uint8_t data) {
	uint8_t buffer[] = {0x40, data};
	IIC_Write(0x78, buffer, 2);
}

// y代表页,每页有x列,每列8个垂直像素
// 分辨率128x32代表, 128列,4页
void SSD1306_SetPos(uint8_t x, uint8_t y) {
	SSD1306_SendCmd(0xB0+y);
	SSD1306_SendCmd(0x10 | (x>>4));
	SSD1306_SendCmd(0x00 | (x&0xF));
}

void SSD1306_Clear(void) {
	for (uint8_t y = 0; y < 4; y++) {
		SSD1306_SetPos(0, y);
		for (uint8_t x = 0; x < 128; x++) {
			SSD1306_SendData(0);
		}
	}
}

void SSD1306_Clear2(uint8_t ch) {
	for (uint8_t y = 0; y < 4; y++) {
		SSD1306_SetPos(0, y);
		for (uint8_t x = 0; x < 128; x++) {
			SSD1306_SendData((x^y) | ch);
		}
	}
}

void SSD1306_ColorTurn(uint8_t flag) {
	SSD1306_SendCmd(flag ? 0xA7 : 0xA6);
}

void SSD1306_DisplayOn(void) {
	SSD1306_SendCmd(0x8D);		// SET DCDC命令
	SSD1306_SendCmd(0x14);		// DCDC ON
	SSD1306_SendCmd(0xAF);		// DISPLAY ON
}

void SSD1306_DisplayOff(void) {
	SSD1306_SendCmd(0x8D);		// SET DCDC命令
	SSD1306_SendCmd(0x10);		// DCDC OFF
	SSD1306_SendCmd(0xAE);		// DISPLAY OFF
}

static const uint8_t _InitData[] = {
	0XAE, /*display off*/
	0X00, /*set lower column address*/ 
	0X10, /*set higher column address*/
	0X00, /*set display start line*/ 
	0XB0, /*set page address*/ 
	0X81, /*contract control*/ 
	0XFF, /*128*/ 
	0XA1, /*set segment remap*/ 
	0XA6, /*normal / reverse*/ 
	0XA8, /*multiplex ratio*/ 
	0X1F, /*duty = 1/32*/ 
	0XC8, /*Com scan direction*/ 
	0XD3, /*set display offset*/ 
	0X00, 
	0XD5, /*set osc division*/ 
	0X80, 
	0XD9, /*set pre-charge period*/ 
	0X1F, 
	0XDA, /*set COM pins*/ 
	0X00, 
	0XDB, /*set vcomh*/ 
	0X40, 
};

void WaitMS(uint16_t cnt) {
	while (cnt--) for (uint16_t i = 0; i < 0x8000; i++) __NOP();
}

void SSD1306_Init(void) {
	IIC_Init();	
	for (uint8_t i = 0; i < sizeof(_InitData); i++) {
		SSD1306_SendCmd(_InitData[i]);
	}
	
	SSD1306_Clear();
	SSD1306_DisplayOn();
	
	while (1) {
		for (uint8_t i = 0; i < 8; i++) {
			SSD1306_Clear2(1<<i);
			WaitMS(25);
		}
		
	}
}

 

标签:set,++,void,uint8,SendCmd,驱动,SSD1306
From: https://www.cnblogs.com/kehuadong/p/17157335.html

相关文章

  • 数据驱动ddt安装3种方式_unittest_Python
    命令行安装  pipinstallddt-i 管理员运行命令提示符  pycharm设置里安装pycharmPythonPackages里安装......
  • 树莓派内核驱动配置
    cat /proc/cpu/nfo可查看cpu信息。pi3pi4cpu型号不同,起始地址不同。pi3是BCM2835PI4是BCM2711.查看cpu起始物理地址的c文件。Pi4pi3起始地址不同。#include<stdi......
  • linux驱动移植-SPI控制器驱动
    在Mini2440裸机开发之SPI(OLEDSSD1306)我们介绍了S3C2440这款SOC的I2C结构,其内部只有一个SPI控制器:S3C2440SPI相关引脚定义: SPISCLKMOSIMISOSSSPI0GPE13GP......
  • VK2C22A/B LQFP52/48高抗干扰LCD液晶驱动芯片/LCD液晶段码驱动IC,适用于各类医用仪器
    产品型号:VK2C22A/B产品品牌:永嘉微电/VINKA封装形式:LQFP52/48、DICE(COB邦定片)、COG(邦定玻璃用)产品年份:新年份原厂,工程服务,技术支持VK2C22A/B概述: VK2C22是一个点阵式存......
  • Linux LCD驱动
    一、Linux下LCD驱动简析1.与裸机的异同在Linux中应用程序最终也是通过操作RGBLCD的显存来实现在LCD上显示字符、图片等信息,但是Linux系统的内存管理......
  • Linux Broadcom Bluetooth BCM43142A0 蓝牙驱动安装
    LinuxBroadcomBluetoothBCM43142A0蓝牙驱动安装 想转到Linux,奈何蓝牙鼠标不识别。经历了4个发行版的努力(LinuxMint,Pop!OS,OpenSuse,Fedora),才发现,电脑的蓝牙设备没......
  • rk3568 | 瑞芯微平台GPIO引脚驱动编写
    最近在玩瑞芯微平台的产品,移植了几个设备的驱动,遇到了一些问题,总结后发现大部分问题都出在了GPIO配置的问题上,写下本篇文章,用来分享一下调试的心得。有喜欢瑞芯微的朋友,可......
  • 记Cucumber行为驱动测试的简单配置与使用方式
    产生背景代码测试的工具有很多,比如最常用的单元测试工具Junit、Jupiter、Mockito和PowerMockito,这几个可以说是Java开发者的心头好,代码测试一般都是用这几个里面的某一个......
  • linux安装8125B网卡驱动
    机器的系统是CentOS7,网卡是Realtek的2.5G网卡RTL8125B。1.下载驱动Realtek瑞昱官网:https://www.realtek.com/zh/下载链接:https://www.realtek.com/zh/component/zoo/c......
  • usb免驱动摄像头实验
    1、编译openwrt系统内核使它支持usb,进入在/openwrt/trunk上执行makemenuconfig2、1).添加USB相关支持Kernelmodules—>USBSupport—><*>kmod-usb-core.##默认......