mirror of
https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
synced 2025-11-29 03:21:07 +08:00
发布: 10_OLED模块上机实验_STM32MP157
This commit is contained in:
@@ -47,6 +47,27 @@ export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
|
||||
|
||||
#### 2.1.2 编译、替换设备树
|
||||
|
||||
* 修改设备树`arch/arm/boot/dts/100ask_imx6ull-14x14.dts`
|
||||
|
||||
```shell
|
||||
&ecspi1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi1>;
|
||||
|
||||
fsl,spi-num-chipselects = <2>;
|
||||
cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>, <&gpio4 24 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
|
||||
oled: oled {
|
||||
compatible = "spidev";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <10000000>;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 编译设备树:
|
||||
在Ubuntu的IMX6ULL内核目录下执行如下命令,
|
||||
得到设备树文件:`arch/arm/boot/dts/100ask_imx6ull-14x14.dtb`
|
||||
@@ -91,6 +112,32 @@ export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-l
|
||||
|
||||
#### 2.2.2 编译、替换设备树
|
||||
|
||||
* 修改设备树`arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dts`
|
||||
|
||||
```shell
|
||||
&spi5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi5_pins_a>;
|
||||
pinctrl-1 = <&spi5_sleep_pins_a>;
|
||||
status = "okay";
|
||||
cs-gpios = <&gpioh 5 GPIO_ACTIVE_LOW>, <&gpioz 4 GPIO_ACTIVE_LOW>;
|
||||
spidev: icm20608@0{
|
||||
compatible = "invensense,icm20608";
|
||||
interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-parent = <&gpioz>;
|
||||
spi-max-frequency = <8000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
oled: oled@1{
|
||||
compatible = "spidev";
|
||||
spi-max-frequency = <10000000>;
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 编译设备树:
|
||||
在Ubuntu的STM32MP157内核目录下执行如下命令,
|
||||
得到设备树文件:`arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dtb`
|
||||
@@ -186,7 +233,10 @@ ls /dev/spidev*
|
||||
./spi_oled /dev/spidev0.0 116
|
||||
|
||||
// STM32MP157
|
||||
// 在uboot里GPIOA13被配置为open drain了, 先把它设置为推挽输出
|
||||
devmem 0x50000a28 32 1; devmem 0x50002004 32 0
|
||||
./spi_oled /dev/spidev0.1 13
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -544,6 +544,11 @@ git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
|
||||
11_编写SPI设备驱动程序
|
||||
```
|
||||
|
||||
* 2021.04.25 发布"SPI子系统":
|
||||
|
||||
```shell
|
||||
10_OLED模块上机实验_STM32MP157
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -47,6 +47,27 @@ export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
|
||||
|
||||
#### 2.1.2 编译、替换设备树
|
||||
|
||||
* 修改设备树`arch/arm/boot/dts/100ask_imx6ull-14x14.dts`
|
||||
|
||||
```shell
|
||||
&ecspi1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi1>;
|
||||
|
||||
fsl,spi-num-chipselects = <2>;
|
||||
cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>, <&gpio4 24 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
|
||||
oled: oled {
|
||||
compatible = "spidev";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <10000000>;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 编译设备树:
|
||||
在Ubuntu的IMX6ULL内核目录下执行如下命令,
|
||||
得到设备树文件:`arch/arm/boot/dts/100ask_imx6ull-14x14.dtb`
|
||||
@@ -91,6 +112,32 @@ export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-l
|
||||
|
||||
#### 2.2.2 编译、替换设备树
|
||||
|
||||
* 修改设备树`arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dts`
|
||||
|
||||
```shell
|
||||
&spi5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi5_pins_a>;
|
||||
pinctrl-1 = <&spi5_sleep_pins_a>;
|
||||
status = "okay";
|
||||
cs-gpios = <&gpioh 5 GPIO_ACTIVE_LOW>, <&gpioz 4 GPIO_ACTIVE_LOW>;
|
||||
spidev: icm20608@0{
|
||||
compatible = "invensense,icm20608";
|
||||
interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-parent = <&gpioz>;
|
||||
spi-max-frequency = <8000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
oled: oled@1{
|
||||
compatible = "spidev";
|
||||
spi-max-frequency = <10000000>;
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 编译设备树:
|
||||
在Ubuntu的STM32MP157内核目录下执行如下命令,
|
||||
得到设备树文件:`arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dtb`
|
||||
@@ -186,7 +233,10 @@ ls /dev/spidev*
|
||||
./spi_oled /dev/spidev0.0 116
|
||||
|
||||
// STM32MP157
|
||||
// 在uboot里GPIOA13被配置为open drain了, 先把它设置为推挽输出
|
||||
devmem 0x50000a28 32 1; devmem 0x50002004 32 0
|
||||
./spi_oled /dev/spidev0.1 13
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
106
STM32MP157/source/A7/11_SPI/04_oled_use_spidev_ok/font.h
Normal file
106
STM32MP157/source/A7/11_SPI/04_oled_use_spidev_ok/font.h
Normal file
@@ -0,0 +1,106 @@
|
||||
#ifndef _FONT_H_
|
||||
#define _FONT_H_
|
||||
const unsigned char oled_asc2_8x16[95][16]=
|
||||
{
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// 0
|
||||
{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},//!1
|
||||
{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"2
|
||||
{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},//#3
|
||||
{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},//$4
|
||||
{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},//%5
|
||||
{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},//&6
|
||||
{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//'7
|
||||
{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},//(8
|
||||
{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},//)9
|
||||
{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},//*10
|
||||
{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},//+11
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},//,12
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},//-13
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},//.14
|
||||
{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},///15
|
||||
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//016
|
||||
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//117
|
||||
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//218
|
||||
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//319
|
||||
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//420
|
||||
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//521
|
||||
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//622
|
||||
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//723
|
||||
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//824
|
||||
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},//925
|
||||
{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},//:26
|
||||
{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},//;27
|
||||
{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},//<28
|
||||
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},//=29
|
||||
{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},//>30
|
||||
{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},//?31
|
||||
{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},//@32
|
||||
{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},//A33
|
||||
{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},//B34
|
||||
{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},//C35
|
||||
{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},//D36
|
||||
{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},//E37
|
||||
{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},//F38
|
||||
{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},//G39
|
||||
{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},//H40
|
||||
{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//I41
|
||||
{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},//J42
|
||||
{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},//K43
|
||||
{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},//L44
|
||||
{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},//M45
|
||||
{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},//N46
|
||||
{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},//O47
|
||||
{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},//P48
|
||||
{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},//Q49
|
||||
{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},//R50
|
||||
{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},//S51
|
||||
{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},//T52
|
||||
{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},//U53
|
||||
{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},//V54
|
||||
{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},//W55
|
||||
{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},//X56
|
||||
{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},//Y57
|
||||
{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},//Z58
|
||||
{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},//[59
|
||||
{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},//\60
|
||||
{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},//]61
|
||||
{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//^62
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},//_63
|
||||
{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//`64
|
||||
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},//a65
|
||||
{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},//b66
|
||||
{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},//c67
|
||||
{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},//d68
|
||||
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},//e69
|
||||
{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//f70
|
||||
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},//g71
|
||||
{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},//h72
|
||||
{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//i73
|
||||
{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},//j74
|
||||
{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},//k75
|
||||
{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//l76
|
||||
{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},//m77
|
||||
{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},//n78
|
||||
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},//o79
|
||||
{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},//p80
|
||||
{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},//q81
|
||||
{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},//r82
|
||||
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},//s83
|
||||
{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},//t84
|
||||
{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},//u85
|
||||
{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},//v86
|
||||
{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},//w87
|
||||
{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},//x88
|
||||
{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},//y89
|
||||
{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},//z90
|
||||
{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},//{91
|
||||
{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},//|92
|
||||
{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},//}93
|
||||
{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//~94
|
||||
};
|
||||
const unsigned char hz_1616[][32]={
|
||||
{0x02,0x00,0x02,0x00,0xE2,0xFF,0x22,0x42,0x22,0x42,0x32,0x42,0x2A,0x42,0x26,0x42,0x22,0x42,0x22,0x42,0x22,0x42,0x22,0x42,0xE2,0xFF,0x02,0x00,0x02,0x00,0x00,0x00},/*"百",0*/
|
||||
{0x00,0x00,0xF8,0xFF,0x01,0x00,0x02,0x00,0x00,0x00,0xE2,0x1F,0x22,0x08,0x22,0x08,0x22,0x08,0xE2,0x1F,0x02,0x00,0x02,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00},/*"问",1*/
|
||||
{0x00,0x00,0xFE,0xFF,0x02,0x10,0x22,0x08,0x42,0x06,0x82,0x01,0x72,0x0E,0x02,0x10,0x22,0x08,0x42,0x06,0x82,0x01,0x72,0x4E,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00},/*"网",2*/
|
||||
};
|
||||
#endif
|
||||
376
STM32MP157/source/A7/11_SPI/04_oled_use_spidev_ok/spi_oled.c
Normal file
376
STM32MP157/source/A7/11_SPI/04_oled_use_spidev_ok/spi_oled.c
Normal file
@@ -0,0 +1,376 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/spi/spidev.h>
|
||||
|
||||
#include "font.h"
|
||||
|
||||
//为0 表示命令,为1表示数据
|
||||
#define OLED_CMD 0
|
||||
#define OLED_DATA 1
|
||||
|
||||
static int fd_spidev;
|
||||
static int dc_pin_num;
|
||||
|
||||
void OLED_DIsp_Set_Pos(int x, int y);
|
||||
|
||||
|
||||
void dc_pin_init(int number)
|
||||
{
|
||||
// echo 509 > /sys/class/gpio/export
|
||||
// echo out > /sys/class/gpio/gpio509/direction
|
||||
|
||||
char cmd[100];
|
||||
|
||||
dc_pin_num = number;
|
||||
|
||||
sprintf(cmd, "echo %d > /sys/class/gpio/export", number);
|
||||
system(cmd);
|
||||
|
||||
sprintf(cmd, "echo out > /sys/class/gpio/gpio%d/direction", number);
|
||||
system(cmd);
|
||||
}
|
||||
|
||||
void oled_set_dc_pin(int val)
|
||||
{
|
||||
/* echo 1 > /sys/class/gpio/gpio509/value
|
||||
* echo 0 > /sys/class/gpio/gpio509/value
|
||||
*/
|
||||
char cmd[100];
|
||||
sprintf(cmd, "echo %d > /sys/class/gpio/gpio%d/value", val, dc_pin_num);
|
||||
system(cmd);
|
||||
}
|
||||
|
||||
void spi_write_datas(const unsigned char *buf, int len)
|
||||
{
|
||||
write(fd_spidev, buf, len);
|
||||
}
|
||||
|
||||
void oled_write_datas(const unsigned char *buf, int len)
|
||||
{
|
||||
oled_set_dc_pin(1);//拉高,表示写入数据
|
||||
spi_write_datas(buf, len);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* 函数名称: oled_write_cmd
|
||||
* 功能描述: oled向特定地址写入数据或者命令
|
||||
* 输入参数:@uc_data :要写入的数据
|
||||
@uc_cmd:为1则表示写入数据,为0表示写入命令
|
||||
* 输出参数:无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/04 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void oled_write_cmd_data(unsigned char uc_data,unsigned char uc_cmd)
|
||||
{
|
||||
unsigned char uc_read=0;
|
||||
if(uc_cmd==0)
|
||||
{
|
||||
oled_set_dc_pin(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
oled_set_dc_pin(1);//拉高,表示写入数据
|
||||
}
|
||||
spi_write_datas(&uc_data, 1);//写入
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: oled_init
|
||||
* 功能描述: oled_init的初始化,包括SPI控制器得初始化
|
||||
* 输入参数:无
|
||||
* 输出参数: 初始化的结果
|
||||
* 返 回 值: 成功则返回0,否则返回-1
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
int oled_init(void)
|
||||
{
|
||||
unsigned char uc_dev_id = 0;
|
||||
|
||||
oled_write_cmd_data(0xae,OLED_CMD);//关闭显示
|
||||
|
||||
oled_write_cmd_data(0x00,OLED_CMD);//设置 lower column address
|
||||
oled_write_cmd_data(0x10,OLED_CMD);//设置 higher column address
|
||||
|
||||
oled_write_cmd_data(0x40,OLED_CMD);//设置 display start line
|
||||
|
||||
oled_write_cmd_data(0xB0,OLED_CMD);//设置page address
|
||||
|
||||
oled_write_cmd_data(0x81,OLED_CMD);// contract control
|
||||
oled_write_cmd_data(0x66,OLED_CMD);//128
|
||||
|
||||
oled_write_cmd_data(0xa1,OLED_CMD);//设置 segment remap
|
||||
|
||||
oled_write_cmd_data(0xa6,OLED_CMD);//normal /reverse
|
||||
|
||||
oled_write_cmd_data(0xa8,OLED_CMD);//multiple ratio
|
||||
oled_write_cmd_data(0x3f,OLED_CMD);//duty = 1/64
|
||||
|
||||
oled_write_cmd_data(0xc8,OLED_CMD);//com scan direction
|
||||
|
||||
oled_write_cmd_data(0xd3,OLED_CMD);//set displat offset
|
||||
oled_write_cmd_data(0x00,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xd5,OLED_CMD);//set osc division
|
||||
oled_write_cmd_data(0x80,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xd9,OLED_CMD);//ser pre-charge period
|
||||
oled_write_cmd_data(0x1f,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xda,OLED_CMD);//set com pins
|
||||
oled_write_cmd_data(0x12,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xdb,OLED_CMD);//set vcomh
|
||||
oled_write_cmd_data(0x30,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0x8d,OLED_CMD);//set charge pump disable
|
||||
oled_write_cmd_data(0x14,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xaf,OLED_CMD);//set dispkay on
|
||||
|
||||
return 0;
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: oled_fill_data
|
||||
* 功能描述: 整个屏幕显示填充某个固定数据
|
||||
* 输入参数:@fill_Data:要填充的数据
|
||||
* 输出参数: 填充结果
|
||||
* 返 回 值: 成功则返回0
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
int oled_fill_data(unsigned char fill_Data)
|
||||
{
|
||||
unsigned char x,y;
|
||||
for(x=0;x<8;x++)
|
||||
{
|
||||
|
||||
oled_write_cmd_data(0xb0+x,OLED_CMD); //page0-page1
|
||||
oled_write_cmd_data(0x00,OLED_CMD); //low column start address
|
||||
oled_write_cmd_data(0x10,OLED_CMD); //high column start address
|
||||
for(y=0;y<128;y++)
|
||||
{
|
||||
oled_write_cmd_data(fill_Data,OLED_DATA);//填充数据
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Clear
|
||||
* 功能描述: 整个屏幕显示数据清0
|
||||
* 输入参数:无
|
||||
* 输出参数: 无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Clear(void)
|
||||
{
|
||||
unsigned char x, y;
|
||||
char buf[128];
|
||||
|
||||
memset(buf, 0, 128);
|
||||
|
||||
for (y = 0; y < 8; y++)
|
||||
{
|
||||
OLED_DIsp_Set_Pos(0, y);
|
||||
//for (x = 0; x < 128; x++)
|
||||
// oled_write_cmd_data(0, OLED_DATA); /* 清零 */
|
||||
oled_write_datas(buf, 128);
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_All
|
||||
* 功能描述: 整个屏幕显示全部点亮,可以用于检查坏点
|
||||
* 输入参数:无
|
||||
* 输出参数:无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_All(void)
|
||||
{
|
||||
unsigned char x, y;
|
||||
for (y = 0; y < 8; y++)
|
||||
{
|
||||
OLED_DIsp_Set_Pos(0, y);
|
||||
for (x = 0; x < 128; x++)
|
||||
oled_write_cmd_data(0xff, OLED_DATA); /* 全点亮 */
|
||||
}
|
||||
}
|
||||
|
||||
//坐标设置
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Set_Pos
|
||||
* 功能描述:设置要显示的位置
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
* 输出参数: 无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Set_Pos(int x, int y)
|
||||
{ oled_write_cmd_data(0xb0+y,OLED_CMD);
|
||||
oled_write_cmd_data((x&0x0f),OLED_CMD);
|
||||
oled_write_cmd_data(((x&0xf0)>>4)|0x10,OLED_CMD);
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Char
|
||||
* 功能描述:在某个位置显示字符 1-9
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
@c :要显示的字符的ascii码
|
||||
* 输出参数: 无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Char(int x, int y, unsigned char c)
|
||||
{
|
||||
int i = 0;
|
||||
/* 得到字模 */
|
||||
const unsigned char *dots = oled_asc2_8x16[c - ' '];
|
||||
|
||||
/* 发给OLED */
|
||||
OLED_DIsp_Set_Pos(x, y);
|
||||
/* 发出8字节数据 */
|
||||
//for (i = 0; i < 8; i++)
|
||||
// oled_write_cmd_data(dots[i], OLED_DATA);
|
||||
oled_write_datas(&dots[0], 8);
|
||||
|
||||
OLED_DIsp_Set_Pos(x, y+1);
|
||||
/* 发出8字节数据 */
|
||||
//for (i = 0; i < 8; i++)
|
||||
//oled_write_cmd_data(dots[i+8], OLED_DATA);
|
||||
oled_write_datas(&dots[8], 8);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_String
|
||||
* 功能描述: 在指定位置显示字符串
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
@str :要显示的字符串
|
||||
* 输出参数: 无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_String(int x, int y, char *str)
|
||||
{
|
||||
unsigned char j=0;
|
||||
while (str[j])
|
||||
{
|
||||
OLED_DIsp_Char(x, y, str[j]);//显示单个字符
|
||||
x += 8;
|
||||
if(x > 127)
|
||||
{
|
||||
x = 0;
|
||||
y += 2;
|
||||
}//移动显示位置
|
||||
j++;
|
||||
}
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_CHinese
|
||||
* 功能描述:在指定位置显示汉字
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
@chr :要显示的汉字,三个汉字“百问网”中选择一个
|
||||
* 输出参数: 无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
|
||||
void OLED_DIsp_CHinese(unsigned char x,unsigned char y,unsigned char no)
|
||||
{
|
||||
unsigned char t,adder=0;
|
||||
OLED_DIsp_Set_Pos(x,y);
|
||||
for(t=0;t<16;t++)
|
||||
{//显示上半截字符
|
||||
oled_write_cmd_data(hz_1616[no][t*2],OLED_DATA);
|
||||
adder+=1;
|
||||
}
|
||||
OLED_DIsp_Set_Pos(x,y+1);
|
||||
for(t=0;t<16;t++)
|
||||
{//显示下半截字符
|
||||
oled_write_cmd_data(hz_1616[no][t*2+1],OLED_DATA);
|
||||
adder+=1;
|
||||
}
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Test
|
||||
* 功能描述: 整个屏幕显示测试
|
||||
* 输入参数:无
|
||||
* 输出参数: 无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Test(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
OLED_DIsp_String(0, 0, "wiki.100ask.net");
|
||||
OLED_DIsp_String(0, 2, "book.100ask.net");
|
||||
OLED_DIsp_String(0, 4, "bbs.100ask.net");
|
||||
|
||||
for(i = 0; i < 3; i++)
|
||||
{ //显示汉字 百问网
|
||||
OLED_DIsp_CHinese(32+i*16, 6, i);
|
||||
}
|
||||
}
|
||||
|
||||
/* spi_oled /dev/spidevB.D <DC_pin_number> */
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int dc_pin;
|
||||
|
||||
if (argc != 3)
|
||||
{
|
||||
printf("Usage: %s <dev/spidevB.D> <DC_pin_number>\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd_spidev = open(argv[1], O_RDWR);
|
||||
if (fd_spidev < 0) {
|
||||
printf("open %s err\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
dc_pin = strtoul(argv[2], NULL, 0);
|
||||
dc_pin_init(dc_pin);
|
||||
|
||||
oled_init();
|
||||
|
||||
OLED_DIsp_Clear();
|
||||
|
||||
OLED_DIsp_Test();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
17
STM32MP157/source/A7/11_SPI/04_oled_use_spidev_ok/spi_oled.h
Normal file
17
STM32MP157/source/A7/11_SPI/04_oled_use_spidev_ok/spi_oled.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef _OLED_H_
|
||||
#define _OLED_H_
|
||||
|
||||
void oled_write_cmd_data(unsigned char uc_data,unsigned char uc_cmd);
|
||||
int oled_init(void);
|
||||
int oled_fill_data(unsigned char fill_Data);
|
||||
void OLED_DIsp_Clear(void);
|
||||
void OLED_DIsp_All(void);
|
||||
void OLED_DIsp_Set_Pos(int x, int y);
|
||||
void OLED_DIsp_Char(int x, int y, unsigned char c);
|
||||
void OLED_DIsp_String(int x, int y, char *str);
|
||||
void OLED_DIsp_CHinese(unsigned char x,unsigned char y,unsigned char no);
|
||||
void OLED_DIsp_Test();
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,291 @@
|
||||
#include "spi.h"
|
||||
#include "spi_oled.h"
|
||||
#include "font.h"
|
||||
/*GPIO4_20用于控制指令和数据写入的切换,拉高为数据,拉低为指令*/
|
||||
static volatile unsigned int *GPIO4_GDIR_s;
|
||||
static volatile unsigned int *GPIO4_DR_s;
|
||||
//为0 表示命令,为1表示数据
|
||||
#define OLED_CMD 0
|
||||
#define OLED_DATA 1
|
||||
|
||||
/**********************************************************************
|
||||
* 函数名称: oled_write_cmd
|
||||
* 功能描述: oled向特定地址写入数据或者命令
|
||||
* 输入参数:@uc_data :要写入的数据
|
||||
@uc_cmd:为1则表示写入数据,为0表示写入命令
|
||||
* 输出参数:无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/04 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void oled_write_cmd_data(unsigned char uc_data,unsigned char uc_cmd)
|
||||
{
|
||||
unsigned char uc_read=0;
|
||||
if(uc_cmd==0)
|
||||
{
|
||||
*GPIO4_DR_s &= ~(1<<20);//拉低,表示写入指令
|
||||
}
|
||||
else
|
||||
{
|
||||
*GPIO4_DR_s |= (1<<20);//拉高,表示写入数据
|
||||
}
|
||||
spi_writeread(ESCPI1_BASE,uc_data);//写入
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: oled_init
|
||||
* 功能描述: oled_init的初始化,包括SPI控制器得初始化
|
||||
* 输入参数:无
|
||||
* 输出参数: 初始化的结果
|
||||
* 返 回 值: 成功则返回0,否则返回-1
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
int oled_init(void)
|
||||
{
|
||||
unsigned char uc_dev_id = 0;
|
||||
|
||||
GPIO4_GDIR_s = (volatile unsigned int *)(0x20a8000 + 0x4);
|
||||
GPIO4_DR_s = (volatile unsigned int *)(0x20a8000);
|
||||
spi_init(ESCPI1_BASE);
|
||||
|
||||
oled_write_cmd_data(0xae,OLED_CMD);//关闭显示
|
||||
|
||||
oled_write_cmd_data(0x00,OLED_CMD);//设置 lower column address
|
||||
oled_write_cmd_data(0x10,OLED_CMD);//设置 higher column address
|
||||
|
||||
oled_write_cmd_data(0x40,OLED_CMD);//设置 display start line
|
||||
|
||||
oled_write_cmd_data(0xB0,OLED_CMD);//设置page address
|
||||
|
||||
oled_write_cmd_data(0x81,OLED_CMD);// contract control
|
||||
oled_write_cmd_data(0x66,OLED_CMD);//128
|
||||
|
||||
oled_write_cmd_data(0xa1,OLED_CMD);//设置 segment remap
|
||||
|
||||
oled_write_cmd_data(0xa6,OLED_CMD);//normal /reverse
|
||||
|
||||
oled_write_cmd_data(0xa8,OLED_CMD);//multiple ratio
|
||||
oled_write_cmd_data(0x3f,OLED_CMD);//duty = 1/64
|
||||
|
||||
oled_write_cmd_data(0xc8,OLED_CMD);//com scan direction
|
||||
|
||||
oled_write_cmd_data(0xd3,OLED_CMD);//set displat offset
|
||||
oled_write_cmd_data(0x00,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xd5,OLED_CMD);//set osc division
|
||||
oled_write_cmd_data(0x80,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xd9,OLED_CMD);//ser pre-charge period
|
||||
oled_write_cmd_data(0x1f,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xda,OLED_CMD);//set com pins
|
||||
oled_write_cmd_data(0x12,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xdb,OLED_CMD);//set vcomh
|
||||
oled_write_cmd_data(0x30,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0x8d,OLED_CMD);//set charge pump disable
|
||||
oled_write_cmd_data(0x14,OLED_CMD);//
|
||||
|
||||
oled_write_cmd_data(0xaf,OLED_CMD);//set dispkay on
|
||||
|
||||
return 0;
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: oled_fill_data
|
||||
* 功能描述: 整个屏幕显示填充某个固定数据
|
||||
* 输入参数:@fill_Data:要填充的数据
|
||||
* 输出参数: 填充结果
|
||||
* 返 回 值: 成功则返回0
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
int oled_fill_data(unsigned char fill_Data)
|
||||
{
|
||||
unsigned char x,y;
|
||||
for(x=0;x<8;x++)
|
||||
{
|
||||
|
||||
oled_write_cmd_data(0xb0+x,OLED_CMD); //page0-page1
|
||||
oled_write_cmd_data(0x00,OLED_CMD); //low column start address
|
||||
oled_write_cmd_data(0x10,OLED_CMD); //high column start address
|
||||
for(y=0;y<128;y++)
|
||||
{
|
||||
oled_write_cmd_data(fill_Data,OLED_DATA);//填充数据
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Clear
|
||||
* 功能描述: 整个屏幕显示数据清0
|
||||
* 输入参数:无
|
||||
* 输出参数: 无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Clear(void)
|
||||
{
|
||||
unsigned char x, y;
|
||||
for (y = 0; y < 8; y++)
|
||||
{
|
||||
OLED_DIsp_Set_Pos(0, y);
|
||||
for (x = 0; x < 128; x++)
|
||||
oled_write_cmd_data(0, OLED_DATA); /* 清零 */
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_All
|
||||
* 功能描述: 整个屏幕显示全部点亮,可以用于检查坏点
|
||||
* 输入参数:无
|
||||
* 输出参数:无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_All(void)
|
||||
{
|
||||
unsigned char x, y;
|
||||
for (y = 0; y < 8; y++)
|
||||
{
|
||||
OLED_DIsp_Set_Pos(0, y);
|
||||
for (x = 0; x < 128; x++)
|
||||
oled_write_cmd_data(0xff, OLED_DATA); /* 全点亮 */
|
||||
}
|
||||
}
|
||||
|
||||
//坐标设置
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Set_Pos
|
||||
* 功能描述:设置要显示的位置
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
* 输出参数: 无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Set_Pos(int x, int y)
|
||||
{ oled_write_cmd_data(0xb0+y,OLED_CMD);
|
||||
oled_write_cmd_data((x&0x0f),OLED_CMD);
|
||||
oled_write_cmd_data(((x&0xf0)>>4)|0x10,OLED_CMD);
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Char
|
||||
* 功能描述:在某个位置显示字符 1-9
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
@c :要显示的字符的ascii码
|
||||
* 输出参数: 无
|
||||
* 返 回 值:
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Char(int x, int y, unsigned char c)
|
||||
{
|
||||
int i = 0;
|
||||
/* 得到字模 */
|
||||
const unsigned char *dots = oled_asc2_8x16[c - ' '];
|
||||
|
||||
/* 发给OLED */
|
||||
OLED_DIsp_Set_Pos(x, y);
|
||||
/* 发出8字节数据 */
|
||||
for (i = 0; i < 8; i++)
|
||||
oled_write_cmd_data(dots[i], OLED_DATA);
|
||||
|
||||
OLED_DIsp_Set_Pos(x, y+1);
|
||||
/* 发出8字节数据 */
|
||||
for (i = 0; i < 8; i++)
|
||||
oled_write_cmd_data(dots[i+8], OLED_DATA);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_String
|
||||
* 功能描述: 在指定位置显示字符串
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
@str :要显示的字符串
|
||||
* 输出参数: 无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_String(int x, int y, char *str)
|
||||
{
|
||||
unsigned char j=0;
|
||||
while (str[j])
|
||||
{
|
||||
OLED_DIsp_Char(x, y, str[j]);//显示单个字符
|
||||
x += 8;
|
||||
if(x > 127)
|
||||
{
|
||||
x = 0;
|
||||
y += 2;
|
||||
}//移动显示位置
|
||||
j++;
|
||||
}
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_CHinese
|
||||
* 功能描述:在指定位置显示汉字
|
||||
* 输入参数:@ x :要显示的column address
|
||||
@y :要显示的page address
|
||||
@chr :要显示的汉字,三个汉字“百问网”中选择一个
|
||||
* 输出参数: 无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
|
||||
void OLED_DIsp_CHinese(unsigned char x,unsigned char y,unsigned char no)
|
||||
{
|
||||
unsigned char t,adder=0;
|
||||
OLED_DIsp_Set_Pos(x,y);
|
||||
for(t=0;t<16;t++)
|
||||
{//显示上半截字符
|
||||
oled_write_cmd_data(hz_1616[no][t*2],OLED_DATA);
|
||||
adder+=1;
|
||||
}
|
||||
OLED_DIsp_Set_Pos(x,y+1);
|
||||
for(t=0;t<16;t++)
|
||||
{//显示下半截字符
|
||||
oled_write_cmd_data(hz_1616[no][t*2+1],OLED_DATA);
|
||||
adder+=1;
|
||||
}
|
||||
}
|
||||
/**********************************************************************
|
||||
* 函数名称: OLED_DIsp_Test
|
||||
* 功能描述: 整个屏幕显示测试
|
||||
* 输入参数:无
|
||||
* 输出参数: 无
|
||||
* 返 回 值: 无
|
||||
* 修改日期 版本号 修改人 修改内容
|
||||
* -----------------------------------------------
|
||||
* 2020/03/15 V1.0 芯晓 创建
|
||||
***********************************************************************/
|
||||
void OLED_DIsp_Test(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
OLED_DIsp_String(0, 0, "wiki.100ask.net");
|
||||
OLED_DIsp_String(0, 2, "book.100ask.net");
|
||||
OLED_DIsp_String(0, 4, "bbs.100ask.net");
|
||||
|
||||
for(i = 0; i < 3; i++)
|
||||
{ //显示汉字 百问网
|
||||
OLED_DIsp_CHinese(32+i*16, 6, i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef _OLED_H_
|
||||
#define _OLED_H_
|
||||
|
||||
void oled_write_cmd_data(unsigned char uc_data,unsigned char uc_cmd);
|
||||
int oled_init(void);
|
||||
int oled_fill_data(unsigned char fill_Data);
|
||||
void OLED_DIsp_Clear(void);
|
||||
void OLED_DIsp_All(void);
|
||||
void OLED_DIsp_Set_Pos(int x, int y);
|
||||
void OLED_DIsp_Char(int x, int y, unsigned char c);
|
||||
void OLED_DIsp_String(int x, int y, char *str);
|
||||
void OLED_DIsp_CHinese(unsigned char x,unsigned char y,unsigned char no);
|
||||
void OLED_DIsp_Test();
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user