⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mwd.c

📁 ARM7下用图形用户界面实现LED,KEY,MOTOR,AD功能
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include "message.h"
#include "mwd.h"
#include "ad.h"
#include "temp.h"
#include "led.h"
#include "touchscreen_s3c44b0_ads7843.h"
#if UNIX | DOS_DJGPP

#endif
#define MWINCLUDECOLORS
#include "nano-X.h"

#define DC      MWRGB(58,110,165)
#define WIC     MWRGB(212,208,200)
#define B1      MWRGB(255,255,255)
#define B2      MWRGB(212,208,200)
#define B3      MWRGB(128,128,128)
#define B4      MWRGB(64,64,64)

#define WIDTH       320
#define HEIGHT      240
#define SDTOPW      320
#define SDTOPH      50

#define ADWW      99
#define ADWH      140
#define LEDWW     99
#define LEDWH     140

#define LEDBW     75
#define LEDBH     30

#define ADBW      75
#define ADBH      30

#define PICW      99
#define PICH      140

#define SW        50 
#define SH        30

#define KEYWX     147
#define KEYWY     86
#define KEYWW     145
#define KEYWH     147

#define KBW       43 
#define KBH       32

#define  BTW      60 
#define  BTH      60

#define FX        5
#define FY        17

/**********************************************************/

GR_WINDOW_ID window;

GR_WINDOW_ID bt[4];

GR_WINDOW_ID smb[5];
GR_WINDOW_ID start;
GR_WINDOW_ID adw;
GR_WINDOW_ID sdtop;
GR_WINDOW_ID ledw;
GR_WINDOW_ID keyw;
GR_WINDOW_ID kb[4][3];
GR_WINDOW_ID ledb[4];
GR_WINDOW_ID adb[4];
GR_WINDOW_ID temp;                                                                                
GR_WINDOW_ID text;
                                                                                
GR_GC_ID gc;
GR_FONT_ID fontid;
GR_IMAGE_ID picID;
GR_IMAGE_INFO picIF;
GR_EVENT event;
unsigned int sum;
char *fileName[5]={"AD","LED","KEY","123","EXIT"};
char *keyname[4][3]={{"7","8","9"},{"4","5","6"},{"1","2","3"},{"0",".","ENT"}};
char *ledbname[4]={"L_SHIFT","R_SHIFT","CLSHFT","CRSHFT"};



/**********************************************************/
void drawMainWin(GR_GC_ID gc);
void drawBar(GR_GC_ID gc);
void setpic(char *picfile,GR_WINDOW_ID win,int x,int y);
void doStartMenu(GR_GC_ID gc);
void doEventButtonDown(GR_EVENT_BUTTON *bevent,GR_GC_ID gc);
void doEventButtonUp(GR_EVENT_BUTTON *bevent);
void umapStartMenu();
void bwin(GR_GC_ID gc,GR_WINDOW_ID win,int w,int h);
void swin(GR_GC_ID gc,GR_WINDOW_ID win,int w,int h);
void twin(GR_GC_ID gc,GR_WINDOW_ID win,int w,int h);
void wwin(GR_GC_ID gc,GR_WINDOW_ID win,int w,int h);
void dokeyw(GR_GC_ID gc);
void showkeyw(GR_GC_ID gc);
void umapkeyw();
void doad(float *a,GR_GC_ID gc);
void umapledw();
void umapadw();
void doledw(GR_GC_ID gc);
void doadw(GR_GC_ID gc);
void shownum(int a,GR_GC_ID gc);
void dotemp(float temp,GR_GC_ID gc);
void getnum(int keynum);
void showkeynum(char key1);
char nkey;
/**********************************************************/
void * mwd(void *data)
{
    if (GrOpen() < 0)
        exit(1); 
    gc = GrNewGC();
    GrSetGCUseBackground(gc, GR_FALSE);
    GrSetGCBackground(gc, MWRGB(255,255,255));
    GrSetGCForeground(gc, 255);
    fontid = GrCreateFont("HZKFONT", 0, NULL);
//    fontid = GrCreateFont(NULL, 0, NULL);
    GrSetFontSize(fontid, 16);
//    GrSetFontRotation(fontid, 330);         /* 33 degrees */
    GrSetFontAttr(fontid, GR_TFKERNING | GR_TFANTIALIAS, 0);
    GrSetGCFont(gc, fontid);
    drawMainWin(gc);
    drawBar(gc);

    while (1)
    {
		if(!(PDATG&ZLG7289_KEY) )
		{
			nkey=getkey();
			showkeynum(nkey);
		}
		while(!(PDATG&ZLG7289_KEY));
        GrCheckNextEvent(&event);
        switch(event.type)
        {
            case GR_EVENT_TYPE_CLOSE_REQ:
                 GrClose();
                 exit(0);
            case GR_EVENT_TYPE_BUTTON_DOWN:
                 doEventButtonDown(&event.button,gc);
                 break;
            case GR_EVENT_TYPE_BUTTON_UP:
                 doEventButtonUp(&event.button);
                 break;
        }
    }
    GrFlush();
    GrDestroyFont(fontid);
    GrClose();
    return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void drawMainWin(GR_GC_ID gc)
{
    window = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, WIDTH, HEIGHT,0,DC,WIC);
    GrSelectEvents(window,
    GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ |
    GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT);
    GrMapWindow(window);
    
    sdtop = GrNewWindow(window, 0, 0, SDTOPW, SDTOPH,0,WIC,WIC);
    GrSelectEvents(sdtop,
    GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ );
    GrMapWindow(sdtop);
    bwin(gc,sdtop,SDTOPW,SDTOPH);
   
    GrSetGCFont(gc, fontid);
    GrSetGCForeground(gc, BLACK);
 
    text=GrNewWindow(window,10,55,120,35,0,DC,DC);
    GrText(window, gc, 170,65+FY,"Temp:", -1, GR_TFASCII); 
    temp=GrNewWindow(window,220,55,100,35,0,DC,DC);
    GrSelectEvents(text,
    GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ );
    GrMapWindow(text);
    GrSelectEvents(temp,
    GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CLOSE_REQ );
    GrMapWindow(temp);

}

