当前位置:   article > 正文

2023年第十四届蓝桥杯省赛编程题讲解_蓝桥杯2023

蓝桥杯2023

题目:

 一、编程步骤

1.实现LCD界面

  1. 数据界面

2.参数界面

 

3. 统计界面

 4.LCD显示要求

二、实现代码

1.设置满足显示要求

  • 背景色:黑色
  • 前景色:白色

2.设置一个全局变量:uint8_t lcd_p =1;//lcd页面位置 :命名为 lcd_page更好。

  1. oid Lcd_Proc(void)
  2. {
  3. if((uwTick - uwTick_Lcd_Set_Point)< 50) return;//减速函数
  4. uwTick_Lcd_Set_Point = uwTick;
  5. if(lcd_p == 1)
  6. {
  7. sprintf((char *)lcd_buf," DATA ");
  8. LCD_DisplayStringLine(Line1, (u8*)lcd_buf);
  9. sprintf((char *)lcd_buf," M=%c ",m);
  10. LCD_DisplayStringLine(Line3, (u8*)lcd_buf);
  11. sprintf((char *)lcd_buf," P=%d%% ",p);
  12. LCD_DisplayStringLine(Line4, (u8*)lcd_buf);
  13. sprintf((char *)lcd_buf," V=%.1f ",v);
  14. LCD_DisplayStringLine(Line5, (u8*)lcd_buf);
  15. }
  16. else if(lcd_p ==2 )
  17. {
  18. sprintf((char*)lcd_buf," PARA ");
  19. LCD_DisplayStringLine(Line1,(u8*)lcd_buf);
  20. sprintf((char*)lcd_buf," R=%d ",r_show);
  21. LCD_DisplayStringLine(Line3,(u8*)lcd_buf);
  22. sprintf((char*)lcd_buf," K=%d ",k_show);
  23. LCD_DisplayStringLine(Line4,(u8*)lcd_buf);
  24. }
  25. else if(lcd_p == 3)
  26. {
  27. sprintf((char*)lcd_buf," RECD ");
  28. LCD_DisplayStringLine(Line1,(u8*)lcd_buf);
  29. sprintf((char*)lcd_buf," N=%d ",n);
  30. LCD_DisplayStringLine(Line3,(u8*)lcd_buf);
  31. sprintf((char*)lcd_buf," MH=%.1f ",mh);
  32. LCD_DisplayStringLine(Line4,(u8*)lcd_buf);
  33. sprintf((char*)lcd_buf," ML=%.1f ",ml);
  34. LCD_DisplayStringLine(Line5,(u8*)lcd_buf);
  35. }
  36. }

3..按键切换lcd界面.

1.实现按键B1的功能

 (1)首先实现能切换界面

  1. if(Key_Down ==1 && Key_Val ==1)
  2. {
  3. lcd_p++;
  4. if(lcd_p ==2) //进入参数界面
  5. {
  6. }
  7. if(lcd_p ==3) // 从参数界面退出
  8. {
  9. }
  10. if(lcd_p >3) lcd_p =1;
  11. if(lcd_p ==1)
  12. {
  13. }
  14. LCD_Clear(Black);
  15. }

(2)实现三个界面里的内容 

a.定义界面一、二、三的参数

  1. //界面一的参数
  2. uint8_t m='L';
  3. uint8_t p=0; //实际占空比
  4. uint8_t v=0; //实际速度
  5. //界面二参数
  6. uint8_t r=1,k=1;
  7. uint8_t r_show=1,k_show=1;
  8. //界面三参数
  9. uint16_t n=0;
  10. float mh=0,ml=0;
  1. if(Key_Down ==1 && Key_Val ==1)
  2. {
  3. lcd_p++;
  4. if(lcd_p ==2) //进入参数界面
  5. {
  6. r_show = r;
  7. k_show = k;
  8. }
  9. if(lcd_p ==3) // 从参数界面退出
  10. {
  11. r = r_show;
  12. k = k_show;
  13. b2_set =1;
  14. }
  15. if(lcd_p >3) lcd_p =1;
  16. if(lcd_p ==1)
  17. {
  18. b4_cnt = 0;
  19. }
  20. LCD_Clear(Black);
  21. }
备注:从参数界面退出的时候不要保留上次的 R 和 K的值,让参数界面继续保持为初始化的参数值。

4.实现B2功能界面

(1)定义B2按键标志位  uint8_t b2_set = 1;    //==1R,==2K

(2)按键按下后,5秒内不可再触发的实现:

  • 定义滴答时钟变量 int b2_tick = -5000;    //计数b2的5s
    1. if(Key_Val == 2 && Key_Down ==2)
    2. {
    3. if(lcd_p ==1&& uwTick - b2_tick > 5000)
    4. {
    5. b2_tick = uwTick;
    6. if(m == 'H')
    7. {
    8. m= 'L';
    9. }
    10. else if( m == 'L')
    11. {
    12. m= 'H';
    13. }
    14. n++;
    15. }
    16. else if(lcd_p == 2)
    17. {
    18. if(b2_set == 1) b2_set =2;
    19. else if(b2_set ==2 ) b2_set = 1;
    20. }
    21. }

    5.实现B3功能界面

  • b2_set 用来选择参数界面的1----> R 和 2----->K
  • 当按键三按下的时候实现 R或k的参数 +,
    1. if(Key_Val==4&&Key_Down==4)
    2. {
    3. if(b2_set==1)
    4. {
    5. r_show++;
    6. if(r_show>10) r_show = 1;
    7. }
    8. else if(b2_set==2)
    9. {
    10. k_show++;
    11. if(k_show>10) k_show = 1;
    12. }
    13. }

    6.实现B4的功能

  1. if(key_val==4)
  2. {
  3. if(lcd_p==1)
  4. {
  5. if(lock==0)
  6. {
  7. b4_cnt++;
  8. }
  9. if(key_down==4&&lock==1)
  10. {
  11. lock = 0;
  12. b4_cnt = 0;
  13. }
  14. }
  15. if(lcd_p==2&&key_down==4)
  16. {
  17. if(b2_set==1)
  18. {
  19. r_show--;
  20. if(r_show<1) r_show = 10;
  21. }
  22. else if(b2_set==2)
  23. {
  24. k_show--;
  25. if(k_show<1) k_show = 10;
  26. }
  27. }
  28. }

(1)B4按键在数据界面的上锁功能实现

  1. if(Key_Up==4)
  2. {
  3. if(b4_cnt>=20) //按道理来算,2s/20ms=100,此处值应为100才对,但实验验证20才是2s左右
  4. lock = 1;
  5. b4_cnt = 0;
  6. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号