2021物联网国赛通用库开发——E卷

2021物联网国赛通用库开发——E卷

本次所需要实现的功能如下

在这里插入图片描述

一:导入竞赛选手所需要自己添加的包文件
#include "hal_oled.h"			//OLED屏头文件
二:添加为实现本题所使用到的全局变量
int count_radius;			  	//半径变量
int count_height;			  	//高度变量
double count_volume;		  	//体积变量
char Rxdata_radius[64];		 	//半径数组
char Rxdata_height[64];		 	//高度数组	
char Rxdata_volume[64];		  	//体积数组
double pa=3.14;
三:使用字模取模软件进行取模(格式为十六进制数组)
char yuan[32]={0x00,0xFE,0x02,0x82,0xBA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBA,0x82,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x4F,0x60,0x50,0x48,0x46,0x48,0x50,0x60,0x4F,0x40,0xFF,0x00,0x00};		//圆

char zhu[32]={0x10,0x10,0xD0,0xFF,0x90,0x10,0x08,0x08,0x08,0x09,0xFA,0x08,0x08,0x08,0x08,0x00,0x04,0x03,0x00,0xFF,0x00,0x03,0x40,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x40,0x00};		   //柱

char ban[32]={0x00,0x00,0x42,0x44,0x58,0x40,0x40,0xFF,0x40,0x40,0x50,0x48,0x46,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00};			//半

char jin[32]={0x00,0x10,0x88,0xC4,0x33,0x80,0x82,0x42,0x22,0x12,0x1A,0x26,0x22,0x40,0x80,0x00,0x02,0x01,0x00,0xFF,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x40,0x00};      	//径

char gao[32]={0x04,0x04,0x04,0x04,0xF4,0x94,0x95,0x96,0x94,0x94,0xF4,0x04,0x04,0x04,0x04,0x00,0x00,0xFE,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x82,0xFE,0x00,0x00};			//高

char du[32]={0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00};			//度

char ti[32]={0x00,0x80,0x60,0xF8,0x07,0x10,0x10,0x10,0xD0,0xFF,0xD0,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x00,0xFF,0x10,0x08,0x04,0x0B,0x08,0xFF,0x08,0x0B,0x04,0x08,0x10,0x00};			//体

char ji[32]={0x20,0x24,0x24,0xA4,0xFE,0x23,0x22,0x20,0xFC,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x80,0x63,0x19,0x01,0x01,0x09,0x33,0xC0,0x00};          //积
四:按键扫描函数(核心代码)
void KeyDownHandler(void) {
		if(isKey2Pressed())
		{
			count_radius++;											//当按键2被按下半径加1并替换掉R
			sprintf(Rxdata_radius,"%d",count_radius);
			OLED_ShowString(100,0,(uint8_t *)Rxdata_radius);
			resetKey2();
		}
		
		if(isKey3Pressed())
		{
			count_height++;											//当按键3被按下高度加1并替换掉H
			sprintf(Rxdata_height,"%d",count_height);
			OLED_ShowString(100,2,(uint8_t *)Rxdata_height);
			resetKey3();
		}
		
		if(isKey4Pressed())
		{
			count_volume=(pa*count_radius*count_radius)*count_height;												sprintf(Rxdata_volume,"%.2f",count_volume);
			OLED_ShowString(100,4,(uint8_t *)Rxdata_volume);
				
			resetKey4();
		}
		
}

注:圆柱体积公式

​ 圆柱体体积=底面积×高

当按键4被按下将当前的半径和高度带入圆柱体积公式并乘3.14得出结果(替换V)并以保留两位小数的公式输出在oled屏上

特别补充printf和sprintf的区别

sprintf与printf函数的区别:二者功能相似,但是sprintf函数打印到字符串中,而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。

五:mian函数
int main( void )
{
    Init();
	OLED_Init();													//OLED显示屏初始化
	OLED_ShowString(100,0,(uint8_t *)"R");
	OLED_ShowString(100,2,(uint8_t *)"H");
	OLED_ShowString(100,4,(uint8_t *)"V");
    while( 1 )
    {
			KeyDownHandler();
			OLED_ShowCHineseArray(0,0,yuan);
			OLED_ShowCHineseArray(20,0,zhu);
			OLED_ShowCHineseArray(40,0,ban);
			OLED_ShowCHineseArray(60,0,jin);
			OLED_ShowString(80,0,(uint8_t *)":");
			
			OLED_ShowCHineseArray(0,2,yuan);
			OLED_ShowCHineseArray(20,2,zhu);
			OLED_ShowCHineseArray(40,2,gao);
			OLED_ShowCHineseArray(60,2,du);
			OLED_ShowString(80,2,(uint8_t *)":");
			
			OLED_ShowCHineseArray(0,4,yuan);
			OLED_ShowCHineseArray(20,4,zhu);
			OLED_ShowCHineseArray(40,4,ti);
			OLED_ShowCHineseArray(60,4,ji);
			OLED_ShowString(80,4,(uint8_t *)":");
			
			
			
			
    }
}
六:全部代码
/**
  ******************************************************************************
  * File Name          : main.c
  * Description        : Main program body
  ******************************************************************************
  */
