历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2019年09月11日 | stm32GUI滑杆图形操作界面

2019-09-11 来源:eefocus

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

首先是背景界面的编写

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


void back_screen(void)               //显示界面函数

{

Lcd_ColorBox(0,0,320,240,WHITE);   //清屏,显示为白色

print_text(30,70,'c',RED,YELLOW);    //在某某坐标显示一个char类型字符

print_text(30,78,'a',RED,YELLOW);    //camera即摄像头按钮

print_text(30,86,'m',RED,YELLOW);

print_text(30,94,'e',RED,YELLOW);

print_text(30,102,'r',RED,YELLOW);

print_text(30,110,'a',RED,YELLOW);

    print_text(30,10,'R',RED,YELLOW);        //rece 即receive 蓝牙接收数据显示

  print_text(30,18,'e',RED,YELLOW);

print_text(30,26,'c',RED,YELLOW);

print_text(30,34,'e',RED,YELLOW);

wite(30,50,0,RED,YELLOW);                //这个是在屏幕上显示个冒号

print_text(30,160,'G',RED,YELLOW);     //gogo发车按钮,可以根据自己的实际用途更改

   print_text(30,168,'O',RED,YELLOW);

      print_text(30,176,'G',RED,YELLOW);

      print_text(30,184,'O',RED,YELLOW);

    

//操作值P的滑杆显示

  print_text(312,5,'P',BLUE,WHITE);           //在屏幕上显示p

Lcd_ColorBox(304,13,2,203,MAROON);       //画一根棕色的线

wite(312,p+13,0,YELLOW,YELLOW);        //在线上根据p的值的大小显示滑块的位置

  print_number(312,216,p,BLACK,WHITE,3);

  print_text(250,5,'D',BLUE,WHITE);       //操作值D的滑杆显示

Lcd_ColorBox(242,13,2,203,MAROON);

wite(250,d+13,0,YELLOW,YELLOW);

   print_number(250,216,d,BLACK,WHITE,3);

print_text(188,5,'S',BLUE,WHITE);     //  操作值S的滑杆显示 即舵机角度

Lcd_ColorBox(180,13,2,203,MAROON);

  wite(188,servo+13,0,YELLOW,YELLOW);

   print_number(188,216,servo,BLACK,WHITE,3);

  

      print_text(126,5,'A',BLUE,WHITE);      //电机A的速度滑杆显示

      Lcd_ColorBox(120,13,2,203,MAROON);

      wite(128,motor1+113,0,YELLOW,YELLOW);   //判断速方向,进而显示±

if(motor1>=0)

        {

print_number(128,216,motor1,BLACK,WHITE,3);

wite(114,216,11,BLACK,WHITE);

}

else

{

print_number(128,216,(-motor1),BLACK,WHITE,3);

wite(114,216,13,BLACK,WHITE);

}

print_text(64,5,'B',BLUE,WHITE);

      Lcd_ColorBox(58,13,2,203,MAROON);

      wite(66,motor2+113,0,YELLOW,YELLOW);

if(motor2>=0)

        {

print_number(66,216,motor2,BLACK,WHITE,3);

wite(52,216,11,BLACK,WHITE);

}

else

{

print_number(66,216,(-motor2),BLACK,WHITE,3);

wite(52,216,13,BLACK,WHITE);

}

}

 


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

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


 


while(1)

 

