蓝桥杯嵌入式--实战模拟题

这篇具有很好参考价值的文章主要介绍了蓝桥杯嵌入式--实战模拟题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在蓝桥杯省赛举办之前,学校组织了一场模拟赛,基于第十三届的省赛题,但是难度略高于省赛,这篇博客记录一下解题的过程,其思路可供大家参考。

详细工程目前先联系我获取。

题目详情

蓝桥杯嵌入式--实战模拟题
蓝桥杯嵌入式--实战模拟题
蓝桥杯嵌入式--实战模拟题
蓝桥杯嵌入式--实战模拟题

实现思路分析

花个十几分钟把题目好好理解一下,然后先整理出一个大体的运行原理。很容易我们就想到可以写一个状态机来描述密码锁的运行原理(如下):

蓝桥杯嵌入式--实战模拟题

大体思路找到了,接下来我们就可以开始着手程序的设计了!

程序设计

一、整理需要使用的外设

我们做事干活都要有条理,做足准备工作才能顺利开展工作。我们第一步要根据题目要求整理出要使用的外设,为我们CubeMX的配置打下基础。

蓝桥杯嵌入式--实战模拟题

多说一嘴,大家不要觉得上面这个图好像没什么用,如果在考试时,如果你漏配了一个外设,到时候返回CubeMX重新配置会将我们之前写的代码全部清除!除非你的代码写在了工程预设的Begin-End块里,要不然就凉凉了!

二、配置CubeMX

一、配置时钟与Debug

蓝桥杯嵌入式--实战模拟题

这个不必多说,不会的看前几期的专栏内容。

二、配置串口

蓝桥杯嵌入式--实战模拟题

这里要注意,我们使用的是串口1的引脚PA9和PA10,这两个脚需要手动设置,要不然会出错配置成其它引脚。

三、配置ADC

、ADC的配置也是比较简单的,只需要选择对引脚与引脚模式即可!

蓝桥杯嵌入式--实战模拟题

四、配置按键

按键这件事可能困扰了很多人,因为按键实现的方式有很多,但是对于我们使用的新板子(G431),四个按键分别为:PB0,PB1,PB2,PA0,其中除了PB0和PA0不能同时配置为外部中断触发,其余即可都可以配置为GPIO_EXTI,推荐大家使用外部中断的方式。就本题而言:

  1. PB0,PB1,PB2使用外部中断,EXTI0-2

  1. PB4放到滴答定时器的中断复位函数中,采用GPIO检测的方式。

首先配置外部中断引脚:模式为下降沿检测,并且统一上拉(可以不上拉)

蓝桥杯嵌入式--实战模拟题

对于PA0则配置成GPIO输入,并且也配置上拉:

蓝桥杯嵌入式--实战模拟题

大家可能会看到,我还配置了UserLabel这个选项,这样是为了方便后续的编程,可以合理的标签可以帮助我们记忆引脚。

五、配置定时器,为输出PWM做准备

通过读题可知,我们并不需要定时器进行中断,其主要的功能就是输出PWM:

这里我们使用的是定时器17的通道1进行输出,主要就是配分频系数PSC和自动重装值(决定频率)

蓝桥杯嵌入式--实战模拟题

同时,占空比我们也配置一下好了,默认为10%,也就是100

蓝桥杯嵌入式--实战模拟题

六、配置LED

LED的配置主要就是GPIO_OUTPUT,对着原理图找引脚就好了:

我们配置成推挽输出,配上上拉(默认高电平灭灯)

蓝桥杯嵌入式--实战模拟题

GPIO的配置到这里还有一个很值得注意的点:不要忘记配置PD2!!PD2是锁存器的使能端,是使用LED必不可少的引脚!

七、开启中断

在NVIC选项卡中,我们要打开与设置我们需要的中断和中断优先级:

蓝桥杯嵌入式--实战模拟题

串口,还有三个外部输入中断就是我们需要配置的全部,优先级的话可以不需要设置,因为一般不可能会同时触发。

八、生成工程

到这里,我们所有的配置都已经完成了,接下来我们就可以生成我们的工程了!可以参考前面的专栏内容,注意不要放进包含中文路径的文件夹里!

九、建立user工程文件夹,移植库文件

Core-->Src-->user

蓝桥杯嵌入式--实战模拟题

添加I2C,LCD,以及建立一个库放置自己编写的函数:

蓝桥杯嵌入式--实战模拟题

