蓝桥杯嵌入式2018年第九届省赛主观题解析

1  题目

2  解析

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "i2c_hal.h"
#include "stdio.h"
#include "string.h"
#include "lcd.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
int hour[6],min[6],second[6];
char buf1[20],buf2[20],buf3[20],buf4[20];
struct keys{int state;int step;int time;
}key[5];
int cnt1,cnt2,cnt3,cnt4,cnt5;
uint8_t val;
int thour,tmin,tsecond,t;//由于题目存在暂时存储时间(有不存入EEPROM的情况),那么设定一个临时存放用于存储时间的变量
int a;
int num;
int i;
int flag,flag1;
int cnt,cnt_down,f;//这里额外测量输出PWM的占空比
double duty;
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void EEPROM_Write(uint8_t addr,uint8_t info)//EEPROM模板函数
{I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CSendByte(info);I2CWaitAck();I2CStop();
}
uint8_t EEPROM_Read(uint8_t addr)
{I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0xa1);I2CWaitAck();val=I2CReceiveByte();I2CWaitAck();I2CStop();return val;
}
void highlight(int start,int end,uint8_t* buf)//高亮函数
{LCD_ClearLine(Line4);LCD_SetBackColor(Green);for(int p=start;p<=end;p++){LCD_DisplayChar(Line4,320-16*p,buf[p]);}LCD_SetBackColor(White);for(int p=0;p<start;p++){LCD_DisplayChar(Line4,320-16*p,buf[p]);}for(int p=end+1;p<14;p++){LCD_DisplayChar(Line4,320-16*p,buf[p]);}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM3)//按键中断回调函数10ms{key[1].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);key[2].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[3].state=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[4].state=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);switch(key[1].step){case 0:{if(key[1].state==GPIO_PIN_RESET&&buf3[8]=='t'){key[1].step=1;cnt4=0;}}break;case 1:{if(key[1].state==GPIO_PIN_RESET){key[1].step=2;}else{key[1].step=0;}}break;case 2:{if(key[1].state==GPIO_PIN_SET){cnt1++;num=cnt1%5+1;//默认显示定时1,那么根据计算得出按键次数与显示定时序号的关系LCD_Clear(White);sprintf(buf1," NO: %d",num);LCD_DisplayStringLine(Line1,(uint8_t*)buf1);sprintf(buf3,"       Standby");//停止状态LCD_DisplayStringLine(Line7,(uint8_t*)buf3);if(num==1)//从EEPROM中读取时间{thour=EEPROM_Read(0x01);t=100000; while(t--);//在中断回调函数内这里不直接用HAL_Delaytmin=EEPROM_Read(0x02);t=100000; while(t--);tsecond=EEPROM_Read(0x03);t=100000; while(t--);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==2){thour=EEPROM_Read(0x11);t=100000; while(t--);tmin=EEPROM_Read(0x12);t=100000; while(t--);tsecond=EEPROM_Read(0x13);t=100000; while(t--);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==3){thour=EEPROM_Read(0x21);t=100000; while(t--);tmin=EEPROM_Read(0x22);t=100000; while(t--);tsecond=EEPROM_Read(0x23);t=100000; while(t--);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==4){thour=EEPROM_Read(0x31);t=100000; while(t--);tmin=EEPROM_Read(0x32);t=100000; while(t--);tsecond=EEPROM_Read(0x33);t=100000; while(t--);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==5){thour=EEPROM_Read(0x41);t=100000; while(t--);tmin=EEPROM_Read(0x42);t=100000; while(t--);tsecond=EEPROM_Read(0x43);t=100000; while(t--);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}cnt2=0;//每次切换要把按键PB1的次数清零key[1].step=0;}}break;}switch(key[2].step){case 0:{if(key[2].state==GPIO_PIN_RESET){key[2].step=1;key[2].time=0;}}break;case 1:{if(key[2].state==GPIO_PIN_RESET){key[2].step=2;cnt4=0;}else{key[2].step=0;}}break;case 2:{key[2].time++;if(key[2].time>=80)//长按停止定时器,并将临时值存入EEPROM{LCD_ClearLine(Line7);sprintf(buf3,"       Standby");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);if(num==1){EEPROM_Write(0x01,thour);t=100000; while(t--);EEPROM_Write(0x02,tmin);t=100000; while(t--);EEPROM_Write(0x03,tsecond);t=100000; while(t--);}if(num==2){EEPROM_Write(0x11,thour);t=100000; while(t--);EEPROM_Write(0x12,tmin);t=100000; while(t--);EEPROM_Write(0x13,tsecond);t=100000; while(t--);}if(num==3){EEPROM_Write(0x21,thour);t=100000; while(t--);EEPROM_Write(0x22,tmin);t=100000; while(t--);EEPROM_Write(0x23,tsecond);t=100000; while(t--);}if(num==4){EEPROM_Write(0x31,thour);t=100000; while(t--);EEPROM_Write(0x32,tmin);t=100000; while(t--);EEPROM_Write(0x33,tsecond);t=100000; while(t--);}if(num==5){EEPROM_Write(0x41,thour);t=100000; while(t--);EEPROM_Write(0x42,tmin);t=100000; while(t--);EEPROM_Write(0x43,tsecond);t=100000; while(t--);}cnt2=0;//也将短按次数清零if(key[2].state==GPIO_PIN_SET){key[2].step=0;}}if(key[2].time<80&&key[2].state==GPIO_PIN_SET)//设置时分秒{cnt2++;if(cnt2==1){LCD_ClearLine(Line7);sprintf(buf3,"       Setting");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);highlight(6,7,(uint8_t*)buf2);}if(cnt2%3==2){highlight(9,10,(uint8_t*)buf2);}if(cnt2%3==0){highlight(12,13,(uint8_t*)buf2);}if(cnt2%3==1&&cnt2!=1){highlight(6,7,(uint8_t*)buf2);}key[2].step=0;}}break;}switch(key[3].step){case 0:{if(key[3].state==GPIO_PIN_RESET&&buf3[8]=='e')//只有在Setting状态下才能计数{key[3].step=1;key[3].time=0;cnt4=0;}}break;case 1:{if(key[3].state==GPIO_PIN_RESET){key[3].step=2;}else{key[3].step=0;}}break;case 2:{key[3].time++;sscanf(buf2,"      %d:%d:%d",&thour,&tmin,&tsecond);//提取时分秒数据显示在LCD上if(key[3].time<80&&key[3].state==GPIO_PIN_SET){if(cnt2%3==1){thour++;if(thour==24) thour=0;}if(cnt2%3==2){tmin++;if(tmin==60) tmin=0;}if(cnt2%3==0){tsecond++;if(tsecond==60) tsecond=0;}key[3].step=0;}if(key[3].time>=80){if((key[3].time-80)%3==0)//长按80ms后每隔3ms增加一个数{if(cnt2%3==1){thour++;if(thour==24) thour=0;}if(cnt2%3==2){tmin++;if(tmin==60) tmin=0;}if(cnt2%3==0){tsecond++;if(tsecond==60) tsecond=0;}if(key[3].state==GPIO_PIN_SET){key[3].step=0;}}if(key[3].state==GPIO_PIN_SET){key[3].step=0;}}sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);if(cnt2%3==2){highlight(9,10,(uint8_t*)buf2);}if(cnt2%3==0&&cnt2!=0){highlight(12,13,(uint8_t*)buf2);}if(cnt2%3==1){highlight(6,7,(uint8_t*)buf2);}}break;}switch(key[4].step){case 0:{if(key[4].state==GPIO_PIN_RESET){key[4].step=1;key[4].time=0;}}break;case 1:{if(key[4].state==GPIO_PIN_RESET){key[4].step=2;}else{key[4].step=0;}}break;case 2:{key[4].time++;if(key[4].time<80&&key[4].state==GPIO_PIN_SET)//获得不同的状态值跳转到倒计时的定时器回调函数中{cnt4++;if(cnt4%2==1){flag=1;}if(cnt4%2==0){flag=2;}key[4].step=0;}if(key[4].time>=80){flag=3;cnt4=0;cnt2=0;if(key[4].state==GPIO_PIN_SET){key[4].step=0;}if(cnt1==0){thour=EEPROM_Read(0x01);t=100000; while(t--);tmin=EEPROM_Read(0x02);t=100000; while(t--);tsecond=EEPROM_Read(0x03);t=100000; while(t--);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}}}break;}}if(htim->Instance==TIM1){if(flag==1){LCD_ClearLine(Line7);sprintf(buf3,"       Running");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);if(tsecond==0&&tmin!=0){tmin--;tsecond=60;}if(tsecond==0&&tmin==0&&thour!=0){thour--;tsecond=60;tmin=59;}tsecond--;if((tsecond==0&&tmin==0&&thour==0)||tsecond==-1){LCD_ClearLine(Line7);sprintf(buf3,"        Pause");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);flag=0;tsecond=0;}LCD_ClearLine(Line4);sprintf(buf2,"      %02d:%02d:%02d",thour,tmin,tsecond);LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(flag==2){LCD_ClearLine(Line7);sprintf(buf3,"        Pause");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);flag=0;}if(flag==3){LCD_ClearLine(Line7);sprintf(buf3,"       Standby");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);flag=0;LCD_ClearLine(Line4);if(num==1||num==0){sprintf(buf2,"      %02d:%02d:%02d",EEPROM_Read(0x01),EEPROM_Read(0x02),EEPROM_Read(0x03));LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==2){sprintf(buf2,"      %02d:%02d:%02d",EEPROM_Read(0x11),EEPROM_Read(0x12),EEPROM_Read(0x13));LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==3){sprintf(buf2,"      %02d:%02d:%02d",EEPROM_Read(0x21),EEPROM_Read(0x22),EEPROM_Read(0x23));LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==4){sprintf(buf2,"      %02d:%02d:%02d",EEPROM_Read(0x31),EEPROM_Read(0x32),EEPROM_Read(0x33));LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}if(num==5){sprintf(buf2,"      %02d:%02d:%02d",EEPROM_Read(0x41),EEPROM_Read(0x42),EEPROM_Read(0x43));LCD_DisplayStringLine(Line4,(uint8_t*)buf2);}}}if(htim->Instance==TIM7){HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);if(buf3[7]=='R'){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);}else{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);}HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//题目没有要求,这里在测量PWM频率和占空比
{if(htim->Instance==TIM2){if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1){cnt=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);cnt_down=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);f=80000000/cnt;duty=(double)cnt_down/(double)cnt;sprintf(buf4,"f:%dHzduty:%.2lf%%",f,duty*100);__HAL_TIM_SetCounter(&htim2,0);}}
}
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();MX_TIM3_Init();MX_TIM16_Init();MX_TIM7_Init();MX_TIM2_Init();/* USER CODE BEGIN 2 */I2CInit();LCD_Init();LCD_Clear(White);LCD_SetTextColor(Black);LCD_SetBackColor(White);HAL_TIM_Base_Start_IT(&htim1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);HAL_TIM_Base_Start_IT(&htim3);HAL_TIM_Base_Start_IT(&htim7);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);if(EEPROM_Read(0x05)!=2){EEPROM_Write(0x05,2);HAL_Delay(20);EEPROM_Write(0x01,0);HAL_Delay(20);EEPROM_Write(0x02,0);HAL_Delay(20);EEPROM_Write(0x03,0);HAL_Delay(20);EEPROM_Write(0x11,0);HAL_Delay(20);EEPROM_Write(0x12,0);HAL_Delay(20);EEPROM_Write(0x13,0);HAL_Delay(20);EEPROM_Write(0x21,0);HAL_Delay(20);EEPROM_Write(0x22,0);HAL_Delay(20);EEPROM_Write(0x23,0);HAL_Delay(20);EEPROM_Write(0x31,0);HAL_Delay(20);EEPROM_Write(0x32,0);HAL_Delay(20);EEPROM_Write(0x33,0);HAL_Delay(20);EEPROM_Write(0x41,0);HAL_Delay(20);EEPROM_Write(0x42,0);HAL_Delay(20);EEPROM_Write(0x43,0);HAL_Delay(20);}else{sprintf(buf1," NO: 1");LCD_DisplayStringLine(Line1,(uint8_t*)buf1);sprintf(buf2,"      %02d:%02d:%02d",EEPROM_Read(0x01),EEPROM_Read(0x02),EEPROM_Read(0x03));LCD_DisplayStringLine(Line4,(uint8_t*)buf2);sprintf(buf3,"       Standby");LCD_DisplayStringLine(Line7,(uint8_t*)buf3);}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(buf3[7]=='R'){HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);}else{HAL_TIM_PWM_Stop(&htim16,TIM_CHANNEL_1);}LCD_ClearLine(Line9);LCD_DisplayStringLine(Line9,(uint8_t*)buf4);HAL_Delay(500);}/* USER CODE END 3 */
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.6研究代码(2)