{

  flag=0;  //屏幕触摸中断标志位,一般屏幕中断不开启因为采用轮询,在进入摄像头的程序后,怕再次轮询耽误摄像头执行效率就用了触摸中断返回

    tx=TOUCH_X();    //读取触摸的x轴坐标

  ty=TOUCH_Y();//读取触摸的y轴坐标   我的屏幕上横向的是y轴

  print_text(270,142,'x',BLACK,WHITE);   //显示出读到的坐标,方便开发GUI时快速找准触摸位置

print_number(270,158,tx,BLACK,WHITE,4);   

print_text(270,190,'y',BLACK,WHITE);

  print_number(270,206,ty,BLACK,WHITE,4);

if(tx>20&&tx<65)   //p   判断如果触摸点是在P对应的滑杆上则执行以下程序

  {

if(ty<21)ty=21;    //限幅,

           if(p>200)p=200;

p=ty-21; //将触摸的位置坐标赋给p值,-21是为了补偿 

Lcd_ColorBox(296,13,17,203,WHITE); //首先清空p滑杆

    Lcd_ColorBox(304,13,2,203,MAROON);    //画上滑杆

    wite(312,p+13,0,YELLOW,YELLOW);    //显示出滑杆对应的位置

      print_number(312,216,p,BLACK,WHITE,3);  //并在滑杆尽头显示p的数值

}

  if(tx>73&&tx<128)   //D

  {

   if(ty<21)ty=21;

    d=ty-21;

   if(d>200)d=200;

Lcd_ColorBox(234,13,17,203,WHITE);

    Lcd_ColorBox(242,13,2,203,MAROON);

   wite(250,d+13,0,YELLOW,YELLOW);

     print_number(250,216,d,BLACK,WHITE,3);

  }

  if(tx>288&&tx<320&&ty>73&&ty<120)   //摄像头入口程序

{

cam_backround();

VS_Enable(); 

delay_ms(1000);

touch_Enable();

while(flag==0);

PLCK_Disable();

touch_Disable();

  back_screen();          //摄像头结束后返回主界面

  if(tx>135&&tx<186)        //舵机入口程序   

  {

   if(ty<42)ty=42;

    servo=ty-21;

   if(servo>170)servo=170;

Lcd_ColorBox(172,13,17,203,WHITE);

      Lcd_ColorBox(180,13,2,203,MAROON);

      wite(188,servo+13,0,YELLOW,YELLOW);

        print_number(188,216,servo,BLACK,WHITE,3);

TIM_SetCompare1(TIM1,(9*servo+1750));   

  }

  

  if(tx<240&&tx>190)           //motor1程序,可按需求编写

  {

       motor_off(2);

       motor_off(1);

          if(ty<21)ty=21;

    motor1=ty-21-100;

if(motor1>100)motor1=100;

Lcd_ColorBox(112,13,17,203,WHITE);

Lcd_ColorBox(120,13,2,203,MAROON);

      wite(128,motor1+113,0,YELLOW,YELLOW);

if(motor1>=0)

        {

print_number(128,216,motor1,BLACK,WHITE,3);

wite(114,216,11,BLACK,WHITE);

}

else

{

print_number(128,216,(-motor1),BLACK,WHITE,3);

wite(114,216,13,BLACK,WHITE);

}

        

  }

 

}

 


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

控制舵机演示

进入摄像头演示

进入摄像头演示


推荐阅读

史海拾趣

EMC [ELAN Microelectronics Corp]公司的发展小趣事

为了进一步扩大市场份额,义隆电子积极实施国际化战略。公司在台湾新竹科学园区设立了全球营运总部,并在亚、美等二大洲建立了密集的行销暨技术中心。通过不断拓展国际市场,义隆电子的产品已经销售到全球各地,赢得了广泛的客户认可和信赖。同时,公司还积极寻求与国际知名企业的合作机会,共同推动行业技术的发展和创新。

Conflux公司的发展小趣事

Conflux深知人才是企业发展的核心动力。因此,公司一直注重人才培养和引进。通过与高校和研究机构的合作,Conflux吸引了大量优秀的科研人才加入公司。同时,公司还建立了完善的培训体系,不断提升员工的技能和素质。这些措施为公司的持续创新和发展提供了坚实的人才保障,也构筑了公司的核心竞争力。

DL Instruments LLC公司的发展小趣事

DL Instruments继承了Ithaco Corporation在精密仪器制造方面的技术积累,并在此基础上不断创新。公司推出了多种高性能的前置放大器产品,如低噪声电流前置放大器1211型、电流前置放大器1212型等。这些产品以其高阻抗差分或单端输入、共模抑制性能以及能在交流或直流耦合模式下运行的特点,赢得了市场的广泛认可。

Gigabit Logic Inc公司的发展小趣事
通过控制脉冲信号的频率或占空比,可以实现更精细的调速范围。
Forge Europa Ltd公司的发展小趣事

Forge Europa Ltd公司自成立以来,始终将技术创新视为企业发展的核心驱动力。早期,公司便投入大量资源研发高效能LED灯带技术,成功推出了具有行业领先地位的5050型号LED灯带。这款产品在市场上迅速获得认可,不仅因为其出色的光效和节能性能,更在于其独特的散热设计,有效延长了产品的使用寿命。Forge Europa的这一技术创新不仅为公司赢得了市场份额,也奠定了其在LED灯带领域的领先地位。

联智(Celfras)公司的发展小趣事

为了更好地推动快充技术的发展和应用,联智加入了终端快充行业协会。作为该协会的成员,联智积极贡献自身在快充协议、电源管理无线充电芯片和方案研发方面的经验和技术,与协会其他成员共同推动充电技术的标准化、产业化应用和推广。这一举措不仅有助于提升联智在快充行业的知名度和影响力,还将促进整个行业的健康发展。

问答坊 | AI 解惑

求助 怎样控制3.5 TFTLCD

        手头有一块3.5寸的TFTlcd,想用来做示波器屏幕, 想用atmega16单片机来控制, 发现avr单片机控制的频率太低了,屏幕刷新太慢了,弄不好, 大家说说用什么来控制好呢?…

查看全部问答>

MPLAB和picc软件怎么关联

下了个MPLAB软件和picc软件,可总是关联不上,没办法编译文件。对照教程也不行。都弄了3天了,各种版本都试过N遍了还是不行。特此求助帮忙设置一下。或发给我一份。多谢!特谢!!    …

查看全部问答>

横屏时工具栏显示位置?

WM5.0  PPC 程序 竖屏时候工具栏显示在最下方 现在想要在横屏时候,事工具栏显示在最右边 该怎么做?…

查看全部问答>

如何实现可移动磁盘属性的移动硬盘?

一般说来,移动硬盘的属性是固定磁盘,但是由于客户的强烈要求,我们需要将移动硬盘的属性设置为可移动磁盘。我们使用的是CYPRESS的CY7C68300芯片和ATA硬盘,当我们配置为固定磁盘时,移动硬盘没有问题。但是当我们配置为可移动磁盘时,出现了以下 ...…

查看全部问答>

r-rlink连接不上st7

                                 芯片是st7lite15b,接出来 iccdata iccclk reset gnd 5v 这5个脚,并通过转接头接到1 ...…

查看全部问答>

ST-LINK-II仿真器升级计划

EK-STM32F/STM3210B-LK1/EK-STM3210E/STM3210E-LK开发评估套件仿真器固件升级计划: 1. 适用集成开发环境:IAR EWARM,驱动程序将与IAR EWARM版本同步更新。 2. 板载仿真器升级后为ST专用版,支持现有STM32及后续版本的CortexM3 SWD/JTAG ...…

查看全部问答>

【DIY新作】LED点阵时钟.3种字体.4种动画.自动旋屏.GPS校时【附原理图】

    半年来一直在 DIY 辉光管、荧光管的时钟,其实算来,我最早DIY的时钟是LED点阵的。     时隔3年,再次汇集这段时间以来的想法,重新DIY了一款简洁、实用、功能完备的LED电子时钟。   ...…

查看全部问答>

我有两块“LatticeXP2 Brevia开发套件”闲置有需求者联系qsjit@163.com

我有两块“LatticeXP2 Brevia开发套件”闲置有需求者联系qsjit@163.com …

查看全部问答>

AN1165 MEMS麦克风前置放大器电路

用于MEMS麦克风前置放大器电路的运算放大器 …

查看全部问答>

我做蓝牙控制小车 现在没法控制 求大侠指点

我现在做手机蓝牙控制小车,现在车身已经安装好了 程序也是好的,通过电脑串口可以控制单片机来控制小车,我买的HC06蓝牙模块通过TTL也可以和电脑串口发送命令,但是我把蓝牙模块连接到51单片机上后手机蓝牙发送命令就是没法控制单片机,求求哪位大 ...…

查看全部问答>