小蜜蜂笔记
嵌入式开发与物联网应用教育践行者

【赛题详解】2019年物联网国赛任务三题2-Lora控制液晶屏(附全部源码与核心注释)

题目要求

关键源码

特别提示
【1】如果在XMF07C开发板上完成该题目,需对LED1的引脚稍做修改。
board.h文件中,将LED1引脚的宏定义由原来的PA3改为PB9
该部分如有问题,详见视频:《解读国赛LoRa通用库与课程小结》
【2】在国赛ROLA板中,LED灯是低电平点亮;而在XMF07C开发板中,LED灯是高电平点亮的。

//对三个按键进行宏定义
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)
//根据题目要求,用取字模软件生产汉字数组
char liang[32] = {0x00,0x04,0x04,0x74,0x54,0x54,0x55,0x56,0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x00,0x84,0x83,0x41,0x21,0x1D,0x05,0x05,0x05,0x05,0x05,0x7D,0x81,0x81,0x85,0xE3,0x00};
char deng[32] = {0x80,0x70,0x00,0xFF,0x20,0x10,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00,0x80,0x60,0x18,0x07,0x08,0x30,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00};
char mo[32] = {0x10,0x10,0xD0,0xFF,0x90,0x14,0xE4,0xAF,0xA4,0xA4,0xA4,0xAF,0xE4,0x04,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x89,0x4B,0x2A,0x1A,0x0E,0x1A,0x2A,0x4B,0x88,0x80,0x00};
char shi[32] = {0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00,0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00};
char chang[32] = {0x20,0x18,0x08,0xEA,0xAC,0xA8,0xA8,0xAF,0xA8,0xA8,0xAC,0xEA,0x08,0x28,0x18,0x00,0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00};
char hu[32] = {0x00,0xFC,0x04,0x04,0xFC,0x00,0x04,0x14,0x64,0x04,0xFE,0x02,0x43,0x32,0x00,0x00,0x00,0x0F,0x04,0x04,0x0F,0x00,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x00};
char xi[32] = {0x00,0xFC,0x04,0x04,0xFC,0x02,0x02,0xFE,0x02,0x02,0x62,0x5A,0x46,0xC0,0x00,0x00,0x00,0x0F,0x04,0x04,0x4F,0x30,0x8E,0x81,0x46,0x28,0x10,0x28,0x46,0x81,0x80,0x00};
char jiao[32] = {0x08,0x08,0x88,0x68,0x08,0x08,0x09,0x0E,0x08,0x08,0x88,0x28,0x48,0x88,0x08,0x00,0x80,0x81,0x40,0x40,0x21,0x22,0x14,0x08,0x14,0x22,0x41,0x40,0x80,0x81,0x80,0x00};
char ti[32] = {0x10,0x94,0x54,0x34,0x1F,0x34,0x54,0x80,0x54,0x34,0x1F,0x34,0x54,0x94,0x90,0x00,0x01,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00};
char mie[32] = {0x02,0x02,0x82,0x72,0x02,0x02,0x02,0xFE,0x02,0x02,0x82,0x42,0x32,0x02,0x02,0x00,0x80,0x81,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00};
//定义按键状态与系统状态变量
int Stat_key = 1, Stat_sys = 1;
//定义菜单显示函数
void OLED_display_file()
{
    OLED_ShowCHineseArray(0,0,liang);
    OLED_ShowCHineseArray(20,0,deng);
    OLED_ShowCHineseArray(40,0,mo);
    OLED_ShowCHineseArray(60,0,shi);
	
    OLED_ShowString(0,2,(uint8_t *)"1.");
    OLED_ShowCHineseArray(20,2,chang);
    OLED_ShowCHineseArray(40,2,liang);
    OLED_ShowCHineseArray(60,2,mo);
    OLED_ShowCHineseArray(80,2,shi);
	
    OLED_ShowString(0,4,(uint8_t *)"2.");
    OLED_ShowCHineseArray(20,4,hu);
    OLED_ShowCHineseArray(40,4,xi);
    OLED_ShowCHineseArray(60,4,mo);
    OLED_ShowCHineseArray(80,4,shi);
	
    OLED_ShowString(0,6,(uint8_t *)"3.");
    OLED_ShowCHineseArray(20,6,jiao);
    OLED_ShowCHineseArray(40,6,ti);
    OLED_ShowCHineseArray(60,6,liang);
    OLED_ShowCHineseArray(80,6,mie);
}
//定义按键扫描函数
void Scan_Keys()
{
    if(KEY2 == 0)
    {
        HAL_Delay(1);
	if(KEY2 == 0)
	{
	    OLED_ShowString(100,2*Stat_key,(uint8_t *)" ");
	    Stat_key--;
	    if(Stat_key == 0)
	    {
	        Stat_key = 1;
	    }
	    OLED_ShowString(100,2*Stat_key,(uint8_t *)"<");
	    while(KEY2 == 0);
        }
    }
	
    if(KEY3 == 0)
    {
	HAL_Delay(1);
	if(KEY3 == 0)
	{
	    OLED_ShowString(100,2*Stat_key,(uint8_t *)" ");
	    Stat_key++;
	    if(Stat_key == 4)
	    {
	        Stat_key = 3;
	    }
	    OLED_ShowString(100,2*Stat_key,(uint8_t *)"<");
	    while(KEY3 == 0);
	}
    }
	
    if(KEY4 == 0)
    {
	HAL_Delay(1);
	if(KEY4 == 0)
	{
	    Stat_sys = Stat_key;          //将按键状态导入系统状态
	    if(Stat_sys == 3)             //为两灯交替做准备
	    {
	        GpioWrite( &Led1, 1 );
	        GpioWrite( &Led2, 0 );
	    }
	    while(KEY4 == 0);
	}
    }
}
//在main()函数中添加下面的代码:
OLED_Init();                       //初始化OLED屏
OLED_display_file();               //显示菜单
OLED_ShowString(100,2*Stat_sys,(uint8_t *)"<");
startLedBreath();                  //使能呼吸灯
while( 1 )
{
    switch(Stat_sys)               //判断系统状态
    {
    case 1:                        //LED1和LED2全亮
	 GpioWrite( &Led1, 1 );    //特别注意:XMF07C高电平点亮LED,国赛LORA板低电平点亮LED
	 GpioWrite( &Led2, 1 );
    break;
				
    case 2:                       //呼吸灯
	 breathLed();
	 HAL_Delay(1);
    break;
				
    case 3:                       //LED1和LED2交替点亮
	 GpioToggle(&Led1);
	 GpioToggle(&Led2);
	 HAL_Delay(500);          //延时0.5秒
    break;
    }
    Scan_Keys();
}

XMF07C赛教版(淘宝链接

赞(26)
未经允许不得转载:小蜜蜂笔记 » 【赛题详解】2019年物联网国赛任务三题2-Lora控制液晶屏(附全部源码与核心注释)

小蜜蜂笔记 更专业 更方便 更高效

联系我们精品小店