指的是微电网运行参数。 在MATLAB中&#xff0c;randi([0,1],1,48) 会生成一个包含1*48个0或1的随机整数数组。这意味着数组中的每个元素都将是0或1。 MATLAB帮助中心&#xff1a;均匀分布的伪随机整数 - MATLAB randi - MathWorks 中国https://ww2.mathworks.cn/help/matlab/r…

可调恒定电流稳压器NSI50150ADT4G车规级LED驱动器 提供专业的汽车级照明解决方案

NSI50150ADT4G产品概述&#xff1a; NSI50150ADT4G可调恒定电流稳压器 (CCR) &#xff0c;是一款简单、经济和耐用的器件&#xff0c;适用于为 LED 中的调节电流提供成本高效的方案&#xff08;与恒定电流二极管 CCD 类似&#xff09;。该 (CCR) 基于自偏置晶体管 (SBT) 技术&…

MybatisPlus分页失效不起作用问题剖析

【问题描述】 在使用MybatisPlus的selectPage时发现分页不起作用&#xff0c;每次返回的都是全部的数据&#xff0c;同时getPages()和getTotal()返回的都是0。 【相关代码】 mybatisPlus的版本&#xff1a; <dependency><groupId>com.baomidou</groupId>&…

官宣正式成为 PostgreSQL Contributor,Richard 有何秘诀?

