当前位置:   article > 正文

stm32GUI滑杆图形操作界面_用stm32f4做图形界面

用stm32f4做图形界面

本文是关于图形滑杆操作界面的底层编写,是在stm32f4单片机上,2.4寸320*240彩色tft屏幕上实现的当然也可以移植到其他单片机和屏幕上。

首先是背景界面的编写

背景界面的编写,可以方便到时候从某个功能退出时,直接把屏幕恢复到主界面

  1. void back_screen(void) //显示界面函数
  2. {
  3. Lcd_ColorBox(0,0,320,240,WHITE); //清屏,显示为白色
  4. print_text(30,70,'c',RED,YELLOW); //在某某坐标显示一个char类型字符
  5. print_text(30,78,'a',RED,YELLOW); //camera即摄像头按钮
  6. print_text(30,86,'m',RED,YELLOW);
  7. print_text(30,94,'e',RED,YELLOW);
  8. print_text(30,102,'r',RED,YELLOW);
  9. print_text(30,110,'a',RED,YELLOW);
  10. print_text(30,10,'R',RED,YELLOW); //rece 即receive 蓝牙接收数据显示
  11. print_text(30,18,'e',RED,YELLOW);
  12. print_text(30,26,'c',RED,YELLOW);
  13. print_text(30,34,'e',RED,YELLOW);
  14. wite(30,50,0,RED,YELLOW); //这个是在屏幕上显示个冒号
  15. print_text(30,160,'G',RED,YELLOW); //gogo发车按钮,可以根据自己的实际用途更改
  16. print_text(30,168,'O',RED,YELLOW);
  17. print_text(30,176,'G',RED,YELLOW);
  18. print_text(30,184,'O',RED,YELLOW);
  19. //操作值P的滑杆显示
  20. print_text(312,5,'P',BLUE,WHITE); //在屏幕上显示p
  21. Lcd_ColorBox(304,13,2,203,MAROON); //画一根棕色的线
  22. wite(312,p+13,0,YELLOW,YELLOW); //在线上根据p的值的大小显示滑块的位置
  23. print_number(312,216,p,BLACK,WHITE,3);
  24. print_text(250,5,'D',BLUE,WHITE); //操作值D的滑杆显示
  25. Lcd_ColorBox(242,13,2,203,MAROON);
  26. wite(250,d+13,0,YELLOW,YELLOW);
  27. print_number(250,216,d,BLACK,WHITE,3);
  28. print_text(188,5,'S',BLUE,WHITE); // 操作值S的滑杆显示 即舵机角度
  29. Lcd_ColorBox(180,13,2,203,MAROON);
  30. wite(188,servo+13,0,YELLOW,YELLOW);
  31. print_number(188,216,servo,BLACK,WHITE,3);
  32. print_text(126,5,'A',BLUE,WHITE); //电机A的速度滑杆显示
  33. Lcd_ColorBox(120,13,2,203,MAROON);
  34. wite(128,motor1+113,0,YELLOW,YELLOW); //判断速方向,进而显示±
  35. if(motor1>=0)
  36. {
  37. print_number(128,216,motor1,BLACK,WHITE,3);
  38. wite(114,216,11,BLACK,WHITE);
  39. }
  40. else
  41. {
  42. print_number(128,216,(-motor1),BLACK,WHITE,3);
  43. wite(114,216,13,BLACK,WHITE);
  44. }
  45. print_text(64,5,'B',BLUE,WHITE);
  46. Lcd_ColorBox(58,13,2,203,MAROON);
  47. wite(66,motor2+113,0,YELLOW,YELLOW);
  48. if(motor2>=0)
  49. {
  50. print_number(66,216,motor2,BLACK,WHITE,3);
  51. wite(52,216,11,BLACK,WHITE);
  52. }
  53. else
  54. {
  55. print_number(66,216,(-motor2),BLACK,WHITE,3);
  56. wite(52,216,13,BLACK,WHITE);
  57. }
  58. }

 

