您当前的位置: 首页 >  stm32

DS小龙哥

暂无认证

  • 6浏览

    0关注

    679博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

STM32+OLED显示屏制作指针式电子钟

DS小龙哥 发布时间:2020-07-15 15:33:13 ,浏览量:6

一、硬件环境介绍

单片机:  STM32F103C8T6

RTC时钟来源:  使用STM32内部RTC定时器得到时间。

显示屏:中景园0.96寸 SPI接口的OLED显示屏

编程软件:keil5

二、实现效果图与代码技术部分介绍 2.1 实现的效果图

2.2 代码技术部分介绍

核心代码内容里分为以下几个部分:

1. RTC时钟代码部分:该电子钟使用的是STM32内部RTC实时时钟,需要编写RTC初始化代码。

2. 电子钟界面逻辑代码部分:电子钟的界面仪表盘画面更新是在RTC秒中断里调用,实现时间指针的更新。

3. OLED驱动代码部分:编写OLED驱动代码,编写常用的OLED接口函数,比如:字符串显示,画点,划线等。

OLED在程序的驱动方式采用显存的方式驱动,定义一个显存数组,程序里的所有逻辑代码先绘制在显存数组里,然后再刷新到OLED显示屏上。

 

三、核心代码

 

完整工程源码下载地址: https://download.csdn.net/download/xiaolong1126626497/15804479

 

 3.1 OLED显示屏驱动代码

(1).  oled.c

#include "oled.h"
/*
函数功能: 初始化OLED显示屏硬件
硬件连接:
D0--PB14--时钟线
D1--PB13--数据线
RES-PB12-复位脚
DC--PB1--命令数据选择脚
CS--PA7--片选
*/
void OLED_Init(void)
{
    /*1. 开时钟*/
    RCC->APB2ENR|=1CRH&=0xF000FFFF;
    GPIOB->CRH|=0x03330000;
    GPIOA->CRL&=0x0FFFFFFF;
    GPIOA->CRL|=0x30000000;
    /*配置默认电平*/
    OLED_CS=1;
    OLED_SCK=1;
    
    /*OLED显示屏驱动代码*/
    OLED_RES=1;
    delay_ms(1000);
    OLED_RES=0;
    delay_ms(1000);
    OLED_RES=1;
    delay_ms(1000);
    OLED_SPI_WriteOneByte(0xAE,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0x00,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x10,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0x40,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xB0,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0x81,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0xCF,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xA1,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xA6,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xA8,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x3F,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xC8,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xD3,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x00,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xD5,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x80,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xD9,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0xF1,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xDA,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x12,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xDB,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x30,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0x8D,OLED_WRITE_CMD);
    OLED_SPI_WriteOneByte(0x14,OLED_WRITE_CMD);
    
    OLED_SPI_WriteOneByte(0xAF,OLED_WRITE_CMD);
}

/*
函数功能: SPI底层发送一个字节的函数
函数参数:data 表示发送的数据  flag表示发送命令还是数据(0表示命令 1表示数据)
*/
void OLED_SPI_WriteOneByte(u8 data,u8 flag)
{
    u8 i;
    OLED_DC=flag; //区分发送数据还是命令
    OLED_CS=0;  //选中OLED显示屏
    for(i=0;i            
关注
打赏
1664009229
查看更多评论
0.4439s