2022中职国赛

2022中职国赛stm32开发

题目

image-20221014074408238

image-20221014074421651

image-20221014074432859

分析:

  • 题目不难

  • 如果取模小文字会麻烦一些

  • 注释很详细

代码

/**
  ******************************************************************************
  * 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 "adc_reader.h" //光照获取值必备头文件


/*---------------------------------------------------------------------------------------------*/



//32*32
//笑脸
uint8_t Weixiao[] = {
0x00,0x00,0x80,0xC0,0xF0,0xF0,0x78,0x3C,0x3C,0x1E,0x0F,0x0F,0x0F,0x0F,0x07,0x07,
0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x1E,0x3C,0x3C,0x78,0xF0,0xF0,0xC0,0xC0,0x00,0x00,
0xFC,0xFE,0xFF,0x3F,0x03,0x01,0x00,0x00,0x1F,0x3F,0x3F,0x3F,0x1F,0x0E,0x00,0x00,
0x00,0x00,0x0E,0x1F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x01,0x03,0x3F,0xFF,0xFE,0xFC,
0x3F,0x7F,0xFF,0xFC,0xC0,0x80,0x00,0x00,0x1C,0x7C,0xFC,0xF8,0xE0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xE0,0xF8,0xFC,0x7C,0x1C,0x00,0x00,0x80,0xC0,0xFC,0xFF,0x7F,0x3F,
0x00,0x00,0x01,0x03,0x0F,0x0F,0x3E,0x3C,0x3C,0x78,0xF0,0xF0,0xF1,0xF3,0xE3,0xE3,
0xE3,0xE3,0xF3,0xF1,0xF0,0xF0,0x78,0x3C,0x3C,0x3E,0x0F,0x0F,0x03,0x03,0x00,0x00
};
//不笑脸
uint8_t buxiao[] = {
0x00,0x00,0x80,0xC0,0xF0,0xF0,0x78,0x3C,0x1C,0x1E,0x0E,0x0F,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x0F,0x0E,0x1E,0x1C,0x3C,0x78,0xF0,0xF0,0xC0,0x80,0x00,0x00,
0xF8,0xFE,0xFF,0x0F,0x03,0x00,0x00,0x00,0x1E,0x1F,0x3F,0x3F,0x1F,0x0C,0x00,0x00,
0x00,0x00,0x0C,0x1F,0x3F,0x3F,0x1F,0x1E,0x00,0x00,0x00,0x03,0x0F,0xFF,0xFE,0xF8,
0x1F,0x7F,0xFF,0xF0,0xC0,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x10,0x00,0x00,0xC0,0xF0,0xFF,0x7F,0x1F,
0x00,0x00,0x01,0x03,0x0F,0x0F,0x1E,0x3C,0x38,0x78,0x70,0xF0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xF0,0x70,0x78,0x38,0x3C,0x1E,0x0F,0x0F,0x03,0x01,0x00,0x00
};
//哭脸
uint8_t bukaixin[] = {
0x00,0x00,0x80,0xC0,0xF0,0xF0,0x78,0x3C,0x1E,0x1E,0x0E,0x0F,0x0F,0x07,0x07,0x07,
0x07,0x07,0x07,0x0F,0x0F,0x0E,0x1E,0x1E,0x3C,0x78,0xF8,0xF0,0xE0,0x80,0x00,0x00,
0xF8,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,0x1E,0x3F,0x3F,0x3F,0x1F,0x0E,0x00,0x00,
0x00,0x00,0x0C,0x1F,0x3F,0x3F,0x3F,0x1E,0x00,0x00,0x00,0x03,0x1F,0xFF,0xFF,0xF8,
0x1F,0xFF,0xFF,0xF8,0xC0,0x00,0x00,0x02,0x02,0xE0,0xF0,0xF8,0x3C,0x1C,0x1E,0x0E,
0x0E,0x1C,0x1C,0x7C,0xF8,0xF0,0xC0,0x02,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0x1F,
0x00,0x00,0x01,0x07,0x0F,0x1F,0x1E,0x3C,0x78,0x78,0x70,0xF0,0xF0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xF0,0xF0,0x70,0x78,0x78,0x3C,0x1E,0x1F,0x0F,0x07,0x01,0x00,0x00
};