//////////////////////////////////////////////////////////////////////////////////////////////////

void drawBar(GR_GC_ID gc)
{
    char abc[4][2];
    int i;
    bt[0]=GrNewWindow(window,150,90,BTW,BTH,0,WIC,BLUE);
    bt[1]=GrNewWindow(window,220,90,BTW,BTH,0,WIC,BLUE);
    bt[2]=GrNewWindow(window,150,160,BTW,BTH,0,WIC,BLUE);
    bt[3]=GrNewWindow(window,220,160,BTW,BTH,0,WIC,BLUE);

    for(i=0;i<4;i++)
    {
		sprintf(abc[i],"%d",i);
        GrSelectEvents(bt[i],GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN 
        | GR_EVENT_MASK_BUTTON_UP);
	    GrMapWindow(bt[i]);
	    bwin(gc,bt[i],BTW,BTH);
        GrText(bt[i], gc, FX+10, FY+10,abc[i] , -1, GR_TFASCII);
    }
    adw=GrNewWindow(window,15,90,ADWW,ADWH,0,WIC,WIC);
    ledw=GrNewWindow(window,15,90,LEDWW,LEDWH,0,WIC,WIC);
    for(i=0;i<4;i++)
    {
        ledb[i]=GrNewWindow(ledw,12,6+i*LEDBH+i*3,LEDBW,LEDBH,0,WIC,WIC);
        GrSelectEvents(ledb[i],GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN |
         GR_EVENT_MASK_BUTTON_UP );               
    }
    GrSelectEvents(adw,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN );

    setpic("./image/biaozhi256.bmp",window,18,115);


    for(i=0;i<5;i++)
    {
        smb[i]=GrNewWindow(sdtop,SW+10+i*SW,10,SW,SH,0,WIC,WIC);
        GrSelectEvents(smb[i],GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN |
           GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT);
    }
    dokeyw(gc);
    start=GrNewWindow(sdtop,3,10,SW,SH,0,WIC,WIC);
	GrSelectEvents(start,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN |
                    GR_EVENT_MASK_MOUSE_ENTER | GR_EVENT_MASK_MOUSE_EXIT);
    GrMapWindow(start);

    GrSetGCForeground(gc, BLACK);
    GrSetGCUseBackground(gc, GR_FALSE);
    GrSetGCFont(gc, fontid);
    GrText(start, gc, FX, FY, "start", -1, GR_TFASCII);
     
}

//////////////////////////////////////////////////////////////////////////////////////////////////

