www.pudn.com > microwindows.example10.rar > acq.c


/****************************************************************
	2004-5-20 by zou jian guo 
*****************************************************************/
#define MWINCLUDECOLORS
#include 
#include 
#include"nano-X.h"
#include "hardware.h"
#include "pthread.h"


static GR_WINDOW_ID w;      //声明根窗口
static GR_GC_ID gc;         //声明根窗口绘图上下文
static GR_GC_ID gLine;     //
static GR_GC_ID gid;	    //声明按钮的绘图上下文 
static GR_GC_ID gb;     //cotext of the button when it had been putted.
static GR_GC_ID t;	    //声明欢迎词绘图上下文
static   GR_EVENT event;          //声明事件
static   GR_WINDOW_ID btClear;
static   GR_WINDOW_ID bt;
static   GR_WINDOW_ID bt_exit;
//static   GR_FONT_ID font;         //

#define DRAWLINE 1
#define DRAWRECT 2
#define DRAWROUND 3
#define CLEAR 4

#define ADCCON_FLAG		0x40
#define ADCCON_SLEEP		0x20

#define ADCCON_ADIN0		(0x0<<2)
#define ADCCON_ADIN1		(0x1<<2)
#define ADCCON_ADIN2		(0x2<<2)
#define ADCCON_ADIN3		(0x3<<2)
#define ADCCON_ADIN4		(0x4<<2)
#define ADCCON_ADIN5		(0x5<<2)
#define ADCCON_ADIN6		(0x6<<2)
#define ADCCON_ADIN7		(0x7<<2)

#define ADCCON_READ_START	0x2
#define ADCCON_ENABLE_START	0x1


void draw_main_win(GR_WINDOW_ID w,GR_GC_ID gc);
void *do_event(void* data);
void draw_data();
void clear_window();
void udelay(int usec);


/************************************************************************/
void init_ADdevice(void)
{
	ADCPSR=20;
	ADCCON=ADCCON_SLEEP;
}
/************************************************************************/
int GetADresult(int channel)
{
	int i=0;
	ADCCON=(channel<<2)|ADCCON_ENABLE_START;

	//To avoid The first FLAG error case.
	//(The START bit is cleared in one ADC clock.)
	while(ADCCON &1);
	for(;i<100;i++);
	//To avoid The second FLAG error case
	while(!( (ADCCON) & ADCCON_FLAG));
	udelay(100);
	return ADCDAT;
}
/************************************************************************/
int main(int ac,char **av)
{
	pthread_t th_a;
  	void * retval;
   if (GrOpen()<0){
		printf("Can't open graphics\n");
     	exit(1);
    }
	init_ADdevice();
    w=GrNewWindow(GR_ROOT_WINDOW_ID,10,10,300,180,3,GREEN,BLUE);//
    gc=GrNewGC();//
    GrMapWindow(w);//
  
    draw_main_win(w,gc); 
 	pthread_create(&th_a, NULL, do_event, 0);
	while(1){
		draw_data();
		clear_window();
	}
  	pthread_join(th_a, &retval);
      
   	GrClose();
   	return 0;

}
/************************************************************************/
void draw_main_win(GR_WINDOW_ID w,GR_GC_ID gc)
{//draw main window
   /*编译为Native版时变量可在函数内设,但交叉编译时要在程序声明段设*/

   bt=GrNewWindow(GR_ROOT_WINDOW_ID,10,190,300,40,3,RED,BLUE);
   btClear=GrNewWindow(bt,235,5,65,30,0,RED,BLUE);
   bt_exit=GrNewWindow(bt,180,5,40,30,2,YELLOW,BLUE);
   
   GrMapWindow(bt);
   GrMapWindow(btClear);
   GrMapWindow(bt_exit);
   //draw clear button
   gid=GrNewGC();
   GrSetGCForeground(gid,GREEN);
   GrSetGCBackground(gid,WHITE);

	GrSetGCForeground(gc,RED);
   	GrSetGCBackground(gc,YELLOW);
   	GrText(bt_exit,gc,8,20,"EXIT",-1,GR_TFASCII);
	GrSetGCForeground(gc,YELLOW);
   	GrSetGCBackground(gc,RED);
	GrText(bt,gc,8,25,"AD ACQUITION DEMO",-1,GR_TFASCII);
   
   //GR_GC_ID t;//为欢迎词选择字体颜色.
   t=GrNewGC();
   
	GrSetGCForeground(t,YELLOW);
   	GrSetGCBackground(t,GREEN);
   	GrText(btClear,t,15,20,"CLEAR",-1,GR_TFASCII);

   GrSelectEvents(btClear,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP);
   GrSelectEvents(bt_exit,GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_UP);

}
void clear_window()
{
	gb=GrNewGC();
	GrSetGCForeground(gb,GRAY);
	GrFillEllipse(btClear,gb,32,15,30,13);
	GrSetGCForeground(gb,GREEN);
	GrSetGCBackground(gb,GRAY);
	GrText(btClear,gb,15,20,"CLEAR",-1,GR_TFASCII);
	GrFillRect(w,gb, 0, 0, 300, 180);
}
/************************************************************************/
void *do_event(void* data)
{
	while(1)
	{	
  		GrGetNextEvent(&event);
  		switch(event.type){
    	case GR_EVENT_TYPE_BUTTON_DOWN:
    		if(event.button.wid==btClear){
				clear_window();
    		}
    		if(event.button.wid==bt_exit){
				exit(0);
			}
			break;
        case GR_EVENT_TYPE_BUTTON_UP:
		    if (event.button.wid==bt_exit){
		    	GrClose();
		    	exit(0);
      		}
    		break;    
  		}
 	}
}
void udelay(int usec)
{
	int i,j;
	for(i=0; iscreen Y  ->2.5V
      		GrLine(w,gLine,x0, y0[i], x, ch_y[i]-y[i]);
			y0[i]=ch_y[i]-y[i];
			x0=x;
		}
		udelay(100);
		printf("ad= %4d %4d %4d %4d \r",ad[0],ad[1],ad[2],ad[3]);
//		printf("ad= %4d %4d %4d %4d \r",y[0],y[1],y[2],y[3]);
    }
}