|
沙发

楼主 |
发表于 2014-12-10 13:08
|
只看该作者
本帖最后由 apachectl 于 2014-12-10 13:11 编辑
上面是主程序代码,这里的看点是,串口屏处理按键形成的主消息处理体的模型,可以从结构上看出,把所有的窗体显示都编上号,这样就可以很方便的进行各个界面的消息处理以及界面切换,很容易编写复杂界面的软件,再多界面也不怕!
大家可以研究下示例中的复杂界面是如何显示和刷新的,这点很重要
再则是如何构建一个消息循环的多页面体系
这点在用单片机编辑多界面体系非常有用,全部代码请参见源代码的工程文件,这里仅抛砖引玉一把
- //=============================================================================
- //文件名称:main.c
- //功能概要:key
- //版权所有:apachectl
- //淘宝网店:http://shop104540872.taobao.com/
- //版本更新:2014-04-12
- //=============================================================================
- int main(void)
- {
- system_init();
- USART_ENABLE_REV();
- Delayms(2000000);
- LoadROM();
- GpuSend("DR2;CLS(0);SPG(1);\r\n");
- winnum=1;
- cjs=0;
- iscmd=0;
- iscmdok=0;
- loopcount=0;
- iswaiting=0;
- setup();
-
- while(1)
- {
- if (iscmdok==1) {onkey();iscmdok=0;};
-
- loopcount++;
- if (loopcount==100000)
- { if (iswaiting==0) loop();
- loopcount=0;
- }
-
- }
- }
- void setup(void)
- { switch (winnum)
- { case 1:
- GpuSend("DR2;CLS(0);DS24(4,0,'锂电池电压',1);DS24(160,0,'总电压:',4);BOX(0,30,319,130,11);\r\n");
- break;
- case 2:
- GpuSend("DR2;CLS(0);SPG(2);\r\n");
- break;
- case 3:
- GpuSend("DR2;CLS(0);DS16(0,0,'Debug:',1);\r\n");
- break;
- }
- Delayms(200000);
- }
- void loop(void)
- { switch(winnum)
- { case 1:
- showwin1();
- break;
- case 3:
- showdebug();
- break;
- }
- }
- void onkey(void)
- { //BC:0001 BA:0001 BB:0000
-
- switch (winnum)
- { case 1:
- if ((cmd[0]=='B') &(cmd[1]=='C') &(cmd[6]=='1'))
- { //A按键单击
- gowin(3);
- }
- if ((cmd[0]=='B') &(cmd[1]=='A') &(cmd[6]=='1'))
- { //A按键长按击
- gowin(2);
- iswaiting=1; //进入按钮释放等待循环中
-
- }
- if ((cmd[0]=='B') &(cmd[1]=='B'))
- { iswaiting=0; //长按按键释放
- }
- break;
- case 2:
- if ((cmd[0]=='B') &(cmd[1]=='C') &(cmd[6]=='1'))
- { //A按键单击
- Set5VBase();
- SaveROM();
- gowin(1);
- }
- break;
- case 3:
- if ((cmd[0]=='B') &(cmd[1]=='C') &(cmd[6]=='1'))
- { //A按键单击
- gowin(1);
- }
- break;
-
- }
- //if(cmd[0]==
- }
- void showwin1(void)
- { u8 i,y,c;
- u16 x1,x2;
- CompADC();
- CompVol();
- CompLi();
- CompCellPer();
- min=99;max=0;argv=0;
- js=0;
- for (i=0;i<6;i++)
- { if (Li[i]>1)
- { argv+=Li[i];
- js++;
- if (Li[i]<=min) min=Li[i];
- if (Li[i]>max) max=Li[i];
- }
- }
- if (min==99) min=0;
- argv=argv/js;
- for (i=0;i<6;i++)
- { x1=i*54+10;x2=x1+30;
- if (Li[i]>1)
- { sprintf(buf,"ICON(%d,165,1,11,1,%d);DS16(%d,224,'%.2f',4);",54*i,CellPer[i],54*i+4,Li[i]);
- GpuSend(buf);
- y=(Li[i]-argv)*100;
- y=80-y;
- c=2;
- if (y>130) {y=130;c=1;};
- if (y<30) {y=30;c=1;};
- sprintf(buf,"BOXF(%d,31,%d,%d,0);BOXF(%d,%d,%d,129,%d);",x1,x2,y,x1,y,x2,c);
- GpuSend(buf);
- }
- else
- { sprintf(buf,"ICON(%d,165,1,11,1,10);DS16(%d,224,' --- ',4);BOXF(%d,31,%d,79,0);BOXF(%d,81,%d,129,0);",54*i,54*i+4,x1,x2,x1,x2);
- GpuSend(buf);
-
- }
- }
- sprintf(buf,"DS24(240,0,'%.2fV',4);DS16(10,140,'最高:%.2fV 平均:%.2fV 最低:%.2fV',3);",LV[js-1],max,argv,min);
- GpuSend(buf);
- GpuSend("PL(0,80,320,80,11);\r\n");
- Delayms(1000000);
- }
复制代码
|
|