十、打开Keil添加路径与Debug方式

蓝桥杯嵌入式--实战模拟题

这个步骤不必多讲,最后完成了编译一遍:

蓝桥杯嵌入式--实战模拟题

没有错误后,我们的准备工作基本完成,下面就到代码的设计!

三、代码设计

蓝桥杯嵌入式--实战模拟题
  1. 编写EEPROM读写相关驱动

一共四个相关函数:

  • EEPROM单字节读写函数,完成单字节的读写

  • 密码读取与存入函数,完成四位密码的读取与存储

蓝桥杯嵌入式--实战模拟题

像上图所示,我们将其写入自定义的库文件中,方便后期的管理,大家通过上图可以看到自己的库究竟要怎么写,尤其是要理解开头的两行与结尾的一行宏的作用,我在专栏前面的文章都有讲,忘记的可以回去看看。

实现代码如下,大家注意这个读写的代码是可以借助官方给的读写时序图的,不必多说,这个是必须要掌握的内容:

uint8_t e2prom_read(uint8_t addr)
{
    uint8_t data=0;
    I2CStart();
    I2CSendByte(0xa0); //写
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CStart();
    I2CSendByte(0xa1);//读
    I2CWaitAck();
    data = I2CReceiveByte();
    I2CSendNotAck();
    I2CStop();
    return data;
}

void e2prom_write(uint8_t addr,uint8_t data)
{
    I2CStart();
    I2CSendByte(0xa0);
    I2CWaitAck();
    I2CSendByte(addr);
    I2CWaitAck();
    I2CSendByte(data);
    I2CWaitAck();
    I2CStop();
}

extern uint8_t Mima[4];

void Mima_Write(void)
{
    for(int i=0;i<4;i++)
    {
        e2prom_write(0x03+i,Mima[i]);
        for(int j=0;j<0xffff;j++); //延时,在中断中可使用
        
    }

}

void Mima_Read(void)    //读取密码
{
    for(int i=0;i<4;i++)
    {
        Mima[i]=e2prom_read(0x03+i);
        HAL_Delay(10); //延时,在中断中不可使用
        
    }

}

后面两个函数的设计需要注意,读写操作直接要设计几个延时间隔,大概要在5ms以上。由于写密码函数需要在串口中断中运行,因此延时不能再使用HAL_Delay()了,要不然会卡死!

2.编写LED显示代码

大家可能好奇这个驱动代码编写的顺序,有些人喜欢一开始就写核心状态转移代码,其实不然,我们采取的策略是,先做好充足准备,从外到内,从易到难的思路解题,因此优先编写相对固定的套路代码:

//函数声明
void Led_Init(void); //初始化熄灭全部LED

void Led_Disp(uint8_t num); //输入u8,需要点亮的位置1

函数实现:

void Led_Init(void)
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET); //高电平熄灭
    HAL_GPIO_WritePin(LED_KEY_GPIO_Port,LED_KEY_Pin,GPIO_PIN_SET);//开启PD2
    HAL_GPIO_WritePin(LED_KEY_GPIO_Port,LED_KEY_Pin,GPIO_PIN_RESET);//关闭PD2    
}

void Led_Disp(uint8_t num)//输入u8,需要点亮的位置1
{
    Led_Init();//熄灭所有LED
    HAL_GPIO_WritePin(GPIOC,num<<8,GPIO_PIN_RESET); //低电平点亮
    HAL_GPIO_WritePin(LED_KEY_GPIO_Port,LED_KEY_Pin,GPIO_PIN_SET);//开启PD2
    HAL_GPIO_WritePin(LED_KEY_GPIO_Port,LED_KEY_Pin,GPIO_PIN_RESET);//关闭PD2     

}

3、编写串口中断部分代码

大家好好读题,先明白串口的功能是什么。在本题中,串口做的事情就是下面4个:

  1. 接收设置密码指令

  1. 将密码写入EEPROM

  1. 接收问询密码指令

  1. 发送警告指令

除了最后一共任务需要在核心函数中写,其它三个都是在回调函数里完成的:

//串口回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(R_Data[0]=='S') //说明需要改密码
    {
        Mima[0] = R_Data[1]-48;//ascii码转换
        Mima[1] = R_Data[2]-48;
        Mima[2] = R_Data[3]-48;
        Mima[3] = R_Data[4]-48;
        Mima_Write(); //写入密码
        
    }
    if(R_Data[0]=='Q') //说明需要发送密码
    {
        sprintf((char*)T_Data,"PW%d%d%d%d",Mima[0],Mima[1],Mima[2],Mima[3]);
        HAL_UART_Transmit(&huart1,T_Data,6,500);
    }