//40*35 大心
uint8_t Mxin[] = {
0xE0,0xF8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
0xFE,0xFC,0xF8,0xF0,0xF0,0xF8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0xF8,0xE0,0x7F,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,0x7F,
0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
0x3F,0x1F,0x0F,0x07,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//32*29 小心
uint8_t mxin[] = {
0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0xF8,
0xF8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,
0x0F,0x3F,0x7F,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,0x7F,0x3F,0x0F,
0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x0F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0x0F,
0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uint8_t BQ[][32] = {
    /*--  文字:  表  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x04,0x24,0x24,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0x24,0x24,0x04,0x00,0x00,
0x21,0x21,0x11,0x09,0xFD,0x83,0x41,0x23,0x05,0x09,0x11,0x29,0x25,0x41,0x41,0x00,

/*--  文字:  情  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xE0,0x00,0xFF,0x10,0x64,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00,
};


uint8_t OLED_State = 0; //oled屏幕的状态
uint8_t Page = 1;		//界面A图片状态


/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
    // 开发板平台初始化
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
	 
}

/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
//按键检测
void KeyDownHandler(void) {


        if(isKey2Pressed()){
            OLED_State = 0;
            OLED_Clear();//定时清屏
            resetKey2();
        }
        if(isKey3Pressed()){
            OLED_State = 1;
            OLED_Clear();
            resetKey3();
        }

        if(isKey4Pressed()){
                resetKey4();
                Page++;
                OLED_Clear();//定时清屏
            } if(Page == 4)Page = 1;//使其反复







	
}

/**********************************************************************************************
*函数:void handlerPre10Ms( void )
*功能:10毫秒循环
*输入:无
*输出:无
*特殊说明:循环处理总时长300ms
**********************************************************************************************/
void handlerPre10Ms(void) {
    for (int delay = 0; delay < 30; delay++) {
        HAL_Delay(10);
        
    }
}

void Xintiao(uint32_t hz){ //设置心跳周期
static uint32_t t = 0;//计时

    if(t == 0){
    OLED_Clear();
    OLED_DrawBMP(48,2,32,32,mxin);
            GpioWrite(&Led1,1);
            GpioWrite(&Led2,0);
    }
    HAL_Delay(1);
    t++;
    if(t== hz/2&&t < hz){
         OLED_DrawBMP(44,1,40,40,Mxin);
        GpioWrite(&Led1,0);
        GpioWrite(&Led2,1);
    }
    if(t > hz)
    t = 0;

}

    uint8_t arr[10]  ={'\0'};
    uint8_t H=12,M=0,S=0;
    uint32_t MS = 0;
void time(){ //计时




            HAL_Delay(1);
            MS++;
            if(MS == 100){S++;MS = 0;}//延时周期根据代码实际情况
            if(S == 60){M++;S = 0;}
            if(M == 60){H++;M = 0;}
            if(H == 24)H = 0;
            sprintf(arr,"%02d:%02d:%02d",H,M,S);//设置时间格式

}

/**
 * Main application entry point.
 */
int main( void ) //主函数
{

    //一些必要初始化
    Init();
    OLED_Init();
    OLED_Clear();
    ADCS_Init();

    while( 1 )
    {
        time();//计时
KeyDownHandler();

        if(OLED_State == 0){// A页面
            GpioWrite(&Led1,0);GpioWrite(&Led2,0);

            OLED_ShowString(64,0,arr);//显示时间


                switch(Page){//显示图片文字

                    case 1:OLED_DrawBMP(48,2,32,32,Weixiao);
                    break;
                    case 2:OLED_DrawBMP(48,2,32,32,buxiao);
                    break;
                    case 3:OLED_DrawBMP(48,2,32,32,bukaixin);
                    break;

                }
            OLED_ShowCHineseArray(48,6,BQ[0]);OLED_ShowCHineseArray(64,6,BQ[1]);
            
            }else { //B页面

            AdcScanChannel();
            float L = (5/2.0)*AdcReadCh0()*100;//光照值转换公式
            sprintf(arr,":%.2fLux",L);
            OLED_ShowCHinese(16,6,29);OLED_ShowCHinese(32,6,30);OLED_ShowString(48,6,arr);//显示中文输出光照值
            Xintiao(10+L);//心跳频率   -- 光照越大越快
            /*
            //题目要求  光照大于100 500ms 小于100 100ms
            if(L>100){
                Xintiao(500);
            }else
            Xintiao(100);
            */

            
            }
			

    }
}

拟图

image-20221014073859816

image-20221014074225689

image-20221014074232935

image-20221014074237142

posted @ 2022-10-17 10:33  ~内个臣呐~  阅读(211)  评论(0)    收藏  举报