eew_cT3H5d

  • 2024-09-12
  • 回复了主题帖: 【2024 DigiKey创意大赛】职场提神法宝项目-开箱

    Maker_kun 发表于 2024-9-10 08:57 希望早点出作品 这次规划好,按照进度来

  • 回复了主题帖: 【2024 DigiKey创意大赛】职场提神法宝项目-开箱

    chejm 发表于 2024-9-9 21:54 祝贺楼主能获得这么好的机会,希望能早日欣赏到楼主的作品 时间紧迫,这次搞精致一点

  • 回复了主题帖: 【2024 DigiKey创意大赛】职场提神法宝项目-开箱

    秦天qintian0303 发表于 2024-9-11 09:27 含电池没法运输?还真没有遇到过这种情况,一般能开售就能运输啊 确实因为含有锂电池没法空运,其它订单不满300块钱取消了

  • 2024-09-09
  • 发表了主题帖: 【2024 DigiKey创意大赛】职场提神法宝项目-开箱

    本帖最后由 eew_cT3H5d 于 2024-9-9 09:38 编辑 经过几轮处理,本来准备买个M5Stack但是因为自带锂电池没法运输,更换其它物料,最终主要物料终于到了 开始开箱,包装很nice 物料一览表 ATOM开发板很mini小巧 主控ESP32-C6,需要画一个扩展板   主控ESP32上电无异常 [localvideo]3482889c539f914f3f17e12403e4f5e2[/localvideo]   以上就是开箱内容,再次感谢EEWORLD举办此次活动,感谢EEWORLD工作人员耐心解决问题,下面就是努力按时提交作品了!  

  • 2024-08-05
  • 发表了主题帖: 【瑞萨RA8D1评测】第七篇:AD采样电压串口打印到电脑上

    本帖最后由 eew_cT3H5d 于 2024-8-8 08:13 编辑 本部分采样滑动变阻器模块的电压,将电压数值打印到电脑上,显示当前采样的电压     配置ADC使能   添加配置ADC模块   配置相关adc参数   配置相关通道   添加函数   adc.h文件 #ifndef _ADC_H #define _ADC_H #include "hal_data.h" void ADC_Init(void); double Read_ADC_Voltage_Value(void); #endif adc.c文件 #include <ADC/adc.h> //ADC转换完成标志位 volatile bool scan_complete_flag = false; void adc_callback(adc_callback_args_t * p_args) { FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true; } void ADC_Init(void) { fsp_err_t err; err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert(FSP_SUCCESS == err); } /* 进行ADC采集,读取ADC数据并转换结果 */ double Read_ADC_Voltage_Value(void) { uint16_t adc_data; double a0; (void)R_ADC_ScanStart(&g_adc0_ctrl); while (!scan_complete_flag) //等待转换完成标志 { ; } scan_complete_flag = false; //重新清除标志位 /* 读取通道0数据 */ R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data); /* ADC原始数据转换为电压值(ADC参考电压为3.3V) */ a0 = (double)(adc_data*3.3/4095); return a0; } hal_entry.c函数 /* * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates * * SPDX-License-Identifier: BSD-3-Clause */ #include "hal_data.h" #include "debug_uart3.h" #include "ADC/adc.h" fsp_err_t err; void R_BSP_WarmStart(bsp_warm_start_event_t event); //extern bsp_leds_t g_bsp_leds; /*******************************************************************************************************************//** * @brief Blinky example application * * Blinks all leds at a rate of 1 second using the software delay function provided by the BSP. * **********************************************************************************************************************/ void hal_entry (void) { Debug_UART3_Init(); ADC_Init(); while (1) { printf("HELLO eeworld !\r\n"); printf("a0 = %f\r\n", Read_ADC_Voltage_Value()); R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); //延时1秒 } } /*******************************************************************************************************************//** * This function is called at various points during the startup process. This implementation uses the event that is * called right before main() to set up the pins. * * @param[in] event Where at in the start up process the code is currently at **********************************************************************************************************************/ void R_BSP_WarmStart (bsp_warm_start_event_t event) { if (BSP_WARM_START_RESET == event) { #if BSP_FEATURE_FLASH_LP_VERSION != 0 /* Enable reading from data flash. */ R_FACI_LP->DFLCTL = 1U; /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */ #endif } if (BSP_WARM_START_POST_C == event) { /* C runtime environment and system clocks are setup. */ /* Configure pins. */ R_IOPORT_Open(&IOPORT_CFG_CTRL, &IOPORT_CFG_NAME); } } 编译下载程序  

  • 2024-08-04
  • 回复了主题帖: [原创] 【瑞萨RA8D1评测】第六篇:UART通讯控制LED亮灭

    参考来源:https://m.eeworld.com.cn/bbs/forum.php?mod=viewthread&tid=1289361

  • 回复了主题帖: 【瑞萨RA8D1评测】第五篇:IIC驱动OLED屏幕

    nmg 发表于 2024-8-2 14:28 故意设置的闪烁效果? 手机拍摄闪屏,正常看没有这么效果

  • 发表了主题帖: [原创] 【瑞萨RA8D1评测】第六篇:UART通讯控制LED亮灭

    本帖最后由 eew_cT3H5d 于 2024-8-4 23:02 编辑 先看效果:RA8D1发送“HELLO eeworld”,同时若接收到串口调试软件发送指令进行亮灭LED灯   因JLINK自带烧写和调试串口,刚好链接开发板的uart3,所以需要使能开发板的uart3就可以直接通过JLINK的USB直接与电脑进行通讯 系统框图如下:     使能串口uart3           核对串口使能引脚     配置时钟     串口处理函数   debug_uart3c #include <debug_uart3.h> void Debug_UART3_Init(void) { fsp_err_t err = FSP_SUCCESS; err = R_SCI_B_UART_Open (&g_uart3_ctrl, &g_uart3_cfg); assert(FSP_SUCCESS == err); } uint8_t uart_send_complete_flag = 0; void debug_uart3_callback (uart_callback_args_t * p_args) { switch (p_args->event) { case UART_EVENT_RX_CHAR: { switch (p_args->data) { case '1': R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_LOW);; break; case '2': R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_HIGH); break; default: break; } break; } case UART_EVENT_TX_COMPLETE: { uart_send_complete_flag = 1; break; } default: break; } }   串口头文件   debug_uart3.h #ifndef _DEBUG_UART3_H #define _DEBUG_UART3_H #include "hal_data.h" #include "stdio.h" void Debug_UART3_Init(void); #endif print函数构建   printf_redirect.c #include "hal_data.h" #include "stdio.h" #include <sys/stat.h> #include <errno.h> #undef errno extern int errno; int _write(int file, char *ptr, int len); int _close(int file); int _fstat(int file, struct stat *st); int _isatty(int file); int _read(int file, char *ptr, int len); int _lseek(int file, int ptr, int dir); #define DEBUG_SERIAL_TIMEOUT 2000/portTICK_PERIOD_MS extern uint8_t uart_send_complete_flag; int _write(int file, char *ptr, int len) { fsp_err_t err = FSP_SUCCESS; FSP_PARAMETER_NOT_USED(file); static bool uart_open = false; if (false == uart_open) { err = R_SCI_B_UART_Open(&g_uart3_ctrl, &g_uart3_cfg); } if (FSP_SUCCESS == err) { err = R_SCI_B_UART_Write(&g_uart3_ctrl, (uint8_t *)ptr, (uint32_t)len); } if (FSP_SUCCESS != err) { len = -1; } while(uart_send_complete_flag == 0) { R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS); } uart_send_complete_flag = 0; return len; } int _close(int file) { FSP_PARAMETER_NOT_USED(file); return -1; } int _fstat(int file, struct stat *st) { FSP_PARAMETER_NOT_USED(file); st->st_mode = S_IFCHR; return 0; } int _isatty(int file) { FSP_PARAMETER_NOT_USED(file); return 1; } int _lseek(int file, int ptr, int dir) { FSP_PARAMETER_NOT_USED(file); FSP_PARAMETER_NOT_USED(ptr); FSP_PARAMETER_NOT_USED(dir); return 0; } int _read(int file, char *ptr, int len) { FSP_PARAMETER_NOT_USED(file); FSP_PARAMETER_NOT_USED(ptr); FSP_PARAMETER_NOT_USED(len); return 0; } 主程序hal_entry.c  hal_entry.c #include "hal_data.h" #include "debug_uart3.h" fsp_err_t err; void R_BSP_WarmStart(bsp_warm_start_event_t event); //extern bsp_leds_t g_bsp_leds; /*******************************************************************************************************************//** * @brief Blinky example application * * Blinks all leds at a rate of 1 second using the software delay function provided by the BSP. * **********************************************************************************************************************/ void hal_entry (void) { Debug_UART3_Init(); while (1) { printf("HELL eeworld !\r\n"); R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); //延时1秒 } } /*******************************************************************************************************************//** * This function is called at various points during the startup process. This implementation uses the event that is * called right before main() to set up the pins. * * @param[in] event Where at in the start up process the code is currently at **********************************************************************************************************************/ void R_BSP_WarmStart (bsp_warm_start_event_t event) { if (BSP_WARM_START_RESET == event) { #if BSP_FEATURE_FLASH_LP_VERSION != 0 /* Enable reading from data flash. */ R_FACI_LP->DFLCTL = 1U; /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */ #endif } if (BSP_WARM_START_POST_C == event) { /* C runtime environment and system clocks are setup. */ /* Configure pins. */ R_IOPORT_Open(&IOPORT_CFG_CTRL, &IOPORT_CFG_NAME); } }     程序框架:        

  • 2024-07-29
  • 发表了主题帖: 【瑞萨RA8D1评测】第五篇:IIC驱动OLED屏幕

    本帖最后由 eew_cT3H5d 于 2024-7-29 14:00 编辑 先看效果怎么样:     OLED屏幕介绍: OLED,即有机发光二极管OLED(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从2003年开始,这种显示设备在MP3播放器上得到了广泛应用,而对于同属数码类产品的DC 与手机,此前只是在一些展会上展示过采用OLED屏幕的工程样品,还并未走入实际应用的阶段。但OLED屏幕却具备了许多LCD不可比拟的优势,因此它也一直被业内人士所看好。目前常见的OLED模块是0.96英寸的显示屏,价格便宜,引脚少很方便使用,其采用的通讯方式常见为IIC和SPI协议,不过IIC的比较常见一些。     瑞萨RA8D1通过IIC总线控制0.96 OLED屏幕   第一步:新建项目工程后直接添加IIC驱动模块Stacks   配置相关IIC     配置IIC通讯引脚       第一步:添加库文件 添加图像库文件bmp文件     bmp.h文件 #ifndef BMP_H_ #define BMP_H_ unsigned char BMP1[] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF, 0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x0F,0x0F, 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F, 0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xC4,0x04,0x04,0x04,0x07,0xFF, 0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x80,0x80, 0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xE3,0xE3,0xE3,0xE3,0xE3, 0xE3,0xE3,0xE3,0xE3,0xE3,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x1F, 0x1F,0x1F,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x8F,0x8F, 0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F, 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x06,0x06,0x07,0x0F, 0xFF,0xFF,0xFF,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00, 0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, 0x00,0xC7,0xC7,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, 0xFF,0x00,0x00,0x00,0xFF,0xFF,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0xE3,0xE0,0xE0,0xE0, 0xE0,0xE3,0xE3,0x03,0x03,0x03,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0, 0xFF,0xF0,0xF0,0xF0,0xFF,0xFF,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0, 0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF1,0xF1,0xF1,0xF1, 0xF1,0xF1,0xF1,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"D:\GD32F303\GD32F30x_Firmware_Library_V2.1.4_iic_oled\记帖.bmp",0*/ /* (64 X 64 )*/ }; #endif /* BMP_H_ */     添加oled驱动底层程序  oled.c文件 #include "oled.h" #include "stdlib.h" #include "oledfont.h" #include "hal_data.h" extern fsp_err_t err; extern int timeout_ms; extern i2c_master_event_t i2c_event ; //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 /********************************************** IIC Write Command **********************************************/ void Write_IIC_Command(unsigned char IIC_Command) { uint8_t ii[2]={0x00,0x00}; ii[1] = IIC_Command; err = R_SCI_B_I2C_Write(&g_i2c3_ctrl, ii, 0x02, true); assert(FSP_SUCCESS == err); /* Since there is nothing else to do, block until Callback triggers*/ //while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms) while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms>0) { R_BSP_SoftwareDelay(100U, BSP_DELAY_UNITS_MICROSECONDS); timeout_ms--; } if (I2C_MASTER_EVENT_ABORTED == i2c_event) { __BKPT(0); } /* Read data back from the I2C slave */ i2c_event = I2C_MASTER_EVENT_ABORTED; timeout_ms = 100000; } /********************************************** // IIC Write Data **********************************************/ void Write_IIC_Data(unsigned char IIC_Data) { uint8_t ii[2]={0x40,0x00}; ii[0] = 0x40; ii[1] = IIC_Data; err = R_SCI_B_I2C_Write(&g_i2c3_ctrl, ii, 0x02, true); assert(FSP_SUCCESS == err); /* Since there is nothing else to do, block until Callback triggers*/ //while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms) while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms>0) { R_BSP_SoftwareDelay(100U, BSP_DELAY_UNITS_MICROSECONDS); timeout_ms--; } if (I2C_MASTER_EVENT_ABORTED == i2c_event) { __BKPT(0); } /* Read data back from the I2C slave */ i2c_event = I2C_MASTER_EVENT_ABORTED; timeout_ms = 100000; } void OLED_WR_Byte(unsigned dat,unsigned cmd) { if(cmd) { Write_IIC_Data(dat); } else { Write_IIC_Command(dat); } } /******************************************** // fill_Picture ********************************************/ void fill_picture(unsigned char fill_Data) { unsigned char m,n; for(m=0;m<8;m++) { OLED_WR_Byte(0xb0+m,0); //page0-page1 OLED_WR_Byte(0x00,0); //low column start address OLED_WR_Byte(0x10,0); //high column start address for(n=0;n<128;n++) { OLED_WR_Byte(fill_Data,1); } } } /***********************Delay****************************************/ void Delay_50ms(unsigned int Del_50ms) { unsigned int m; for(;Del_50ms>0;Del_50ms--) for(m=6245;m>0;m--); } void Delay_1ms(unsigned int Del_1ms) { unsigned char j; while(Del_1ms--) { for(j=0;j<123;j++); } } //坐标设置 void OLED_Set_Pos(unsigned char x, unsigned char y) { OLED_WR_Byte(0xb0+y,OLED_CMD); OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD); OLED_WR_Byte((x&0x0f),OLED_CMD); } //开启OLED显示 void OLED_Display_On(void) { OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON } //关闭OLED显示 void OLED_Display_Off(void) { OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF } //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! void OLED_Clear(void) { u8 i,n; for(i=0;i<8;i++) { OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7) OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); } //更新显示 } void OLED_On(void) { u8 i,n; for(i=0;i<8;i++) { OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7) OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); } //更新显示 } //在指定位置显示一个字符,包括部分字符 //x:0~127 //y:0~63 //mode:0,反白显示;1,正常显示 //size:选择字体 16/12 void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size) { unsigned char c=0,i=0; c=chr-' ';//得到偏移后的值 if(x>Max_Column-1){x=0;y=y+2;} if(Char_Size ==16) { OLED_Set_Pos(x,y); for(i=0;i<8;i++) OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); OLED_Set_Pos(x,y+1); for(i=0;i<8;i++) OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); } else { OLED_Set_Pos(x,y); for(i=0;i<6;i++) OLED_WR_Byte(F6x8[c][i],OLED_DATA); } } //m^n函数 u32 oled_pow(u8 m,u8 n) { u32 result=1; while(n--)result*=m; return result; } //显示2个数字 //x,y :起点坐标 //len :数字的位数 //size:字体大小 //mode:模式 0,填充模式;1,叠加模式 //num:数值(0~4294967295); void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2) { u8 t,temp; u8 enshow=0; for(t=0;t<len;t++) { temp=(num/oled_pow(10,len-t-1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { OLED_ShowChar(x+(size2/2)*t,y,' ',size2); continue; }else enshow=1; } OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); } } //显示一个字符号串 void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size) { unsigned char j=0; while (chr[j]!='\0') { OLED_ShowChar(x,y,chr[j],Char_Size); x+=8; if(x>120){x=0;y+=2;} j++; } } //显示汉字 void OLED_ShowCHinese(u8 x,u8 y,u8 no) { u8 t,adder=0; OLED_Set_Pos(x,y); for(t=0;t<16;t++) { OLED_WR_Byte(Hzk[2*no][t],OLED_DATA); adder+=1; } OLED_Set_Pos(x,y+1); for(t=0;t<16;t++) { OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA); adder+=1; } } /***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/ void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]) { unsigned int j=0; unsigned char x,y; if(y1%8==0) y=y1/8; else y=y1/8+1; for(y=y0;y<y1;y++) { OLED_Set_Pos(x0,y); for(x=x0;x<x1;x++) { OLED_WR_Byte(BMP[j++],OLED_DATA); } } } //初始化SSD1306 void OLED_Init(void) { // GPIO_InitTypeDef GPIO_InitStructure; // // // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能A端口时钟 // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz // GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOD3,6 // GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7); //delay_ms(800); /* Wait for minimum time required between transfers. */ R_BSP_SoftwareDelay(800, BSP_DELAY_UNITS_MICROSECONDS); OLED_WR_Byte(0xAE,OLED_CMD);//--display off OLED_WR_Byte(0x00,OLED_CMD);//---set low column address OLED_WR_Byte(0x10,OLED_CMD);//---set high column address OLED_WR_Byte(0x40,OLED_CMD);//--set start line address OLED_WR_Byte(0xB0,OLED_CMD);//--set page address OLED_WR_Byte(0x81,OLED_CMD); // contract control OLED_WR_Byte(0xFF,OLED_CMD);//--128 OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64) OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset OLED_WR_Byte(0x00,OLED_CMD);// OLED_WR_Byte(0xD5,OLED_CMD);//set osc division OLED_WR_Byte(0x80,OLED_CMD);// OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off OLED_WR_Byte(0x05,OLED_CMD);// OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period OLED_WR_Byte(0xF1,OLED_CMD);// OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion OLED_WR_Byte(0x12,OLED_CMD);// OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh OLED_WR_Byte(0x30,OLED_CMD);// OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable OLED_WR_Byte(0x14,OLED_CMD);// OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel }   添加oled硬件相关驱动函数   oled.h文件 #ifndef OLED_H_ #define OLED_H_ #include "stdlib.h" #define OLED_MODE 0 #define XLevelL 0x00 #define XLevelH 0x10 #define Max_Column 128 #define Max_Row 64 #define Brightness 0xFF #define X_WIDTH 128 #define Y_WIDTH 64 #define OLED_CMD 0 //写命令 #define OLED_DATA 1 //写数据 typedef __uint8_t u8 ; typedef __uint32_t u32 ; //OLED控制用函数 void OLED_WR_Byte(unsigned dat,unsigned cmd); void OLED_Display_On(void); void OLED_Display_Off(void); void OLED_Init(void); void OLED_Clear(void); void OLED_DrawPoint(u8 x,u8 y,u8 t); void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot); void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size); void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); void OLED_Set_Pos(unsigned char x, unsigned char y); void OLED_ShowCHinese(u8 x,u8 y,u8 no); void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]); void Delay_50ms(unsigned int Del_50ms); void Delay_1ms(unsigned int Del_1ms); void fill_picture(unsigned char fill_Data); void Picture(); void IIC_Start(); void IIC_Stop(); void Write_IIC_Command(unsigned char IIC_Command); void Write_IIC_Data(unsigned char IIC_Data); void Write_IIC_Byte(unsigned char IIC_Byte); void IIC_Wait_Ack(); #endif /* OLED_H_ */   添加字体库   oledfont.h文件 /* * oledfont.h * * Created on: 2023年1月31日 * Author: a8456 */ #ifndef OLEDFONT_H_ #define OLEDFONT_H_ //常用ASCII表 //偏移量32 //ASCII字符集 //偏移量32 //大小:12*6 /************************************6*8的点阵************************************/ const unsigned char F6x8[][6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ' 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines }; /****************************************8*16的点阵************************************/ const unsigned char F8X16[]= { 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,//0 16 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 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,//A 33 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 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,//a 65 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 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 }; char Hzk[][32]={ // 记(0) 帖(1) 年(2) 月(3) 日(4) {0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00}, {0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*"记",0*/ /* (16 X 16 , 宋体 )*/ {0x00,0xF8,0x08,0xFF,0x08,0xF8,0x00,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00}, {0x00,0x0F,0x00,0xFF,0x08,0x0F,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00},/*"帖",1*/ /* (16 X 16 , 宋体 )*/ {0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00}, {0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"年",2*/ /* (16 X 16 , 宋体 )*/ {0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00}, {0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*"月",3*/ /* (16 X 16 , 宋体 )*/ {0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*"日",4*/ /* (16 X 16 , 宋体 )*/ }; #endif /* OLEDFONT_H_ */   主程序显示代码逻辑:     主程序代码:hal_entry.c文件 #include "hal_data.h" #include <stdio.h> #include "LED/LED.h" #include "oled.h" #include "bmp.h" FSP_CPP_HEADER void R_BSP_WarmStart(bsp_warm_start_event_t event); FSP_CPP_FOOTER i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED; void sci_b_i2c_master_callback(i2c_master_callback_args_t *p_args) { i2c_event = I2C_MASTER_EVENT_ABORTED; if (NULL != p_args) { /* capture callback event for validating the i2c transfer event*/ i2c_event = p_args->event; } } fsp_err_t err = FSP_SUCCESS; uint32_t timeout_ms = 100000; /*******************************************************************************************************************//** * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function * is called by main() when no RTOS is used. **********************************************************************************************************************/ void hal_entry(void) { /* TODO: add your own code here */ /* Initialize the I2C module */ R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_SECONDS); err = R_SCI_B_I2C_Open(&g_i2c3_ctrl, &g_i2c3_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err); OLED_Init(); //初始化OLED OLED_Clear() ; //User_LED_ON; OLED_ShowString(0,0,"EEWORLD",16); OLED_ShowNum(0,4,2024,4,16);//显示ASCII字符的码值 OLED_ShowCHinese(32,4,2);//中文字->年 OLED_ShowNum(48,4,7,1,16);//显示ASCII字符的码值 OLED_ShowCHinese(60,4,3);//中文字->月 OLED_ShowNum(80,4,20,2,16);//显示ASCII字符的码值 OLED_ShowCHinese(96,4,4);//中文字->日 OLED_ShowString(0,6,"RA8D1",16); User_LED_ON; /* Wait for minimum time required between transfers. */ R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_SECONDS); //OLED_Clear(); //OLED_DrawBMP(0,0,64,8,BMP1); //图片 #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif } /*******************************************************************************************************************//** * This function is called at various points during the startup process. This implementation uses the event that is * called right before main() to set up the pins. * * @param[in] event Where at in the start up process the code is currently at **********************************************************************************************************************/ void R_BSP_WarmStart(bsp_warm_start_event_t event) { if (BSP_WARM_START_RESET == event) { #if BSP_FEATURE_FLASH_LP_VERSION != 0 /* Enable reading from data flash. */ R_FACI_LP->DFLCTL = 1U; /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */ #endif } if (BSP_WARM_START_POST_C == event) { /* C runtime environment and system clocks are setup. */ /* Configure pins. */ R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg); } } #if BSP_TZ_SECURE_BUILD FSP_CPP_HEADER BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable (); /* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */ BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable () { } FSP_CPP_FOOTER #endif   第三步:编译工程代码     第四步硬件调试:   杜邦线接线太长导致通讯异常,刚换杜邦线可以改善   参考来源:https://zhuanlan.zhihu.com/p/651603090  

  • 回复了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    秦天qintian0303 发表于 2024-7-26 13:46 WS2812B扽时序得间隔怎么控制?   每个灯的间隔数据时间吗?

  • 回复了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    se7ens 发表于 2024-7-26 18:07 谢谢分享,WS2812的原理讲解得很清晰 逻辑分析仪都用上了,高大上啊 另外,为啥用SPI协议来驱动WS281 ... 是的,需要一根数据线就可以控制了

  • 2024-07-24
  • 回复了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    eric_wang 发表于 2024-7-24 10:27 效果很炫 WS2812可玩性太高了,显示效果很好

  • 回复了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    Maker_kun 发表于 2024-7-24 11:46 干货满满,显示效果拉满 WS2812显示一致性还是非常不错的

  • 回复了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    lugl4313820 发表于 2024-7-24 16:43 确实是一个学习的好教程。结果ADC采集,可以玩出新花样。 ADC采样声音吗?随音乐节奏变换显示不同颜色

  • 回复了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    okhxyyo 发表于 2024-7-24 10:27 看着真不错呀这个!!!这个灯是真好看 加个漂亮灯罩就可以当作床头灯了

  • 2024-07-22
  • 回复了主题帖: 【STM32H5 NUCLEO H533RE测评】05微型步进电机I/O驱动

    原来电机设计这么巧妙

  • 2024-07-19
  • 回复了主题帖: 【瑞萨RA8D1评测】第三篇:建立封装库

    Maker_kun 发表于 2024-7-18 15:27 看到你的截图我哭了,大屏幕编程太爽了 34寸显示屏编程就是爽

  • 回复了主题帖: 【瑞萨RA8D1评测】第三篇:建立封装库

    秦天qintian0303 发表于 2024-7-18 10:50 我是被题目吸引进来的,我还以为你要画扩展板呢   论有个大佬画有扩展板

  • 发表了主题帖: 【瑞萨RA8D1评测】第四篇:SPI驱动ws2812全彩LED

    本帖最后由 eew_cT3H5d 于 2024-7-23 23:58 编辑 先看效果:   WS2812B-5050是一个集控制电路与发光电路于一体的智能外控LED光源;其外型采用最新的molding封装工艺,将IC与发光芯片封装在一个5050的封装尺寸中,每个元件即为一个像素点;像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。   它能显示RGB三原色组合成的颜色显示灯,封装为5050,有四个引脚,分别是VCC、VSS、DIN、DOUT . 它的控制协议非常简单,通过一根信号线就可以进行串行异步信号发送      WS2812的级联控制协议是非常简单的。在串行通讯中使用不同高低电平脉冲表示数据0,1编码。通过发送三组24bit的编码,可以控制三个级联的WS2812灯的颜色。每组24bit对应的GRB编码如下所示。发送颜色顺序为GRB,字节的高位在前        WS2812驱动芯片采用单线归零码的通讯方式,芯片在上电复位以后,DIN端接收从控制器传输过来的数据。首先送过来的24 bit数据被第一个芯片提取后,送到芯片内部的数据锁存器。剩余的数据经过内部整形处理电路整形放大后,通过DO端口开始转发输入给下一个级联的芯片,每经过一个芯片的传输,信号减少24 bit。芯片采用自动整形转发技术,使得该芯片的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。   驱动波形逻辑分析仪测试:     逻辑分析仪波形显示:       瑞萨RA8D1通过SPI总线控制ws2812   第一步:在上一个工程继续添加SPI驱动模块     配置SPI通道,通过配置通道3可以直接将SPI引脚P309、P311、P310这样直接通过开发板的引出排针引脚直接接入ws2812     经查询将SPI的配置速度设为7.5M,相关时钟可以为60Mhz或者120Mhz   配置系统时钟,采用内部时钟,相关时钟配置120Mhz     第二步:添加ws2812底层驱动库     ws2812.c文件 /* * ws2812.c * * Created on: 2023年10月31日 * Author: Administrator */ #include <WS2812/ws2812.h> #include "hal_data.h" extern fsp_err_t err ; extern volatile bool g_transfer_complete ; //灯条显存SPI数据缓存 uint8_t gWs2812bDat_SPI[WS2812B_AMOUNT * 24+88] = {0}; //灯条显存 tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT] = { //R G B 0XFF, 0X00, 0X00, //0 0X00, 0XFF, 0X00, //1 0X00, 0X00, 0XFF, //2 0X00, 0XFF, 0XFF, //3 0XFF, 0X00, 0XFF, //4 0XFF, 0XFF, 0X00, //5 0XFF, 0XFF, 0XFF, //6 0X00, 0X00, 0X00, //7 }; void WS2812b_Set(uint16_t Ws2b812b_NUM, uint8_t r,uint8_t g,uint8_t b) { uint8_t *pR = &gWs2812bDat_SPI[88+(Ws2b812b_NUM) * 24 + 8]; uint8_t *pG = &gWs2812bDat_SPI[88+(Ws2b812b_NUM) * 24]; uint8_t *pB = &gWs2812bDat_SPI[88+(Ws2b812b_NUM) * 24 + 16]; for(uint8_t i = 0; i < 8; i++) { if(g & 0x80) { *pG = CODE_1; } else { *pG = CODE_0; } if(r & 0x80) { *pR = CODE_1; } else { *pR = CODE_0; } if(b & 0x80) { *pB = CODE_1; } else { *pB = CODE_0; } r <<= 1; g <<= 1; b <<= 1; pR++; pG++; pB++; } } void WS2812B_Task(void) { uint8_t dat = 0; for(int i=0;i<88;i++) { gWs2812bDat_SPI[i]=0; } //将gWs2812bDat数据解析成SPI数据 for(uint8_t iLED = 0; iLED < WS2812B_AMOUNT; iLED++) { WS2812b_Set(iLED, gWs2812bDat[iLED].R, gWs2812bDat[iLED].G, gWs2812bDat[iLED].B); } //总线输出数据 /* Send the reset command */ g_transfer_complete = false; err = R_SCI_B_SPI_Write(&g_sci_spi3_ctrl, gWs2812bDat_SPI, sizeof(gWs2812bDat_SPI), SPI_BIT_WIDTH_8_BITS); assert(FSP_SUCCESS == err); /* Wait for SPI_EVENT_TRANSFER_COMPLETE callback event. */ while ( g_transfer_complete==false) { ; } // //使总线输出低电平 // g_transfer_complete = false; // err = R_SCI_SPI_Write(&g_spi0_ctrl, dat, 1, SPI_BIT_WIDTH_8_BITS); // assert(FSP_SUCCESS == err); // /* Wait for SPI_EVENT_TRANSFER_COMPLETE callback event. */ // while ( g_transfer_complete==false) // { // ; // } //帧信号:一个大于50us的低电平 R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS); } ws2812.h文件 /* * ws2812.h * * Created on: 2023年10月31日 * Author: Administrator */ #ifndef _WS2812_H_ #define _WS2812_H_ #include <stdint.h> // 编码 0 : 11000000 #define CODE_0 0xc0 // 编码 1 : 11111000 #define CODE_1 0xF8 /*ws2812b灯珠数量*/ #define WS2812B_AMOUNT 8 typedef struct { uint8_t R; uint8_t G; uint8_t B; } tWs2812bCache_TypeDef; extern tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT]; void WS2812b_Set(uint16_t Ws2b812b_NUM, uint8_t r,uint8_t g,uint8_t b); void WS2812B_Task(void); #endif /* WS2812_H_ */ 这个是主程序运行代码,让ws2812显示不同颜色     第三步:进行编译程序     第四步:程序运行效果:成功点亮ws2812全彩LED,SPI驱动一次性成功     视频演示: [localvideo]872201510cb5894e252e27f17966a875[/localvideo]   参考来源: 1.https://blog.csdn.net/qq_24312945/article/details/134152211 2.https://bbs.eeworld.com.cn/thread-1267092-1-1.html  

  • 2024-07-18
  • 发表了主题帖: 【瑞萨RA8D1评测】第三篇:建立封装库

    本帖最后由 eew_cT3H5d 于 2024-7-18 00:11 编辑 开发板P303、P300、P112、P905可以作为驱动继电器的I/O       通过FSP配置P303、P300作为普通I/O     通过FSP配置P112作为普通I/O       通过FSP配置P905作为普通I/O     FSP配置完成,生成相应代码     建立封装库C文件   建立封装库H文件     在hal_entry()写入相应功能代码   #include "LED/LED.h" /*******************************************************************************************************************//** * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function * is called by main() when no RTOS is used. **********************************************************************************************************************/ void hal_entry(void) { /* TODO: add your own code here */ LED_Init(); // LED 初始化 KEY_Init(); // LED 初始化 while(1) { User_LED_ON; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); KEY1_ON; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); KEY2_ON; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); KEY3_ON; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); KEY4_ON; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); User_LED_OFF; KEY1_OFF; KEY2_OFF; KEY3_OFF; KEY4_OFF; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); }   驱动继电器效果,发现第三个继电器不工作,经排查原理图,如果用该引脚需要将NC不接的R0402电阻接通才能使用(个人觉得这个设计有点坑,不能正常用为什么引出来) 排查原因:NC不接的R0402电阻        

最近访客

< 1/3 >

统计信息

已有126人来访过

  • 芯积分:205
  • 好友:--
  • 主题:36
  • 回复:54

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言