📄 acq.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 + -