作为世界上最受欢迎的开源数据库之一&#xff0c;PostgreSQL 国际社区于3月3日正式公布了新加入的 PostgreSQL Contributor 名单&#xff0c;以认可为 PostgreSQL 开源项目做出实质性、长期贡献的人员。本次公布的名单中包括 3 名 Contributor 和 6 名 Major Contributor。 拓…

移动App开发常见的三种模式:原生应用、H5移动应用、混合模式应用

引言 在移动应用市场的迅猛发展中&#xff0c;移动App开发正日益成为技术创新和用户体验提升的焦点。对于开发者而言&#xff0c;选择适合自己项目的开发模式成为至关重要的决策。本文将探究移动App开发的三种常见模式&#xff1a;原生应用、H5移动应用和混合模式应用。这三种…

Python(38):Request的data需入参是json,用转换json.dumps(data)

Python接口自动化测试遇到问题:误传str类型给request 一&#xff1a;request接口请求数据用str传参报错&#xff0c;请求响应报错 排查原因&#xff1a;查看服务器报错是Json解析报错。 1.1、如果直接入参&#xff0c;进行request请求的数据&#xff1a; data请求值为&…

点读机女孩是因代言了广告而走红的吗?只知道高君雨这一点你就错了!

点读机女孩是因代言了广告而走红的吗&#xff1f;只知道高君雨这一点你就错了&#xff01; 高君雨&#xff0c;就是那个在点读机广告里&#xff0c;甜美地说着“哪里不会点哪里&#xff0c;so easy”的小女孩。当年的广告一播出&#xff0c;这小女孩就火了&#xff0c;因为她聪…

