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; i screen 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]); } }