HAL_UART_Receive_IT(&huart1,R_Data,5); //重新开启中断
}

大家注意,这个回调函数我是习惯将其放到main.c文件里的main函数后头,这样做的好处就是编写代码比较自由,任何函数都能调用。

4、测试密码查询与修改功能

完成了上面几部分后,我们可以下载一下程序,测试一下串口的功能:

设置密码

蓝桥杯嵌入式--实战模拟题

查询密码(下图),可以看出修改指令成功执行

蓝桥杯嵌入式--实战模拟题

复位一下,再查询一次,如果密码没有改变,则说明成功写入,如果失败,则说明EEPROM错误,有极大可能是你忘记初始化I2C了!。

5、编写状态机

状态机的编写位于main函数中,主要是涉及一个状态的转换问题,核心语法是switch语句:

蓝桥杯嵌入式--实战模拟题

根据上图我们可以写出:

蓝桥杯嵌入式--实战模拟题

可以看出,输入状态的下一个状态有三个:

  1. 正确

  1. 错误

  1. 保持输入

其依据是提交的密码是否正确,验证密码我们肯定是写到B4按键相关的函数里,然后设计一个标志位,指示下一个状态,因此状态机更进一步写成:

蓝桥杯嵌入式--实战模拟题

6、编写三个状态对应的页面

void LCD_Display_Erro(void); //输入错误之后显示的页面

void LCD_Display_Success(void); //输入正确之后显示的页面

void LCD_Display_Input(void); //输入页面

首先写最简单的正确和错误的显示页面:

void LCD_Display_Erro(void)
{
    LCD_Clear(Black);
   // HAL_Delay(2000); //延时2s
            
            Led_Disp(0xff); //LED闪动两次
            HAL_Delay(500);
            Led_Disp(0x00);
            HAL_Delay(500);
            Led_Disp(0xff);
            HAL_Delay(500);
            Led_Disp(0x00);
            HAL_Delay(500);    
    LCD_Clear(Blue); //清屏为蓝色
    LCD_SetBackColor(Blue); //后面是给INPUT页面初始化
    LCD_SetTextColor(White);
    LCD_DisplayStringLine(Line2,(uint8_t*)"      PASSWORD      ");
}

以及:

void LCD_Display_Success(void)
{
    LCD_Clear(Blue);
    HAL_Delay(2000);
    LCD_SetBackColor(Blue);
    LCD_SetTextColor(White);
    LCD_DisplayStringLine(Line2,(uint8_t*)"      PASSWORD      ");
}

对于输入页面的显示,涉及到一个闪烁显示的问题,这也可以说是本题的一个难点:

最终的代码如下:

void LCD_Display_Input(void)//输入页面函数
{
   char text[20];
    uint8_t Pos_t;
    Pos_t=Pos; //消除残影
    LCD_SetBackColor(Blue);     
    sprintf(text,"      %d %d %d %d      ",IN_Mima[0],IN_Mima[1],IN_Mima[2],IN_Mima[3]);//其它位置数字的显示
    LCD_DisplayStringLine(Line6,(uint8_t*)text);
    LCD_SetBackColor(Black);
    LCD_SetTextColor(White);//黑底白字
    LCD_DisplayChar(Line6,320-16*Pos_t,IN_Mima[Pos/2 - 3]+48);//换算POS与实际位置关系,以及ASCII与实际数字关系
    HAL_Delay(500);//黑底白字显示500ms
    LCD_DisplayChar(Line6,320-16*Pos_t,' ');//输入的位置写入空格,形成黑色块
    HAL_Delay(500);//黑块显示500ms
}

其实核心的就是使用函数LCD_DisplayChar,然后在特定位置交替显示黑底白字,以及纯黑色块,达成闪烁的效果。

先显示:

蓝桥杯嵌入式--实战模拟题

0.5s后再显示:

蓝桥杯嵌入式--实战模拟题

如此循环即可完成闪烁效果。

7、编写按键程序

