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

📄 acq.c

📁 基于嵌入式图形库microwindows的简单示例程序10例
💻 C
字号:
/****************************************************************	2004-5-20 by zou jian guo <ah_zou@163.com>*****************************************************************/#define MWINCLUDECOLORS#include <stdio.h>#include <math.h>#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	0x1void 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<usec; i++)		for(j=0; j<1000; j++)		;			}/************************************************************************/void draw_data(){	int high=17;	int ch_y[4]={34,68,102,136}; //4 channel Y	int i;	int y0[4]={34,68,102,136};	int x0=0;	int x,y[4];	int ad[4];   	gLine=GrNewGC();   	GrSetGCForeground(gLine,RED);   	GrSetGCBackground(gLine,WHITE);		for(x=0; x<320; x+=1){		for (i=0; i<4 ;i++){			ad[i]=GetADresult(i);			y[i]=(ad[i]-512)*high/512; //40->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]);    }}

⌨️ 快捷键说明

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