之后是在主界面采用轮询的方式,循环读取是否有触摸产生,并执行相应的操作

 轮询我是在main里面的while循环轮询,有某些触摸产生时,判断触摸的位置,进入相应的程序

 

  1. while(1)
  2. {
  3. flag=0; //屏幕触摸中断标志位,一般屏幕中断不开启因为采用轮询,在进入摄像头的程序后,怕再次轮询耽误摄像头执行效率就用了触摸中断返回
  4. tx=TOUCH_X(); //读取触摸的x轴坐标
  5. ty=TOUCH_Y();//读取触摸的y轴坐标 我的屏幕上横向的是y轴
  6. print_text(270,142,'x',BLACK,WHITE); //显示出读到的坐标,方便开发GUI时快速找准触摸位置
  7. print_number(270,158,tx,BLACK,WHITE,4);
  8. print_text(270,190,'y',BLACK,WHITE);
  9. print_number(270,206,ty,BLACK,WHITE,4);
  10. if(tx>20&&tx<65) //p 判断如果触摸点是在P对应的滑杆上则执行以下程序
  11. {
  12. if(ty<21)ty=21; //限幅,
  13. if(p>200)p=200;
  14. p=ty-21; //将触摸的位置坐标赋给p值,-21是为了补偿
  15. Lcd_ColorBox(296,13,17,203,WHITE); //首先清空p滑杆
  16. Lcd_ColorBox(304,13,2,203,MAROON); //画上滑杆
  17. wite(312,p+13,0,YELLOW,YELLOW); //显示出滑杆对应的位置
  18. print_number(312,216,p,BLACK,WHITE,3); //并在滑杆尽头显示p的数值
  19. }
  20. if(tx>73&&tx<128) //D
  21. {
  22. if(ty<21)ty=21;
  23. d=ty-21;
  24. if(d>200)d=200;
  25. Lcd_ColorBox(234,13,17,203,WHITE);
  26. Lcd_ColorBox(242,13,2,203,MAROON);
  27. wite(250,d+13,0,YELLOW,YELLOW);
  28. print_number(250,216,d,BLACK,WHITE,3);
  29. }
  30. if(tx>288&&tx<320&&ty>73&&ty<120) //摄像头入口程序
  31. {
  32. cam_backround();
  33. VS_Enable();
  34. delay_ms(1000);
  35. touch_Enable();
  36. while(flag==0);
  37. PLCK_Disable();
  38. touch_Disable();
  39. back_screen(); //摄像头结束后返回主界面
  40. }
  41. if(tx>135&&tx<186) //舵机入口程序
  42. {
  43. if(ty<42)ty=42;
  44. servo=ty-21;
  45. if(servo>170)servo=170;
  46. Lcd_ColorBox(172,13,17,203,WHITE);
  47. Lcd_ColorBox(180,13,2,203,MAROON);
  48. wite(188,servo+13,0,YELLOW,YELLOW);
  49. print_number(188,216,servo,BLACK,WHITE,3);
  50. TIM_SetCompare1(TIM1,(9*servo+1750));
  51. }
  52. if(tx<240&&tx>190) //motor1程序,可按需求编写
  53. {
  54. motor_off(2);
  55. motor_off(1);
  56. if(ty<21)ty=21;
  57. motor1=ty-21-100;
  58. if(motor1>100)motor1=100;
  59. Lcd_ColorBox(112,13,17,203,WHITE);
  60. Lcd_ColorBox(120,13,2,203,MAROON);
  61. wite(128,motor1+113,0,YELLOW,YELLOW);
  62. if(motor1>=0)
  63. {
  64. print_number(128,216,motor1,BLACK,WHITE,3);
  65. wite(114,216,11,BLACK,WHITE);
  66. }
  67. else
  68. {
  69. print_number(128,216,(-motor1),BLACK,WHITE,3);
  70. wite(114,216,13,BLACK,WHITE);
  71. }
  72. }
  73. }

 

效果演示(gif自动加速,无奈)

控制舵机演示

 

 

进入摄像头演示

 

                                                                                                          转载请注明:TECH淮

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/477031
推荐阅读
相关标签
  

闽ICP备14008679号