我们的按键配置为,PB0-PB3为输入中断,PB4为GPIO输入检测,因此先编写外部中断的回调函数。其实我们要分析清楚这几个按键的功能:

  • PB0控制数字加,从0-9-0-9-如此往复,因此此按键决定输入的密码值

  • PB1控制数字减,作用类似PB0

  • PB2控制输入数字在密码中的位置。

综上,我们编写代码如下:


//按键回调函数B1-3
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin==KEY1_Pin) //按键1按下时的功能:数字+1
    {
        for(int i=0;i<0xffff;i++); //消抖延时
        if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)//按键确实按下
        {
            if(IN_Mima[Pos/2 - 3]>=9) //当前输入位置上的数字,如果大于9清零
                IN_Mima[Pos/2 - 3]=0;
            else 
                IN_Mima[Pos/2 - 3]++; //小于9则加1
        }
        while(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0);//等待按键释放
    }
    
    if(GPIO_Pin==KEY2_Pin) //按键2按下时的功能:数字-1
    {
        for(int i=0;i<0xffff;i++); //消抖延时
        if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==0)//按键确实按下
        {
            if(IN_Mima[Pos/2 - 3]<=0) //当前输入位置上的数字,如果小于0则赋值9
                IN_Mima[Pos/2 - 3]=9;
            else 
                IN_Mima[Pos/2 - 3]--; //递减
        }
        while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==0);//等待按键释放
    }
    
        if(GPIO_Pin==KEY3_Pin) //按键3按下时的功能:位置+1
    {
        for(int i=0;i<0xffff;i++); //消抖延时
        if(HAL_GPIO_ReadPin(KEY3_GPIO_Port,KEY3_Pin)==0)//按键确实按下
        { 
            switch(Pos) //使用一个类似状态机的语句
            {
                case POS1:Pos=POS2;break; //1->2
                case POS2:Pos=POS3;break; //2->3
                case POS3:Pos=POS4;break; //3->4
                case POS4:Pos=POS1;break; //4->1
            
            }
        }
        while(HAL_GPIO_ReadPin(KEY3_GPIO_Port,KEY3_Pin)==0);//等待按键释放
    }
    
}

上面的代码最后都要加一个释放检测,有很多同学可能觉得这个没有必要,但实际上,释放检测对于需要计数的按键十分关键,它使得我们长按按键时,不会出现一直加的现象,让代码运行更稳定,还有注意不要遗漏消抖

对于PB4,我们需要在滴答定时器的中断函数中编写按键检测程序:

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
    /*  KEY4程序 :密码提交与验证  */
    if((HAL_GPIO_ReadPin(KEY4_GPIO_Port,KEY4_Pin)==0)&&(B4_valid==1))//B4_valid=1时检测按键。
    {
        for(int i=0;i<0xffff;i++);//延时
        if(HAL_GPIO_ReadPin(KEY4_GPIO_Port,KEY4_Pin)==0)//确认按键按下
        {
            if((Mima[0] == IN_Mima[0])&&(Mima[1] == IN_Mima[1])&&(Mima[2] == IN_Mima[2])&&(Mima[3] == IN_Mima[3]))//密码比对
            {
                Input_Times=0; //清零错误次数
                Yes=2; //INPUT_PAGE-->CORRE_PAGE
                IN_Mima[0]=0; //清空密码
                IN_Mima[1]=0;
                IN_Mima[2]=0;
                IN_Mima[3]=0;
                
            }
            else if(Input_Times>=3)//如果错误次数大于3
            {
                IN_Mima[0]=0;
                IN_Mima[1]=0;
                IN_Mima[2]=0;
                IN_Mima[3]=0;                
                Yes=0;//INPUT_PAGE-->ERROR_PAGE
                Input_Times=0;
            }
            else//每次密码不正确都加1
            {
                Yes=1;
                Input_Times++;
            }
            
            while(HAL_GPIO_ReadPin(KEY4_GPIO_Port,KEY4_Pin)==0);//等待按键释放
                
        }
    }

B4完成的功能是错误次数计数,密码比较的工作,输出的结果为Yes的值(用于判断态转移)

8、输入显示函数消影

大家看输入显示函数开始,有先把位置值赋给一个变量的语句,之后的闪烁位置其实是根据这个变量来确定的:

    uint8_t Pos_t;
    Pos_t=Pos; //消除残影

这是在我写完按键之后测试时发现的问题,如果位置闪烁的参数用的是Pos,那么当显示黑底白字和黑色方块中间这0.5s时按下位移按钮,那么就会出现拖影(因为前一个可能是位置三,后一个在按下后加1变成位置四了)。

