时间:2023-07-28 15:23
人气:
作者:admin
设计背景
我组大部分成员皆是初次接触嵌入式开发系统,因此根据本次夏令营学习及导师推荐下我们选择了设计难度较低的OLED时钟设计。在导师的帮助下完成了整个工程的搭建。
设计思路
采用市面上比较常见的SSD1306显示屏作为时钟的载体。设计的思路是:
1.使用本次夏令营下发的Psoc6-evaluationkit-062S2开发板驱动OLED屏
2.使用RT-THREAD Studio设置RTC获取时间
3.将时间显示在OLED屏上并设计简单的数字滚动功能
开发工具
1.Psoc6-evaluationkit-062S2开发板
2.RT-THREAD Studio
3.SSD1306四排真OLED屏
RT-THREAD Studio软件包设置
其中参考了SSD1306软件包及RTC例程因此SSD1306软件包需单独下载



开发心得
作为初次接触嵌入式操作系统的初学者,学习中有些许困难。主要在于不能清楚的掌握模块的调用,初次接触线程的概念、使用经过rtt封装过的C语言头文件及rtt中的基本函数。在大致读懂后明白了rtt已经将许多模块写好可以直接调用,各位前辈的软件包是的开发更具模块化。裸机开发与嵌入式操作系统开发的区别很大但EOS的简洁明了显而易见,不过代码的移植也是入门的难点之一。
下附完整的工程代码
工程代码
1.OLED屏驱动
#include "oled.h"
#include
#include
#include "codetab.h"
//oled显示尺寸
uint16_t const displayWidth = 128;
uint16_t const displayHeight = 64;
/* OLED显存
[0]0 1 2 3 ... 127
[1]0 1 2 3 ... 127
[2]0 1 2 3 ... 127
[3]0 1 2 3 ... 127
[4]0 1 2 3 ... 127
[5]0 1 2 3 ... 127
[6]0 1 2 3 ... 127
[7]0 1 2 3 ... 127 /
static uint8_t OLED_RAM[8][128];//定义GDDRAM缓存区
#define CW_OLED_I2C CW_I2C1
#define OLED_ADDR 0x3c
#define SSD1306_CTRL_CMD 0x00
#define SSD1306_CTRL_DATA 0x40
#define SSD1306_MASK_CONT (0x1<<7)
static struct rt_i2c_bus_device i2c_bus;
void OLED_I2C_Init(void)
{
i2c_bus = (struct rt_i2c_bus_device )rt_device_find(PKG_USING_SSD1306_I2C_BUS_NAME);
if (i2c_bus == RT_NULL)
{
rt_kprintf("can not find %s device", PKG_USING_SSD1306_I2C_BUS_NAME);
return;
}
}
//向OLED寄存器地址写一个byte的数据
//int I2C_WriteByte(uint8_t addr,uint8_t data)
//{
//
// return 0;
/
下一篇:51单片机编程开发之C语言基础一
从profibusDP转ModbusTCP,一网打尽转换技巧!