导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C语言开发说明

* 63350: 迪文彩色液晶说明

   dingji534 
dingji534发表的帖子 

 C语言开发说明
[color=#00008B][/color]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.测试、调试非常简单。


发表时间:2009年9月3日9:09:03

  
回复该帖

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

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

  63706.[详细]新加视频功能
摘要:新加视频功能,如7寸终端,已经加入视屏,接PAL信号,NTSC信号。可以在视频和菜单显示自由切换。......(89字)
- [dingji534][775次] 2009年9月7日

  66482.[详细]汽车电子
摘要:现在我们的液晶产品在汽车电子和交通车载方面,有很好的案例方案,有这方面的可以联系。   ......(89字)
- [dingji534][682次] 2009年10月23日

  67298.[详细]超低温度OLED
摘要:新推出OLED产品,高亮度,强阳光下完全可见,零下40度使用。屏幕为4.3寸真彩色,串口通讯方式。有这方面意向的来。13810401631......(118字)
- [dingji534][707次] 2009年11月10日

[上一篇帖子]:[推荐]深圳海天雄专业供应2443开发板深圳海天雄专业生产ARM9开发板,ARM11开发板,2440
[下一篇帖子]:迪文彩色液晶说明[color=#00008B][color=#00008B][face=楷体_GB2