9、串口最后完善

前面我们的串口还差一个发送警告的功能没有实现,到现在状态机编写好之后,我们变可以在相应状态的块里编写相应要执行的函数:

switch(Page) //switch语句实现状态机
{
    case ERROR_PAGE://错误页面执行的操作
    {
        Page=INPUT_PAGE; //状态转移:下一个状态一定为输入
        Yes=1;
        sprintf((char*)T_Data,"WARNING"); //发送警告
        HAL_UART_Transmit(&huart1,T_Data,7,500);
        __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,250); //输出占空比25%
         LCD_Display_Erro();
}break;

10、编写ADC检测电压代码

其实现在我们大部分代码都已经编写好了,接下来就是填充的过程了。ADC代码的逻辑很好理解,我们定义一个有效标志,在B4按键检测中结合此有效位决定提交是否有效。

HAL_ADC_Start(&hadc2);
        if(HAL_ADC_GetValue(&hadc2)<2047) //小于1.65V
            B4_valid=1;
        else
            B4_valid=0; //大于1.65V

11、编写PWM输出代码

PWM输出更加简单,就是在对应状态使用HAL_TIM_SetCompare函数,设置占空比,这里贴出状态机的全部代码:

switch(Page) //switch语句实现状态机
{
    case INPUT_PAGE: //输入页面执行的操作
    {
        
        HAL_ADC_Start(&hadc2);
        if(HAL_ADC_GetValue(&hadc2)<2047) //小于1.65V
            B4_valid=1;
        else
            B4_valid=0; //大于1.65V
        
         HAL_ADC_Start(&hadc2);
switch(Input_Times) //输入界面要同时考虑到LED3和LED2和LED1的情况
{
    case 0:{
        if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x07);
        else
        Led_Disp(0x03);
       } break;
    case 1:{
        if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x06);
        else
    Led_Disp(0x02);
       } break;
    case 2:{
        if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x05);
        else
   Led_Disp(0x01);
       } break;
    case 3:{
                if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x04);
        else
   Led_Disp(0x00);
       } break;    
   }
        if(Yes==1)
        {
            Page=INPUT_PAGE;  //保持输入状态
            LCD_Display_Input();
            __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,100); //输出占空比10%
        }
        if(Yes==0)
        {
            Page=ERROR_PAGE; //密码错误
        }
        if(Yes==2)
        {
            Page=CORRE_PAGE; //密码正确
        }
        
        
    }break; 
    case ERROR_PAGE://错误页面执行的操作
    {
        Page=INPUT_PAGE; //状态转移:下一个状态一定为输入
        Yes=1;
        sprintf((char*)T_Data,"WARNING"); //发送警告
        HAL_UART_Transmit(&huart1,T_Data,7,500);
        __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,250); //输出占空比25%
         LCD_Display_Erro();

        

    }break;
    case CORRE_PAGE://正确页面执行的操作
    {
        Yes=1;
        Page=INPUT_PAGE; //状态转移:下一个状态一定为输入
        __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,750); //输出占空比75%
        
        Led_Disp(0x08); //点灯0000_1000
        
        LCD_Display_Success();
        
        Led_Disp(0x00); //灭灯
        
    }break;

}

12、LED显示代码

LED显示唯一的难点就在于输入页面的显示,既要显示剩余次数,又要显示按键有效状态,因此使用一个switch语句进行综合判断:

switch(Input_Times) //输入界面要同时考虑到LED3和LED2和LED1的情况
{
    case 0:{
        if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x07);
        else
        Led_Disp(0x03);
       } break;
    case 1:{
        if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x06);
        else
    Led_Disp(0x02);
       } break;
    case 2:{
        if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x05);
        else
   Led_Disp(0x01);
       } break;
    case 3:{
                if(HAL_ADC_GetValue(&hadc2)<2047)
        Led_Disp(0x04);
        else
   Led_Disp(0x00);
       } break;    
   }

至此代码设计就已经完成,具体的完整工程待我贴出。

三、检查Bug

最后的步骤就是查一下程序是否存在Bug,然后再仔细检查一下提交的文件命名与格式,准备交卷!

总结

这个题目相对于省赛稍微难一点,因此十分锻炼人,看完这个再去看省赛题简直不要太轻松!非常好!在这个过程中,其实无非是要熟练使用各种外设,培养起规范,然后按部就班,从易到难,从外到内,一步步给它完成。