#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "hal_oled.h"
int count_radius;
int count_height;
double count_volume;
char Rxdata_radius[64];
char Rxdata_height[64];
char Rxdata_volume[64];
double pa=3.14;
/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
    // 开发板平台初始化
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
	 
}

/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void KeyDownHandler(void) {
		if(isKey2Pressed())
		{
			count_radius++;
			sprintf(Rxdata_radius,"%d",count_radius);
			OLED_ShowString(100,0,(uint8_t *)Rxdata_radius);
			resetKey2();
		}
		
		if(isKey3Pressed())
		{
			count_height++;
			sprintf(Rxdata_height,"%d",count_height);
			OLED_ShowString(100,2,(uint8_t *)Rxdata_height);
			resetKey3();
		}
		
		if(isKey4Pressed())
		{
			count_volume=(pa*count_radius*count_radius)*count_height;
			sprintf(Rxdata_volume,"%.2f",count_volume);
			OLED_ShowString(100,4,(uint8_t *)Rxdata_volume);
				
			resetKey4();
		}
		
}

/**********************************************************************************************
*函数:void handlerPre10Ms( void )
*功能:10毫秒循环
*输入:无
*输出:无
*特殊说明:循环处理总时长300ms
**********************************************************************************************/
void handlerPre10Ms(void) {
    for (int delay = 0; delay < 30; delay++) {
        HAL_Delay(10);
        
    }
}
char yuan[32]={0x00,0xFE,0x02,0x82,0xBA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBA,0x82,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x4F,0x60,0x50,0x48,0x46,0x48,0x50,0x60,0x4F,0x40,0xFF,0x00,0x00};
char zhu[32]={0x10,0x10,0xD0,0xFF,0x90,0x10,0x08,0x08,0x08,0x09,0xFA,0x08,0x08,0x08,0x08,0x00,0x04,0x03,0x00,0xFF,0x00,0x03,0x40,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x40,0x00};
char ban[32]={0x00,0x00,0x42,0x44,0x58,0x40,0x40,0xFF,0x40,0x40,0x50,0x48,0x46,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00};
char jin[32]={0x00,0x10,0x88,0xC4,0x33,0x80,0x82,0x42,0x22,0x12,0x1A,0x26,0x22,0x40,0x80,0x00,0x02,0x01,0x00,0xFF,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x40,0x00};
char gao[32]={0x04,0x04,0x04,0x04,0xF4,0x94,0x95,0x96,0x94,0x94,0xF4,0x04,0x04,0x04,0x04,0x00,0x00,0xFE,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x82,0xFE,0x00,0x00};
char du[32]={0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00};	
char ti[32]={0x00,0x80,0x60,0xF8,0x07,0x10,0x10,0x10,0xD0,0xFF,0xD0,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x00,0xFF,0x10,0x08,0x04,0x0B,0x08,0xFF,0x08,0x0B,0x04,0x08,0x10,0x00};
char ji[32]={0x20,0x24,0x24,0xA4,0xFE,0x23,0x22,0x20,0xFC,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x80,0x63,0x19,0x01,0x01,0x09,0x33,0xC0,0x00};

/**
 * Main application entry point.
 */
int main( void )
{
    Init();
	OLED_Init();
	OLED_ShowString(100,0,(uint8_t *)"R");
	OLED_ShowString(100,2,(uint8_t *)"H");
	OLED_ShowString(100,4,(uint8_t *)"V");
    while( 1 )
    {
			KeyDownHandler();
			OLED_ShowCHineseArray(0,0,yuan);
			OLED_ShowCHineseArray(20,0,zhu);
			OLED_ShowCHineseArray(40,0,ban);
			OLED_ShowCHineseArray(60,0,jin);
			OLED_ShowString(80,0,(uint8_t *)":");
			
			OLED_ShowCHineseArray(0,2,yuan);
			OLED_ShowCHineseArray(20,2,zhu);
			OLED_ShowCHineseArray(40,2,gao);
			OLED_ShowCHineseArray(60,2,du);
			OLED_ShowString(80,2,(uint8_t *)":");
			
			OLED_ShowCHineseArray(0,4,yuan);
			OLED_ShowCHineseArray(20,4,zhu);
			OLED_ShowCHineseArray(40,4,ti);
			OLED_ShowCHineseArray(60,4,ji);
			OLED_ShowString(80,4,(uint8_t *)":");
			
			
			
			
    }
}

最后:若读者有更好的做法,可在评论区打出互相学习!!!
如有纰漏,请多多指点!!
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值