STM32+MCGS触摸屏四通道数据采集

本文详细记录了一位工程师使用STM32微控制器和MCGS触摸屏构建数据采集系统的过程,包括原理图和PCB绘制、程序编写以及界面设计与测试。在项目中,ADC模块用于数据采集,RS485实现通信,程序开发涉及STM32的GPIO和通讯协议。最终,通过MCGS创建用户界面并配置变量和通道进行测试。
摘要由CSDN通过智能技术生成

​1.想做一个数据采集系统,然后将数据存储起来,方便查看选择了STM32+MCGS触摸屏。
2.原理图绘制,选择立创的绘图软件,简单方面。用到了ADC采集模块与RS485通讯。
​ 
3.PCB的绘制同样采用了立创绘图软件,感觉和AD差不多,但是功能少很多,不过简单的电路板绘制也比较方便,不用单独绘制PCB的封装了,另一个重要原因,总有xiaohanjian给发律师函​,公司也不舍得花钱!另外吐槽下中国的互联网公司,就不能搞点牛X的软件吗!!!道阻且长!!

4.样板回来了,开始焊接工作。小公司啥都是自己搞啊!吐槽下老版,不多找点人。

板子焊接完成了,不是很好看,水平有限,焊接瑕疵,上电试验,效果还行,没有电容爆炸 冒烟。
5.写程序了,先写STM32的程序,写控制下IO口 指示灯都没问题,按键也没问题,挺好!

6.先写485通讯程序,写了好久,下面是和屏通讯的主要寄存器区

void Modbus_RegMap(void)

{

        //ÊäÈ뿪¹ØÁ¿¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò

        Modbus_InputIO[0]=(vu32*)&PEin(4);//KEY0     //&PEin(4)£ºÈ¡PE4µÄµØÖ·£¬(vu32*)&PEin(4)½«PE4µØÖ·Ç¿ÖÆת»»Îªuw32ÀàÐ͵ĵØÖ·£¬Modbus_InputIO[0]=(vu32*)&PEin(4); ½«×ª»»ºÃµÄµØÖ·Ë͸øµØÖ·Ö¸ÕëModbus_InputIO[0]£»

        Modbus_InputIO[1]=(vu32*)&PEin(3);//KEY1     //*Modbus_InputIO[0] È¡³öµØÖ·ÖеÄÄÚÈÝ¡£

        Modbus_InputIO[2]=(vu32*)&PEin(2);//KEY2

        Modbus_InputIO[3]=(vu32*)&PAin(0);//KEY3

        

        //Êä³ö¿ª¹ØÁ¿¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò

//      Modbus_OutputIO[0]=(vu32*)&PBout(5);//LED0

//      Modbus_OutputIO[1]=(vu32*)&PEout(5);//LED1

              Modbus_OutputIO[2]=(vu32*)&RUN;//

        Modbus_OutputIO[3]=(vu32*)&ERR;//

                                Modbus_OutputIO[4]=(vu32*)&ALM;//

        

        

        //±£³Ö¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò

        Modbus_HoldReg[0]=(u16*)&Show[0];//²âÊÔÊý¾Ý1 

        Modbus_HoldReg[1]=(u16*)&Show[1];//((u16*)&testData1)+1;//²âÊÔÊý¾Ý1 

        Modbus_HoldReg[2]=(u16*)&Show[3];//(u16*)&testData2;//²âÊÔÊý¾Ý2

        Modbus_HoldReg[3]=(u16*)&Show[2];//((u16*)&testData2)+1;//²âÊÔÊý¾Ý2 

        Modbus_HoldReg[4]=(u16*)&testData1;

                    Modbus_HoldReg[5]=(u16*)&testData2;

                    Modbus_HoldReg[6]=(u16*)&testData3;

}

7.写主程序:

u8 ucstep=0;

u8 TMI=0;

void Key_Cmd(void);

 int main(void)

 { 

        delay_init();                     //ÑÓʱº¯Êý³õʼ»¯          

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶        

         LED_Init();                                          //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú

        KEY_Init();                                        //³õʼ»¯°´¼ü

        Adc_Init();                                  //ADC³õʼ»¯

        RTC_Init();                                  //RTC³õʼ»¯

        RS485_Init();

        Timer7_Init();

 

        while(1)

        {

                switch(ucstep)

                {

                        case 0:                                

                                                break;                        

                        case 1:

                                                RUN=1;

                                                TMI++;

                                                if(TMI>=50)

                                                {

                                                        TMI=0;

                                                        ERR=!ERR;//DS0ÉÁ˸        

                                                }

                                          break;

                        case 2:

                                                 ERR=1;

                                                 Adc_Service();

                                                 ucstep=3;

                                                 break;

                        case 3:

                                                RS485_Service();

                                                ucstep=4;

                                                break;

                        case 4:

                                                TMI++;

                                                if(TMI>=20)

                                                {

                                                        TMI=0;

                                                        RUN=!RUN;

                                                }

                                                ucstep=2;

                                                break;

                        case 5:

                                                RUN=!RUN;

                                                ERR=!ERR;

                                                ALM=!ALM;

                                                ucstep=0;

                                                break;

                }

                Key_Cmd();

        }

}



void Key_Cmd(void)

{

        u8 key;

        key=KEY_Scan(0);        //µÃµ½¼üÖµ

        if(key)

        {                                                   

                switch(key)

                {                                 

                        case KEY1_PRES:         //SD¿¨

                                         ucstep=1;

                                         break;

                        case KEY2_PRES:        //¿ØÖÆLED0·­×ª

                                         ucstep=2;

                                         break;

                        case KEY3_PRES:        //¿ØÖÆLED1·­×ª         

                                         ucstep=5;

                                         break;

                }

        }else delay_ms(10); 

}

好了 ,主程序也完成了,下面写MCGS触摸屏的程序。
8.MCGS触摸屏 先来个牛X界面 **长城永不到!!!!千里黄河水涛涛

9.装完了,该干正事了 ,编写正式测试界面

10.界面完事了 该配置变量和通道了

IF $Second MOD 10 = 0 THEN 



电压1=设备0_读写4WUB0001

电压2=设备0_读写4WUB0002

电压3=设备0_读写4WUB0003

电压4=设备0_读写4WUB0004







!SaveData(电压)



测试窗口.控件67.Refresh()

测试窗口.控件67.End()

ENDIF



进度计数=进度计数+1



IF 进度计数>5 THEN



 进度计数=0

 进度=2

 控制=2

        

ENDIF



进度计数=进度计数+1



IF 进度计数>5 THEN



 进度计数=0

 进度=2

 控制=2

        

ENDIF

12.都搞定了。
---------------------
作者:刘东君
链接:https://bbs.21ic.com/icview-3188156-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值