还有一个习惯我觉得大家可以学习,就是写一段,编译一下,写完了一个小模块就测试一下,不要等最后再编译,到时候很多问题就不好解决了!文章来源地址https://www.toymoban.com/news/detail-409278.html

到了这里,关于蓝桥杯嵌入式--实战模拟题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【蓝桥杯嵌入式】第十四届蓝桥杯嵌入式[模拟赛1]程序设计试题及详细题解

    模拟赛1的题目中需要的准备的知识点不多,其中只用到了 串口 、 LCD 、 LED 、 按键 、 定时器的PWM输出 、以及 ADC 等几个模块,题目要求也简单详细并且数量不多,非常适合入门比赛,以及整合自己比赛的模块。 与模拟赛2相比,当然是模拟赛2的试题比较难啦,虽然需要的模

    2023年04月13日
    浏览(34)
  • 【蓝桥杯嵌入式】第十四届蓝桥杯嵌入式[模拟赛2]程序设计试题及详细题解

    这次的模拟赛试题模块还是一些常见模块: LCD 、 LED 、 按键 、 定时器 以及 串口 ,相对比较常规,相比于真正的省赛也比较简单。但是它 适合刚刚学完各个模块需要做真题的同学 ,可以借此来巩固自己之前所学;对于已经能够掌握各个模块的同学也是有帮助的,就是平台

    2023年04月13日
    浏览(41)
  • 【蓝桥杯嵌入式】蓝桥杯嵌入式第十二届省赛题,考点:模拟电压,串口通信,计时器

     🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式

    2023年04月09日
    浏览(43)
  • 2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷5

      题目来源于小码王公众号,有更多答案解析可评论区留言   第一题 题目:输入一个整数n,计算其各位上数字之和,并用汉语写出每一位数字并输出。 【输入格式】一个整数 【输出格式】再一行内输出数字之和的每一位对应的汉字 【输入样例】1234 【输出样例】一零    

    2024年02月16日
    浏览(33)
  • 金仓数据库模拟题

    1、 在KingbaseESv8的数据目录中,系统表保存在哪个目录下()? [单选题] * A.base B.global(正确答案) C.sys_tblspc D.audit 2、以下哪些进程是KingbaseESv8的后台进程() ? [单选题] * A.checkpointer(正确答案) B.kworker C.es_server D.sys_ctl 3、下列属于KingbaseES的共享缓存区的是() ? [单选题] * A.wo

    2024年01月21日
    浏览(34)
  • openstack COA 考试模拟题

    version: 201911 You are the cloud administrator of a fictitious company named ESCloud. You have been tasked with setting up Openstack Environments for marketing and finance departments. Task 1 The company has two departments, named marketing and finance. For each of the two departments create projects with details below: Project Name: marketing finance Descr

    2023年04月19日
    浏览(32)
  • pta模拟题——7-34 刮刮彩票

    “刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示: 每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 3×3 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可

    2024年02月04日
    浏览(41)
  • hw大一Python模拟题详解

    一、选择题 1、关于Python语言的特点,以下选项描述正确的是( B )。 A.Python语言不支持面向对象。            B.Python语言是解释型语言。 C.Python语言是编译型语言。              D.Python语言是非跨平台语言。 解析: Python 是一种解释型、面向对象、动态数据类型

    2024年01月16日
    浏览(29)
  • 软考高项:信息网络安全模拟题

    280、在TCP/IP的体系架构中,ARP协议位于(),它的作用是()。 A.网络层将MAC地址解析为IP地址 B.链路层将MAC地址解析为IP地址 C.网络层将IP地址解析为MAC地址 D.链路层将lP地址解析为MAC地址 正确答案:D 解析:在TCP/IP的体系架构中,ARP协议位于链路层,它的作用是将IP地址解析为MAC地址

    2024年02月13日
    浏览(33)
  • 736. Lisp 语法解析 : DFS 模拟题

    这是 LeetCode 上的 736. Lisp 语法解析 ,难度为 困难 。 Tag : 「DFS」、「模拟」、「哈希表」 给你一个类似 Lisp 语句的字符串表达式 expression ,求出其计算结果。 表达式语法如下所示: 表达式可以为整数, let 表达式, add 表达式, mult 表达式,或赋值的变量。表达式的结果总是

    2024年02月03日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包