亚博k210 按键 存储图片到sd卡中

博客内容讲述了作者在K210开发板上利用C++编程,尝试将捕获的图片数据存储到SD卡中遇到的问题。主要涉及到f_open函数卡死的情况。博客提供了相关代码,包括RGB转BMP、初始化BMP头信息以及SD卡读写操作等。作者寻求解决打开文件错误的方法。
摘要由CSDN通过智能技术生成

亚博k210 按键 存储图片到sd卡中

目前只完成了初步功能,存储到sd卡过程中有时候会卡死在f_open函数中。
如果有大佬知道咋解决问题,麻烦告诉我一下,万分感激。

#include <String.h>
#include <stdlib.h>
#include <stdio.h>
#include “unistd.h”
#include “rgb2bmp.h”
#include “ff.h”
#include “sdcard.h”
#include “lcd.h”

BmpHead m_BMPHeader;
InfoHead m_BMPInfoHeader;

FIL file;
FRESULT ret = FR_OK;
unsigned char bmp_buffer[CAM_WIDTH_PIXELCAM_HIGHT_PIXEL3]; //bmp图像数据地址

int sd_check_(void)
{
if (check_sdcard())
{
lcd_draw_string(16, 120, “sdcard err”, RED);
return -1;

}

if (check_fat32())
{
    lcd_draw_string(16, 120, "fat32 err", RED);
    return -2;
}
bmp_init();
return 0;

}

void bmp_init(void) //初始化bmp图像头
{
m_BMPHeader.bfType[0]=‘B’;
m_BMPHeader.bfType[1]=‘M’;
m_BMPHeader.imageSize=CAM_WIDTH_PIXELCAM_HIGHT_PIXEL3+54;
m_BMPHeader.blank=0;
m_BMPHeader.startPosition=54;

 m_BMPInfoHeader.Length=40;
 m_BMPInfoHeader.width=CAM_WIDTH_PIXEL;
 m_BMPInfoHeader.height=-CAM_HIGHT_PIXEL; //正负可以改变图片的上颠倒  -值为正向
 m_BMPInfoHeader.colorPlane=1;
 m_BMPInfoHeader.bitColor=24;
 m_BMPInfoHeader.zipformat=0;
 m_BMPInfoHeader.realSize=3*CAM_WIDTH_PIXEL*CAM_HIGHT_PIXEL;
 m_BMPInfoHeader.xPels=0;
 m_BMPInfoHeader.yPels=0;
 m_BMPInfoHeader.colorUse=0;
 m_BMPInfoHeader.colorImportant=0;

}

void rgb2bmparry(uint32_t rgb_buffer)
{
//rgb 转数组 找出rgb数据
long nData = (CAM_WIDTH_PIXEL
CAM_HIGHT_PIXEL)/2;//这里的rgb_buffer为32位存储有两个rgb565数据
unsigned char* pVisit = bmp_buffer;

long i =0;
unsigned char R,G,B;
uint16_t  rgb_buffer_tmp;
printf("****save end1***\n");
while(i<nData)    //这里的rgb_buffer为32位存储有两个rgb565数据
{
   rgb_buffer_tmp = *rgb_buffer&0xffff; //取出低16位

   R = rgb_buffer_tmp&0x1f;
   G = (rgb_buffer_tmp>>5)&0x3f;
   B = (rgb_buffer_tmp>>11)&0x1f;
   B = B<
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是基于亚博51单片机的程序代码: ```C #include <reg51.h> #define uint unsigned int #define uchar unsigned char // 定义PWM0和PWM1的占空比寄存器 sfr PWM0H = 0xD2; sfr PWM0L = 0xD3; sfr PWM1H = 0xD4; sfr PWM1L = 0xD5; // 定义按键K2和K3的端口和引脚 sbit key2 = P3^2; sbit key3 = P3^3; // 定义小车的速度和方向 uchar speed = 50; // 初始化小车速度为50% uchar direction = 0; // 初始化小车方向为停止 // 延时函数 void delay(uint t) { uint i, j; for(i = t; i > 0; i--) for(j = 110; j > 0; j--); } // PWM0初始化函数 void InitPWM0() { PWM0H = 0xFF; PWM0L = speed * 255 / 100; // 根据速度计算占空比 PWMCON0 = 0x11; // PWM0单独输出,PWM0输出电平为高 P_SW2 &= 0xFC; // 将P1.0/PWM0引脚设置为PWM0输出 } // PWM1初始化函数 void InitPWM1() { PWM1H = 0xFF; PWM1L = speed * 255 / 100; // 根据速度计算占空比 PWMCON1 = 0x11; // PWM1单独输出,PWM1输出电平为高 P_SW2 &= 0xCF; // 将P1.1/PWM1引脚设置为PWM1输出 } // 小车前进函数 void forward() { direction = 1; P2 = 0x05; InitPWM0(); InitPWM1(); } // 小车后退函数 void backward() { direction = 2; P2 = 0x0A; InitPWM0(); InitPWM1(); } // 小车左转函数 void left() { direction = 3; P2 = 0x09; InitPWM0(); InitPWM1(); } // 小车右转函数 void right() { direction = 4; P2 = 0x06; InitPWM0(); InitPWM1(); } // 小车停止函数 void stop() { direction = 0; P2 = 0x00; } // 主函数 void main() { // 初始化按键输入端口 P3 = 0xFF; while(1) { // 检测按键K2和K3的状态 if(key2 == 0) { // K2按下,减速 speed -= 10; if(speed < 10) speed = 10; // 速度下限为10% if(direction) { // 如果小车正在运动,重新初始化PWM InitPWM0(); InitPWM1(); } delay(500); } if(key3 == 0) { // K3按下,加速 speed += 10; if(speed > 90) speed = 90; // 速度上限为90% if(direction) { // 如果小车正在运动,重新初始化PWM InitPWM0(); InitPWM1(); } delay(500); } // 根据当前方向控制小车运动 switch(direction) { case 1: forward(); break; case 2: backward(); break; case 3: left(); break; case 4: right(); break; default: stop(); break; } } } ``` 这段程序通过按键K2和K3来控制小车的速度,通过PWM来控制小车的运动方向和速度。当K2按下时,小车速度减少10%,当K3按下时,小车速度增加10%。同时,根据当前方向来控制小车的运动,实现小车的前进、后退、左转、右转和停止功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值