void setpic(char *picfile,GR_WINDOW_ID win,int x,int y)
{
   if(!(picID = GrLoadImageFromFile(picfile, 0)))
   {
       fprintf(stderr, "Failed to load image file \"%s\"\n", picfile);
   }
   GrGetImageInfo(picID, &picIF);
   GrDrawImageToFit(win, gc, x, y, picIF.width, picIF.height, picID);
 //  GrFreeImage(picID);
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void doStartMenu(GR_GC_ID gc)
{
   int i;
   char* startMenuFileName[5];

   GrSetGCForeground(gc,BLACK);
   GrSetGCUseBackground(gc, GR_FALSE);
   GrSetGCFont(gc, fontid);
   for(i=0;i<5;i++)
   {
       GrMapWindow(smb[i]);
       startMenuFileName[i]=fileName[i];
       GrText(smb[i],gc,FX,FY,startMenuFileName[i],-1,GR_FALSE);
   }
}

void dokeyw(GR_GC_ID gc)
{
    int i,j;
    keyw = GrNewWindow(window, KEYWX, KEYWY, KEYWW, KEYWH,0,WIC,WIC);
 //   GrMapWindow(keyw);
    bwin(gc,sdtop,SDTOPW,SDTOPH);
    for(i=0;i<4;i++)
    	for(j=0;j<3;j++)
	    {
            kb[i][j] = GrNewWindow(keyw, 5+3*j+KBW*j,5+3*i+KBH*i, KBW, KBH,0,WIC,WIC);
	        GrSelectEvents(kb[i][j],GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN |
            GR_EVENT_MASK_BUTTON_UP );
       	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////
void doEventButtonDown(GR_EVENT_BUTTON *bevent,GR_GC_ID gc)
{
    MSGE msg;
    int w=0,h=0;
    static int ps=0;
    static int ps1=0;
    static int ps2=0;
    static int ps3=0;
//    static unsigned int sum=0;
    if(sum>99999998)
    {
    	sum=0;
    }
    if(bevent->wid==start)
    {
    	w=SW;
    	h=SH;
        ps++;
        ps%=100;
        if(ps%2!=0)
        {
			twin(gc,bevent->wid,w,h);
            doStartMenu(gc);
        }
        else
        {
			wwin(gc,bevent->wid,w,h);
			umapStartMenu(gc);
        }
    }
    if(bevent->wid==bt[0])
    {
		w=BTW;
		h=BTH;
		twin(gc,bevent->wid,w,h);
		msg.type=MOTORS;
		sendmessage(&mbuffer, &msg);
    }
    if(bevent->wid==bt[1])
    {
		w=BTW;
        h=BTH;
        twin(gc,bevent->wid,w,h);
		msg.type=MOTOR;
        msg.num=400;
		sendmessage(&mbuffer, &msg);
    }
    if(bevent->wid==bt[2])
    {
		w=BTW;
        h=BTH;
        twin(gc,bevent->wid,w,h);
		msg.type=MOTOR;
		msg.num=-400;
		sendmessage(&mbuffer, &msg);
    }
    if(bevent->wid==bt[3])
    {
		w=BTW;
		h=BTH;
		twin(gc,bevent->wid,w,h);
		msg.type=MOTORE;
		sendmessage(&mbuffer, &msg);
    }
    if(bevent->wid==smb[0])
    {
	    w=SW;
        h=SH;
        ps1++;
        ps1%=100;
        if(ps1%2!=0)
        {
    		twin(gc,bevent->wid,w,h);
    		wwin(gc,smb[1],w,h);
            doadw(gc);
        }
        else
        {
		    wwin(gc,bevent->wid,w,h);
            umapadw();
        }
    }
    if(bevent->wid==smb[1])
    {
	    w=SW;
        h=SH;
        ps2++;
            ps2%=100;
        if(ps2%2!=0)
        {
    		twin(gc,bevent->wid,w,h);
    		wwin(gc,smb[0],w,h);
            doledw(gc);
        }
        else
        {
    		wwin(gc,bevent->wid,w,h);
            umapledw();
        }
    }
    if(bevent->wid==smb[2])
    {
	    w=SW;
        h=SH;
        ps3++;
        ps3%=100;
        if(ps3%2!=0)
        {
    		twin(gc,bevent->wid,w,h);
            showkeyw(gc);
        }
        else
        {
    		wwin(gc,bevent->wid,w,h);
            umapkeyw();
        }
    }
    if(bevent->wid==smb[3])
    {
	    w=SW;
        h=SH;
    }
    if(bevent->wid==smb[4])
    {
	    w=SW;
        h=SH;
        GrClose();
		TCON&=~(0x1<<12);
	    exit(1);
    }
   	if(bevent->wid==kb[0][0])
	{
        w=KBW;
	    h=KBH;
	    twin(gc,bevent->wid,w,h);
		getnum(7);
	}
	if(bevent->wid==kb[0][1])
	{
	    w=KBW;
	    h=KBH;
	    twin(gc,bevent->wid,w,h);
		getnum(8);
	}
    if(bevent->wid==kb[0][2])
    {
	    w=KBW;
	    h=KBH;
	    twin(gc,bevent->wid,w,h);
	getnum(9);
    }
    if(bevent->wid==kb[1][0])
    {
	    w=KBW;
	    h=KBH;
	    twin(gc,bevent->wid,w,h);
		getnum(4);
    }
    if(bevent->wid==kb[1][1])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -