精华内容
下载资源
问答
  • STM32F407VET6 HMI USART串口屏步进电机控制程序
  • HMI USART屏幕中显示实时加密货币价格信息的项目 现在,您不必拿起手机,打开一个加密货币市场应用程序,而无需等待几秒钟,直到您可以查看价格。 只需看看您的桌子: 该项目从Huobi(使用WebSocket)和Binance...
  • 前段时间老师给了我一个项目,让我用HMI USART串口屏控制步进电机,事成之后有报酬嘿嘿,现在做完了,总结一下,废话不多说,直接上效果,工程代码在总结处。 一、效果 二、屏幕设计 主界面: 移动控制...


    前言

    前段时间老师给了我一个项目,让我用HMI USART串口屏控制步进电机,事成之后有报酬嘿嘿,现在做完了,总结一下,废话不多说,直接上效果,工程代码在总结处。

    一、效果

    《关于我用HMI USART串口屏做了一个步进电机控制器这件事》

    二、屏幕设计

    主界面:

     移动控制界面:

    间歇运动界面:

    三、部分代码

    1.main.c

    #include "sys.h"
    #include "delay.h"  
    #include "usart.h"  
    #include "led.h"
    #include "usmart.h"
    #include "key.h"
    #include "driver.h"
    #include "exti.h"
    
    u32 frequency=2000;//1000-4000
    long num=2000;//0-160*1000
    unsigned char str[8];
    u32 speed;
    int left=0,right=1;
    void RST(int front)
    {
        if(front==left)
        {
            while(1)//左复位
            {
                if(!KEY0||page!=14)
                {
                    delay_ms(10);
                    if(!KEY0||page!=14)
                        break;
                }
                else
                    Locate_Rle(150000,4000,CW);
            }
        }
        else
        {
            while(1)//左复位
            {
                if(!KEY1||page!=15)
                {
                    delay_ms(30);
                    if(!KEY1||page!=15)
                        break;
                }
                else
                    Locate_Rle(150000,4000,CCW);
            }
        }
        TIM_Cmd(TIM8, DISABLE);
    }
    int main(void)
    {  
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    	delay_init(168);      //初始化延时函数
    	uart_init(9600);		//初始化串口波特率为9600
    	usmart_dev.init(84); 	//初始化USMART			
    	LED_Init();					  //初始化LED
        EXTIX_Init();       //初始化外部中断输入 
    	Driver_Init();			//驱动器初始化
    	TIM8_OPM_RCR_Init(999,168-1); //1MHz计数频率  单脉冲+重复计数模式
        page=0;
    //    RST(left);
    	while(1) 
    	{		 
             switch(page)
                {
                    case 0:
                           TIM_Cmd(TIM8, DISABLE);  //使能TIM8
                           break;
                    case 2:
                           Locate_Rle(distance,frequency,CW); 
                           break;//顺时针转向右
                    case 1:
                           Locate_Rle(distance,frequency,CCW);  
                           break;//逆时针转向左
                    case 3:frequency=1000;//速度设置
                           break;
                    case 4:frequency=2000;
                           break;
                    case 5:frequency=3000;
                           break;
                    case 6:frequency=4000;
                           break;
                    case 7:frequency=100;distance=20;//速度位移设置
                           break;
                    case 8:frequency=1000;distance=200;break;
                    case 9:frequency=1000;distance=1000;break;
                    case 10:frequency=1000;distance=2000;break;
                    case 13:flag=1;     //间歇运动
                            while(flag)
                            {
                                Locate_Rle(distance,frequency,CW);
                            }
                            flag=1;
                            delay_ms(1000);
                            while(flag)
                            {
                                Locate_Rle(distance,frequency,CCW);
                            }
                            flag=1;
                            delay_ms(1000);
                            break;
                   case 14: 
                            RST(left);
                            page=0;
                            break;   
                   case 15: 
                            RST(right);
                            page=0;
                            break; 
                   case 16: 
                            break;   
                   case 17: 
                            
                            break; 
                   
                }
      
    	}
    }
    

    2.usart.c

    void USART1_IRQHandler(void)                	//串口1中断服务程序
    {
    	u8 Res;
    #if SYSTEM_SUPPORT_OS 		//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
    	OSIntEnter();    
    #endif
    	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    	{
    		Res =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
    		  
             if(page==11&&num_flag<2)//运动位移设置
            {
                 numbuf[num_flag]=Res;
                 num_flag++;
                 if(num_flag==2)
                {
                    distance=(numbuf[1]*256+numbuf[0])*20;
                    num_flag=0;
                    page=0;
                }
            }
            else if(page==12&&num_flag<2)//间歇运动位移设置
            {
                numbuf[num_flag]=Res;
                num_flag++;
                if(num_flag==2)
                {
                    distance=(numbuf[1]*256+numbuf[0])*20;
                    num_flag=0;
                    page=13;
                }
                
            }
            else 
            {
              switch(Res)
                {
                    case 0x00:page=0;break;
                    case 0x01:page=1;break;
                    case 0x02:page=2;break;
                    case 0x03:page=3;break;
                    case 0x04:page=4;break;
                    case 0x05:page=5;break;
                    case 0x06:page=6;break;
                    case 0x07:page=7;break; 
                    case 0x08:page=8;break;
                    case 0x09:page=9;break;
                    case 0x0a:page=10;break;
                    case 0x0b:page=11;break;
                    case 0x0c:page=12;break;
                    case 0x0e:page=14;break;
                    case 0x0f:page=15;break;
                    case 0x10:page=16;break;
                    case 0x11:page=17;break;
                    
                }
            }
      } 

    3.其余代码

    这个工程是基于正点原子步进电机控制程序的,工程代码我已经打包好上传,有需要的小伙伴可以在评论区留言。


    总结:参考+工程代码

    参考:步进电机和步进驱动器的介绍、接线、细分和控制方法

    工程代码及屏幕设计文件:HMI USART串口屏步进电机控制.zip

    展开全文
  • 基于STM32F407的HMI USART串口屏智能药箱设计
  • 我的电赛日记(一)---HMI USART串口屏

    千次阅读 多人点赞 2020-08-14 22:25:40
    HMI USART串口屏 作为在电赛中负责软件部分的成员,学会使用单片机进行数据和信息的显示是必要的,大部分人会选择使用oled或者TFT屏幕去进行显示,但是使用过的人都知道这样会比较复杂,会加大程序的复杂度,因此...

    HMI USART串口屏

    作为在电赛中负责软件部分的成员,学会使用单片机进行数据和信息的显示是必要的,大部分人会选择使用oled或者TFT屏幕去进行显示,但是使用过的人都知道这样会比较复杂,会加大程序的复杂度,因此通过他人的建议,我开始学习并使用串口屏进行显示,下面是我学习串口屏时的经验和总结:
    在这里插入图片描述

    上面这个是我使用的串口屏的型号,电阻式触摸屏,只有四根线,VCC GND TX RX,3.5寸基本完全满足交互式界面的大小,价格大概几十元。

    一、硬件连接
    我一般使用stm32比较多,因此这里就用stm32作为主控,我选用的是STM32F103ZET6最小系统板作为主控,其实使用C8T6也是可以的,主要是因为当时跟着正点原子学习的时候使用的是精英版,因此用ZET6就用习惯了,毕竟资源多还是要舒服一点。
    在这里插入图片描述

    板上资源:这里使用到的是USART3和UART1,USART3和串口屏相连,UART1和电脑相连(默认)
    IO连接
    VCC----VCC
    GND----GND
    TX-----PB11
    RX-----PB10
    一共就四根线,连接非常方便。
    二、STM32软件设计
    软件方面呢为了既能使用串口给串口屏发送信息,也能通过串口接收串口屏发来的信息,因此设计功能如下:
    1.串口屏上会显示一个数字Freq,并且该数字每秒会+1,可以通过屏幕上的按键控制每秒增加的数值。
    2.数字Freq每更新一次,就会将该数字发送给单片机一次
    3.单片机每接收到一次该数字,就会将该数字再从USART1发送给电脑的串口助手
    4.单片机每隔几毫秒给串口屏发送一次指令,让串口屏上的波形控件增加一个点

    不墨迹就直接放程序了,看不懂程序的可以留言:

    #include "delay.h"
    #include "sys.h"
    #include "usart.h"
    #include "usart3.h"
    #include "timer.h" 
    
    /************************************************
    ************************************************/
     int main(void)
     {		
    	int b;
    	u16 t;  
    	u16 len;	
    	u16 times=0;
    	delay_init();	    	 //延时初始化  
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组
    	uart_init(115200);	 //usart1初始化波特率115200
    	usart3_init(115200);	 //usart3初始化波特率115200
     	while(1)
    	{
    		if(USART3_RX_STA&0x8000)
    		{					   
    			len=USART3_RX_STA&0x3fff;//得到此次接受数据的长度
    			printf("\r\n您发送的消息为:\r\n\r\n");
    			for(t=0;t<len;t++)
    			{
    				//USART_SendData(USART1, USART3_RX_BUF[t]);//向串口一发送数据
    				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
    			}
    			b=(USART3_RX_BUF[0]);
    			printf("%d",b);
    			printf("\r\n\r\n");
    			USART3_RX_STA=0;
    		}
    			delay_ms(1000);
    			{
    				u3_printf("add 4,0,100",a); //波形空间上添加一个点
    				u3_printf("\xff\xff\xff");  //结束标志
    			}   
    	}	 
     }
    

    这段程序基本都是由正点原子的例程改编的,只是简单的两个串口的通信,主要有几点需要注意:
    (都是我踩过的坑)
    1🤭向串口屏发送指令时,后面一定要接\xff\xff\xff,作为结束指令,否则串口屏不知道你这段话是否说完了,具体可见最后一行代码。
    2🤭如果你想接收串口屏发来的字符或者整型浮点数的信息,一定要注意定义的类型,例如当USART_RX_BUF[ ]这个用来当作接收缓冲区的数组是char型时,那么如果你想接收它发来的字符型信息时可以直接调用这个数组,但当你是想调用接收到的整数或者浮点数时,不能直接使用这个数组,否则显示会出现乱码,你可以像我代码中写的那样,定义一个int型的变量b,然后用b去获取USART3_RX_BUF这个数组中的整型常量,这样再进行显示就不会乱码了。

    三、串口屏界面设计
    HMI USART这款串口屏的教程挺多的,无论是它自带的还是网络上其他人拍的视频,都有很多资源可以去学习,这里我就放一个官方最常用的一个网址吧:串口屏帮助中心
    无论是学习还是查找指令都可以在这个网站中找到!然后是我设计的串口屏界面,大致如下:
    界面1界面2两个界面,第一个是用来显示曲线的主要验证功能4,第二个是用来显示数字Freq的主要验证功能1。
    具体如何设计大家可以根据自己的情况来,我这个只是一个比较简单的例子。

    四、总结
    串口屏能做到的功能远不止如此,因此还有许多需要学习与实践的,不过熟练运用串口屏可以说在某种程度上是可以取代常用的oled TFT这种液晶屏的,除非题目有功耗要求,那另当别论。在此我只是分享我在学习串口屏中遇到的问题以及总结的经验,如果有问题大家也可以一起讨论!

    展开全文
  • usart hmi实例.rar

    2019-08-02 15:02:43
    usart hmi开发的一些实例,包括进度条,时间显示,速度盘,图片素材
  • USART HMI-GUI绘图程序

    2019-03-09 19:49:53
    这是用C语言编写的用于GUI绘图的源程序,非常实用,请大家参考!
  • HMI 智能串口屏全资料

    2018-04-18 15:45:14
    这里有串口屏的上位机,样本例程还有数据手册,内容挺多的
  • USART HMI智能串口屏介绍

    千次阅读 2021-02-18 20:08:23
    概要:USART HMI智能串口屏,该显示屏的介绍、GUI界面的设计、通讯方式和修改控件参数的相关指令等。 一开始我们项目组在显示上用的是12864液晶显示屏(带字库),但是看起来效果不是很好,感觉很LOW,而且不知道...

     概要:USART HMI智能串口屏,该显示屏的介绍、GUI界面的设计、通讯方式和修改控件参数的相关指令等。

        一开始我们项目组在显示上用的是12864液晶显示屏(带字库),但是看起来效果不是很好,感觉很LOW,而且不知道什么原因,12864常常会指针乱飞,显示一堆乱七八糟的字符,有时候只是不小心用手碰了一下读写或者数据的几个引脚,就开始显示乱码(不排除是因为自己写的代码有BUG的原因)。在一次跟学长的闲聊中,得知有工业串口屏、工业组态屏这些东西,专门用来做工业智能显示仪表的屏幕,一般都有软件以拖控件的形式对GUI界面进行设计,学长当时就给我们推荐了USART HMI智能串口屏,这种显示屏自带GUI,供电就可以使用,可通过串口通信对控件上的参数进行修改,还有一些特定的指令可实现一些功能操作,任何有串口通信功能的单片机都可以带得动,即便它是彩屏,也无需单片机去驱动。

        先附上一张USART HMI智能串口屏的产品介绍书的部分截图。

     

        淘宝上可进行购买,宝贝详情中便有这玩意的相关资料,资料中有专门用来设计这款显示屏GUI的软件,如果做项目想用好看一点的屏幕却不想上STM32等性能比较强的单片机的话,建议可以试试这款显示屏。强行安利一波!!!23333

        接下来是对这款显示屏的GUI的设计方面的说明。淘宝详情里有个教程视频,好像在PC端淘宝网页才可以正常观看,基本的控件的使用都有简单的说明,具体使用方法得自行摸索。以下只简单说一下本人在学习时的一些技巧。

        在开始前,要说的是,官方有个社区(论坛),里面有素材库,可以免费在里面下载工程文件参考学习或者快速开发,只需要注册即可,我们的项目的GUI也是以其中的一个超声波水位监测的项目作为参考,其中的程序也是如此,特此声明。

        1. 做好UI设计的素材作为背景图。

        注意尺寸要与所购买的显示屏大小一致!!!!我买的是240*400的,做的图也是这个尺寸。如下图。   

     

        事先做好UI,是为了方便后面在软件上拖对应的控件到预期的位置,最主要的还是可以省屏幕的内存,是的,这个屏幕也是需要用内存的,而且要特别省!!!预留字符长度都尽量的卡好,不然像我这样十个页面左右的,分分钟用完内存。(还不是没好好看选型手册的锅。QAQ)

        为了省事,本人是在PPT上进行简单的UI设计,因为相对PS来说,更方便拖拽对齐等功能的实现。强迫症患者童鞋注意,项目期初的UI只需要满足基本功能和美观即可,不可过早的追求美观而拖累项目进度。

        2. 打开软件,新建项目并设置。

        首先打开软件,选择你所买的屏幕的型号,这也决定了你的显示界面的最大尺寸,型号一般在装着显示屏的盒子上贴着,选择你显示的方向,横屏还是竖屏等。如图。

     

        然后进入设计界面,先把我们事先做好的图片素材添加到左下角的图片素材管理区里,然后在右侧页面管理区添加页面,一般第一个作为主界面,其他的是做触发某些事件后切换的界面,比如点击设计的“设置”按钮,切换到设置界面。

        建议给这些界面都起对应功能的名字,双击重命名,否则需要的界面比较多时很容易弄乱。每个界面都需要设置一下背景填充,选择图片,作为背景,然后下面pic里选择对应的图片素材。

        

        在需要显示某些参数的页面,比如主界面,往往需要返回该页面的ID值给单片机,告知单片机显示屏现在处在主界面,ID值是根据页面顺序给的编号,返回页面ID值的代码:sendme  //发送当前页面ID号到串口。       

        同样其他需要返回ID值的页面也是如此。

     

      

     

    14.sendme 发送当前页面ID号到串口

    sendme
    实例1:sendme   (此指令不需要参数)
    备注:

    设备收到此指令会立刻把当前页面的ID号发送到串口,如果想要每次刷新页面自动发送页面ID,请在页面的初始化事件里写上sendme语句即可。发送格式请参看本表格后面的"串口HMI设备返回数据格式"表格。

        3. 添加按钮控件,并对其进行属性设置。

        在界面中添加按钮,属性编辑中,按钮的背景填充里有单色、切图、图片,如果UI设计的时候有把按钮也画上去了,就只需要选择切图,如果没有,一般选择单色,单色的按钮可选择颜色等,但是给人感觉像是win XP时候的按钮风格,实在是丑得可以,不能接受的就得像我一样在背景图里画好按钮,在编辑按钮属性里选择切图。另外说一下,选择切图时是要选择默认按钮背景和按下时切图的两个图片,不然编译时会报错。在此不再放图详细说明,自行感受即可。

        顺带一提,如果按钮上带有文字,如“设置”二字,且想改变文字的字体及大小等,可在图片素材旁的字体库添加自己制作的字体,你可以在这个软件上面工具那里的字库制作中,制作你所需要的字体库。

        添加好按钮,还得编写弹起事件代码,例如“设置”按钮,弹起后应切换到设置页面,代码:page Init  //Init是我给设置页面起的名字。

     

     

     

    1.page 刷新页面
    page pageid
    pageid:页面ID或页面名称
    实例1:page 0 (刷新ID为0的页面)
    实例2:page main (刷新名称为main的页面)
    备注:

    1.设备上电自动刷新第0页。

    2.也可以对系统变量dp赋值来实现跳转页面(如dp=0),系统变量dp可以设置可以读取,具体请参看系统变量列表。

        4. 添加文本控件,并对其进行属性设置。

         

        需要注意的两点。一是文本控件可绑定键盘,有数字键盘和输入法全键盘等,当在显示屏上点击该文本区域,可通过键盘输入改变本文内容,再通过返回该文本参数的指令即可得到改变的文本内容,十分的方便。二是因为该显示屏的内存有限,需要卡好字符长度,以节省内存。

        5. 添加进度条控件,并对其进行属性设置。

        在项目中需要使用进度条控件作为水位高低的直观显示,需要把进度条旋转90°,并改变填充颜色为蓝色。水量以百分比的形式体现,与进度条一致。

     

        6. 添加双态开关控件,并对其进行属性设置。

        双态开关用来做某功能的开关按钮,并显示其状态量。按下后可通过显示不同状态的图片来显示其状态量。

        7. 添加二维码控件,并对其进行属性设置。

     

        8. 添加定时器控件,并对其进行属性设置。

    --------------------------------------分割线------------------------------------

        以上便是我在项目中所使用的所有控件,也是一些很常用的控件,实际上还有好几种常用的控件,比如滑块、复选框、单选框、指针等,特别是指针,在类似汽车行程量表这样的界面显示时很是方便,改变控件参数的方法便是通过串口通信给显示屏发送相应的字符串——控件指令代码。要区分哪些是显示屏自身的事件发生控制代码,哪些是去控制控件的指令代码。官方教学视频中都有详细介绍,看了本文还不太懂的童鞋多看看官方教学视频。

        有点啰嗦了,最后附上几个官方链接。

        1. 基本型串口HMI资料包下载地址(内含USART HMI软件+资料+应用实例): 

        http://tftdata.tjc1688.com/USART HMI/USART HMI.rar

        (因为发现使用超链接无法正确跳转到下载网址。)

        2. USART HMI视频在线观看地址:点击打开链接

        3. USART HMI社区论坛地址:点击打开链接

        4. 淘宝链接,该商品与本人无关!!!只是方便给大家看产品介绍:点击打开链接

    展开全文
  • stm32的程序,用来接收USART HIM触摸屏的命令,并发送数据到触摸屏上
  • 2.usart.c 3.其余代码 总结:程序工程+屏幕文件链接 前言 前段时间花3天时间做的大创项目智能药箱,做完总结一下。 一、屏幕设计 主界面: 时钟设置: 、 服药设置: 出药...

    目录

    前言

    一、屏幕设计

    二、stm32部分代码

    1.main.c

    2.usart.c

     3.其余代码

    总结:程序工程+屏幕文件链接




    前言

    前段时间花3天时间做的大创项目智能药箱,做完总结一下。


    一、屏幕设计

    主界面:

    时钟设置:

     

    服药设置:

    出药测试:

    短信测试:


    二、stm32部分代码


    1.main.c

    #include "stm32f4xx.h"
    #include "usart.h"
    #include "delay.h"
    #include "servo.h"
    #include "motor.h"
    #include "thumb.h"
    #include "worm.h"
    #include "stepmotor.h"
    #include "infrared.h"
    #include "ds18b20.h"
    //#include "exti.h"
    #include "key.h"
    #include "LD3320.h"
    #include "jetson.h"
    #include "rubbish.h"
    #include "voice.h"
    #include "rtc.h"
    
    #include "usmart.h"
    //#include "lcd.h"  
    //#include "sram.h"   
    //#include "malloc.h" 
    //#include "w25qxx.h"    
    //#include "sdio_sdcard.h"
    //#include "ff.h"  
    //#include "exfuns.h"    
    //#include "fontupd.h"
    #include "text.h"	
    //#include "touch.h"		
    #include "usart3.h"
    #include "sim800c.h" 
    /*********************************************************************************************************
    *                                          全局变量
    *********************************************************************************************************/
    
    
    /*********************************************************************************************************
    *                                          函数声明
    *********************************************************************************************************/
    void tablet(int medicine_count)//药片
    {
        int i;
        for(i=0;i<medicine_count;i++)
        {
            set_Angle_2(0);//药片  TIM4 通道2 B7
            delay_ms(1000);
            set_Angle_2(100);//胶囊  TIM4 通道2 B7
            delay_ms(2000);
        }
        
    }
    void pill_1(int medicine_count)//药丸1
    {
        int i;
        for(i=0;i<medicine_count;i++)
        {
            TIM_SetCompare1(TIM4,800);//药丸1 TIM4 通道1 B6
            delay_ms(1000);
            set_Angle_1(70);//药丸1 TIM4 通道1 B6
            delay_ms(2000);
        }
    }
    void pill_2(int medicine_count)//药丸2
    {
        int i;
        for(i=0;i<medicine_count;i++)
        {
            TIM_SetCompare4(TIM4,700);//药丸2 TIM4 通道4 B9
            delay_ms(1000);
            set_Angle_4(80);//药丸2 TIM4 通道4 B9
            delay_ms(2000);
        }
    }
    void capsule(int medicine_count)//胶囊
    {
        int i;
        for(i=0;i<medicine_count;i++)
        {
            set_Angle_3(0);//药片  TIM4 通道3 B8
            delay_ms(1000);
            set_Angle_3(100);//药片  TIM4 通道3 B8
            delay_ms(2000);
        }
    }
    void Medicien(int medicine_box,int medicine_count)
    {
        switch(medicine_box)
        {
            case(1):pill_1(medicine_count);break;
            case(2):tablet(medicine_count);break;
            case(3):capsule(medicine_count);break;
            case(4):pill_2(medicine_count);break;
        }
    }   
    void Medicien_star(void)
    {
        int i;
        if(page==16)
        {
            while(page==16);
        }
        if(page==17)
        { 
            while(page==17)
            {
                if(medicine_flag==7)
                {
                   for(i=0;i<8;i+=2)
                   {
                      Medicien(medicinebuf[i],medicinebuf[i+1]);
                   }
                   page=0;
                   break;
                }
            }    
        }
        if(page==18)
        {
            pill_1(2);
            tablet(2);
            capsule(2);
            pill_2(2);
            page=0;
        }
    }
    
    
    int main(void)
    {   
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init(168);
        uart_init(9600);   //串口初始化为9600
        usart3_init(115200);		                   //初始化串口3 	
    	
        KEY_Init();
        TIM4_PWM_Init();
        My_RTC_Init();		 		//初始化RTC
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);		//配置WAKE UP中断,1秒钟中断一次
        set_Angle_1(70);//药丸1 TIM4 通道1 B6
        set_Angle_2(100);//胶囊  TIM4 通道2 B7
        set_Angle_3(100);//药片  TIM4 通道3 B8
        set_Angle_4(80);//药丸2 TIM4 通道4 B9
        delay_ms(1000);
        while(1)
        {     
            switch(page)
            {
                case 0:break;
                case 1:main_interface_show();break;
                case 2:rtc_show_set();break;
                case 7:voice_IO(1);break;
    //            case 8:play_back();break;
    //            case 9:play_back();break;
    //            case 10:play_back();break;
    //            case 11:play_back();break;
                
                case 16:Medicien_star();break;
                case 17:Medicien_star();break;
                case 18:pill_1(2);
                        tablet(2);
                        capsule(2);
                        pill_2(2);page=1;break;
                case 19:voice_IO(7);break;
                case 20://usmart_dev.init(168);//初始化USMART
                        sim800c_test(1);break;
                case 21:sim800c_test(2);break;
            }
        }
    }
    
                    
                    
    
    


    2.usart.c

    void USART1_IRQHandler(void)                	//串口1中断服务程序
    {
    	u8 Res;
    #if SYSTEM_SUPPORT_OS 		//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
    	OSIntEnter();    
    #endif
    	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    	{
    		Res =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
    		
    		if((USART_RX_STA&0x8000)==0)//接收未完成
    		{
    			if(USART_RX_STA&0x4000)//接收到了0x0d
    			{
    				if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
    				else USART_RX_STA|=0x8000;	//接收完成了 
    			}
    			else //还没收到0X0D
    			{	
    				if(Res==0x0d)USART_RX_STA|=0x4000;
    				else
    				{
    					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
    					USART_RX_STA++;
    					if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收	  
    				}		 
    			}
    		}   	
            if((page==5||page==6)&&time_flag<=3)
            {
                timebuf[time_flag]=Res;
                
                time_flag++;
            }
            else if((page==10)&&tea_flag<=4)
            {
                teabuf[tea_flag]=Res;
                if(teabuf[0]<10)
                {
                    page=teabuf[0];
                }
                tea_flag++;
            }
            else if((page==17)&&tea_flag<=7)
            {
                medicinebuf[medicine_flag]=Res;
                
                medicine_flag++;
            }
            else if(page!=5&&page!=6&&page!=10&&page!=17)
            {
                switch(Res)
                {
                    case 0x01:page=1;break;
                    case 0x02:page=2;break;
                    case 0x03:page=3;break;
                    case 0x04:page=4;break;
                    case 0x05:page=5;break;
                    case 0x06:page=6;break;
                    case 0x07:page=7;break; 
                    case 0x08:page=8;break;
                    case 0x09:page=9;break;
                    case 0x0a:page=10;break;
                    case 0x0b:page=11;break;
                    case 0x0c:page=12;break;
                    case 0x0d:page=13;break;
                    case 0x0e:page=14;break;
                    case 0x10:page=16;break;
                    case 0x11:page=17;break;
                    case 0x12:page=18;break;
                    case 0x13:page=19;break;
                    case 0x14:page=20;break;
                    case 0x15:page=21;break;
                    case 0x16:page=22;break;
                    case 0x17:page=23;break;
                    case 0x18:page=24;break;
                    case 0x19:page=25;break;
                }
            }
                
            
      } 
    #if SYSTEM_SUPPORT_OS 	//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
    	OSIntExit();  											 
    #endif
    } 
    #endif	

     3.其余代码

    这个工程是基于正点原子的SMI600短信模块测试程序,工程代码我已经打包好上传,有需要的小伙伴可以在评论区留言。



    总结:程序工程+屏幕文件链接

    程序代码工程链接:基于STM32F407的HMI USART串口屏智能药箱设计.zip

    展开全文
  • 该7寸USART HMI 组态屏,带GPU字库,属于串口屏TFT液晶显示模块,分辨率800*480。 持多种组态控件:按钮控件、进度条控件、文本控件、指针控件等,上位软件自动升级、设备固件自动升级,自定义任意Windows字库; 支持...
  • 用于淘晶池的小屏幕 组态开发,像汽车的仪表指示,都是用类似的屏幕
  • usart hmi(串口屏)介绍

    万次阅读 2018-11-27 22:50:11
    usart hmi 就是设备封装好 底层功能以后,通过串口(USART 232)与用户 MCU 进行交互。  MCU 可以随时通过 USART 发指令通知设备:切换某个页面或者改变某个组件的属性。 设备也可以随时通过 USART 通知用户 MC...
  • STM32与串口屏交互(USART HMI

    千次阅读 多人点赞 2021-08-05 18:44:11
    STM32与串口屏交互(USART HMI)一、前期准备二、串口屏上位机使用方法以及界面设计三、STM32软件编程四、单片机发送数据的字符串指令汇总五、总结 不管是备战电赛还是准备毕设,一块能与单片机交互的屏幕显得尤为...
  • USART HMI

    2020-12-29 17:34:09
    USART HMI即串口人机接口,其将底层功能封装在HMI设备中,通过串口与MCU 进行通信交互,MCU只需通过串口与HMI设备发送/接收指令,HMI设备即可作出相应响应。 2. HMI设备端 以陶晶驰USART HMI串口屏为例。 2.1 USART...
  • 本人博客针对USART_HMI,发表了3篇博客,分别介绍了关键部分,这个压缩包包含了整个工程文件。功能是通过按键控制FPGA向串口屏发送相应的数据并在USART_HMI上显示。如有需要,可以自行下载!
  • USART HMI资料.zip

    2020-10-05 11:19:25
    USART HMI 串口屏指令集,涵盖了所有串口屏常用指令,有需要的同学可以拿来下载,调试串口屏的时候会方便很多。
  • 触摸串口屏设计,串口通讯简单便捷,c语言为基础,且界面比裸屏好太多,可兼顾显示和上位机控制,无限种设计开发,有自己的指令集和交流社区
  • usart hmi的串口驱动,测试单片机为STC12LE5A60S2。通过串口发送,显示波形。
  • 该资源包含了除网络上陶晶池串口屏上位机调试视频和一些文档之外,还有一个我自己写的STM32F103的通信程序,以及一个说明文档。该文档详细说明了STM32F1是如何给串口屏发送数据的
  • 关于Arduino与USART HMI串口通讯USART HMI是一款可以通过串口指令控制的可触摸显示屏。拥有自带的编译器和讨论社区。 关于它指令的执行比较奇葩,在用串口调试助手时候,指令用字符串传输,执行指令时要在结尾加一条...
  • usart hmi + 串口屏显示

    千次阅读 2019-08-02 14:37:23
    准备国赛,这两天学了下陶晶驰串口屏。 开始两天有点迷糊,官方资料也没有好好看完,就毫无章法吧,静下心来把官方文档看了,就基本上完成了工作,做了个简单速度仪表盘,虽然还不算完美,至少也算入门了。...
  • USART-HMI串口屏与STM32相互通讯实例。 包括如下内容: 1.STM32控制串口屏对应的数值、文本完成相应变化 2.串口屏控制STM32的LED翻转 3.串口屏通过按键输入数值并发送给单片机,单片机接受并实时显示在串口屏上
  • USART HMI.rar

    2021-05-26 09:50:37
    淘晶驰串口屏资料,包括例程,简单应用
  • 该项目使用串口屏构建汽车仪表盘 UI简洁大方美观,使用方便 该项目未经作者本人允许,不得用于商业用途。 不允许以任何形式转载

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 271
精华内容 108
关键字:

hmiusart