2.5D数字人解决方案,逼真的三维真人形象

在数字化时代&#xff0c;企业的品牌形象塑造和营销推广方式正经历着前所未有的变革。随着虚拟现实、增强现实等技术的快速发展&#xff0c;三维数字人技术逐渐成为企业展示自身形象、提升品牌价值的重要手段。美摄科技凭借其领先的2.5D数字人解决方案&#xff0c;为企业提供了…

2024年AI辅助研发:科技遇上创意,无限可能的绽放

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 随着人工智能技术的持续突破与深度融合&#xff0c;2024年AI辅助研发正以前所未有的速度和规模&#xff0c;引领着科技界和工业界…

酒店客房管理系统|基于Springboot的酒店客房管理系统设计与实现(源码+数据库+文档)

酒店客房管理系统目录 目录 基于Springboot的酒店客房管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、 用户信息管理 2、会员信息管理 3、 客房信息管理 4、收藏客房管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机…

C++第一弹---C++入门(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 【C详解】 C入门 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间使用 3、C输入&输出 4、缺省参数 4.1、缺省参数概念 4.2、缺省参…

探索数据可视化:Matplotlib 多图布局

多图布局 子视图 import numpy as np import matplotlib.pyplot as pltx np.linspace(0,2*np.pi)plt.figure(figsize(9,6))# 创建子视图 # subplot(2,1,1)表示将当前图形分割成 2 行 1 列的子图网格&#xff0c;并在第 1 个子图位置绘制图形 ax plt.subplot(2,1,1) ax.plot…

JVM系列:垃圾回收器(GC)

JVM系列&#xff1a;垃圾回收器&#xff08;GC&#xff09; &#x1f600; 执行引擎将class文件加载至JVM内存中运行。在运行过程中&#xff0c;需要在内存中动态创建和销毁对象。在传统的C/C语言中&#xff0c;需要手动进行对象销毁以避免内存泄漏。而在Java中&#xff0c;引入…

【UE5】创建蓝图

创建GamePlay需要的相关蓝图 项目资源文末百度网盘自取 在 内容游览器 文件夹中创建文件夹&#xff0c;命名为 Blueprints &#xff0c;用来放这个项目的所有蓝图(Blueprint) 在 Blueprints 文件夹下新建文件夹 GamePlay ,用存放GamePlay相关蓝图 在 Blueprints 文件夹下创建文…

CSS 入门指南(二)CSS 常用样式及注册页面案例

CSS 常用样式 颜色属性 常见样式的颜色属性&#xff1a; color&#xff1a;定义文本的颜色border-color&#xff1a;定义边框的颜色background-color&#xff1a;设置背景色 颜色属性值设置方式&#xff1a; 十六进制值 - 如&#xff1a;&#xff03;FF0000一个RGB值 - 如…

使用 SPL 高效实现 Flink SLS Connector 下推

作者&#xff1a;潘伟龙&#xff08;豁朗&#xff09; 背景 日志服务 SLS 是云原生观测与分析平台&#xff0c;为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务&#xff0c;基于日志服务的便捷的数据接入能力&#xff0c;可以将系统日志、业务日志等接入 …

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Redis主从架构和管道Lua(一)

Redis主从架构 架构 Redis主从工作原理 如果为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master受到PSYNC命令&#xff0c;会在后台进行数据持久化通过bgsave生成最新的 RDB快照文件&#xff0c;持久化期间…

Java 集合类的高级特性介绍

在 Java 编程中&#xff0c;了解集合类的高级特性对于编写高效和可维护的代码至关重要。以下是一些你应该知道的 Java 集合类的高级特性&#xff0c;以及简单的例子来说明它们的用法。 1. 迭代器&#xff08;Iterators&#xff09;和列表迭代器&#xff08;ListIterators&#…

Babel:现代JavaScript的桥梁

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…