导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51开发迪文HMI指南[原创]

* 1651: 工业仪器设备用液晶

   dingji534 
dingji534发表的帖子 

 C51开发迪文HMI指南[原创]
1.串口通信处理
//串口的处理,串口接收采用中断方式,串口发送采用查询方式
sbit TIFLG=0;     //串口发送标记
sbit HMIFLG=0; //触控界面数据接收标记
uchar data HMI_Page,HMI_Key;  //触控界面传回来的当前页面位置和按键编码 
uchar xdata cmd[8];
void Serial_Int(void) interrupt 4
{    if(TI==1)
{   TI=0; 
 TIFLG=1;}   //TIFLG在作为其它程序的查询标记
 if(RI==1)
{   cmd[0]=cmd[1];  //触控界面下,接收触摸按键数据 AA 78 K0 K1 CC 33 C3 3C
cmd[1]=cmd[2]; //采用移动窗口方式接收
 cmd[2]=cmd[3];
cmd[3]=cmd[4];
 cmd[4]=cmd[5];
cmd[5]=cmd[6];
 cmd[6]=cmd[7];
cmd[7]=SBUF;
RI=0;} if((cmd[0]==0xaa)&&(cmd[1]==0x78)&&(cmd[4]==0xcc)&&(cmd[5]==0x33)&&(cmd[6]==0xc3)&&(cmd[7]==0x3c))
{ HMIFLG=1;   //置位触控界面标记,主程序中查询处理
HMI_Page=cmd[2];
HMI_Key=cmd[3];}
}   

//查询方式发送数据到串口
//发送一个字节
 void Txbyte(uchar i)        
{TIFLG=0;
SBUF=i;
While(TIFLG==0);
TIFLG=0;
}

//发送一个以0xCC 0x33 0xC3 0x3C为结束标记的数据串到串口
 void Txstring(uchar *str)        
{uchar i0,i1,i2,i3;
i0=0;
i1=0;
i2=0;
i3=0;
TIFLG=0;
while(!((i0==0xcc)&&(i1==0x33)&&(i2==0xc3)&&(i3==0x3c)))
{i0=i1;
I1=i2;
I2=i3;
i3=*str;
str++;
SBUF=i3;
While(TIFLG==0);
TIFLG=0;}
}

 
2.I/O后台程序的处理
使用一个定时器产生一个定时器中断,来刷新I/O状态、采集设备信息,或对设备的控制;
比如,我们可以使用一个100mS的定时器,定时来进行A/D转换,采集温度信息;
对于多路信息的采集,如果每一路的处理时间比较长,就应该把任务分解成“节拍”来分成几次中断来执行,以保证其它中断程序能够被可靠执行,并提高CPU的执行效率。
比如,我们要依次分别对2路温度信号进行A/D采集,我们可以这样设计:
 1mS为一个节拍(定时器中断间隔为1mS);
 1次采样过程分成个节拍:
节拍1:把A/D切换到1通道,启动A/D
节拍2:读取1通道值
节拍3:把A/D切换到2通道,启动A/D
节拍4:读取2通道值
这样就避免了等待A/D转换而让CPU“空等”,提高了CPU的执行效率。

3.主程序的处理
主程序的主要作用就是处理“人机界面”,由于触控界面的切换等已经由迪文HMI完成,用户主程序的主要任务,就是根据触控界面返回的键值switch()处理就可以了。
我们建议用户把键值分成两个字节,
HMI_Page  告诉用户程序,当前的显示界面;
HMI_Key   告诉用户程序,当前界面下,点击了哪个按键;
当然,不需要用户程序干预的界面切换,可以让迪文HMI在界面切换时,不上传键码即可。
void main(void)
{ initsys();    //系统初始化,如不使用握手来判断迪文HMI是否初始化完成,则必须延时0.5秒以后才发送指令给HMI
  while(1)   //死循环,处理界面
{ if(HMIFLG==1)  //触控界面有操作,按照页面来处理按键
  {switch(HMI_Page)     
{ case 0x00:   //页面0的按键处理
       break;
     case 0x01:   //页面1的按键处理
       switch(HMI_KEY)
     { case 0x41:
            break;
    case 0x42:
            break;}
        break;
}
   HMIFLG=0;
   }
if(RTCOK==1)  //数据刷新时间(一般为0.1-1秒)到了,按照界面状态进行数据刷新处理
  {switch(HMI_Page)     
{ case 0x00:   //页面0的刷新处理,比如显示温度值
       break;
     case 0x01:   //页面1的刷新处理,比如做键盘输入
        break;
}
   RTCOK=0;
   }
}
}

采用这种结构来设计程序,主要特点有:
1.主程序可以由多人同时,并行设计和调试,并且互相之间基本独立,提高了软件开发效率;
2.关键算法和控制放到后台,由定时器中断驱动,不受主程序影响,保证了可靠性;
3.复杂的触控界面由迪文HMI来处理完成,无需用户软件过多干涉,使界面和控制真正分离,简化软件设计;
4.即使用户软件出问题重启了,由于界面是“分布式”处理,用户在前台并不会感觉到后台的变化,界面操作“依旧正常”;
5.测试、调试非常简单。

如需要更多相关资料,请给我来电话或者邮件!13810401631胡dingji534@163.com




发表时间:2009年2月19日9:24:15

  
回复该帖

本主题共有 9 帖,分页:>>>>>该主题的所有内容[9]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  16768.[详细]工业仪器设备用液晶
摘要:[size=4][size=2][size=2]我们的产品是智能液晶终端,是采用全新工规A级液晶屏,然后加上我们自己的液晶驱动,其中包括汉字库,界面图片数据储存的128兆FLASH。可以集成触摸屏(有漂移补偿技术)、键盘和时钟等。您只要通过......(1720字)
- [dingji534][1772次] 2008年1月23日

  4582.[详细]新推出大尺寸液晶终端
摘要:[size=4]新推出大尺寸液晶终端,如15、17、19寸,1024*768等分辨率,使用方式也是通过简单的串口,下发指令来控制,有这方面需要的可以来看看。[/size]   ......(147字)
- [dingji534][1088次] 2008年9月24日

  27782.[详细]开发指南
摘要:我们有开发指南,对图形界面、实时数据、动态曲线等都有详细说明,和案例程序供参考,有需要的给我来邮件dingji534@yahoo.com.cn......(120字)
- [dingji534][1065次] 2008年10月28日

[上一篇帖子]:SANYO马达驱动替换KA3100我这里SANYO的可以替换啊,SANYO的马达驱动系列我这里应用资
[下一篇帖子]:[下载]最全的c8051f单片机技术资料下载站点[upload=jpg]uploadfile/200