现在的位置: 首页 > 综合 > 正文

uc/os-II & ucGUI study_1

2013年06月30日 ⁄ 综合 ⁄ 共 9601字 ⁄ 字号 评论关闭
/*******************************************************************
*
*                    Draws the background
*
********************************************************************
*/
static void Drawbj(void)
{
  GUI_SetBkColor(GUI_YELLOW);
  GUI_Clear();
  GUI_SetColor(GUI_RED);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
    GUI_DispStringAt("姓名:daicheng",  160, 160);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("指导老师:",  160, 180);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("<<<<<<<<<<<<<<请您稍等>>>>>>>>>>>>",  160, 200);
  GUI_Delay(2000);
}  
static void jieshao(void)
{
  GUI_SetBkColor(GUI_BLACK);
  GUI_Clear();
  GUI_SetColor(GUI_YELLOW);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("本设计主要是数字信号发生,显示,调节与回放,",160, 36);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("主要完成基于数字信号综合系统的设计,它是",  160, 60);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("基于ARM的嵌入式系统的应用,对嵌入式中波",  160, 84);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("形的采集、LCD显示、波形存储,以及可以调节",  160, 106);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("的方波输出,三角波的输出的功能等等.......",  160, 130);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("请您选择您的操作",  160, 154);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("1 波形的发生与调节 2 波形采集,回放与调节  ",  160, 178);
  GUI_Delay(2000);
}  
/*******************************************************************
*
*                    Draws the graph area
*
********************************************************************
*/
static void Draw(void * p)
{
  int i;
  PARAM * pParam = (PARAM *)p;
  GUI_SetBkColor(GUI_BLACK);
  GUI_SetColor(GUI_DARKGRAY);
  GUI_ClearRect(19, (LCDHEIGHT - 20) - YSIZE, (LCDWIDTH - 2), (LCDHEIGHT - 21));
  for (i = 0; i < (YSIZE / 2); i += 20)
  {
    GUI_DrawHLine((LCDHEIGHT - 20) - (YSIZE / 2) + i, 19, (LCDWIDTH - 2));
    if (i)
{
     GUI_DrawHLine((LCDHEIGHT - 20) - (YSIZE / 2) - i, 19, (LCDWIDTH - 2));//}
    }
  }
  for (i = 40; i < (LCDWIDTH - 20); i += 40)
  {
    GUI_DrawVLine(18 + i, (LCDHEIGHT - 20) - YSIZE, (LCDHEIGHT - 21));
  }
  GUI_SetColor(COLOR_GRAPH0);
  GUI_DrawGraph(pParam->aY, (LCDWIDTH - 20), 19, (LCDHEIGHT - 20) - YSIZE);
  GUI_SetColor(GUI_YELLOW); //中间线的颜色
  GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) , 19, (LCD_XSIZE - 2)); //画中线
}
static void Draw2(void * p)
{
  PARAM * pParam = (PARAM *)p;
  Draw(p);
  GUI_SetColor(COLOR_GRAPH1);
  GUI_DrawGraph(pParam->aY+15, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);
}
/*******************************************************************
*
*                    Labels the x & y-axis
*
********************************************************************
*/
static void Label(void)
{
  int x, y;
  GUI_SetBkColor(GUI_RED);
  GUI_Clear();
  GUI_SetPenSize(1);
  GUI_ClearRect(0, (LCDHEIGHT - 21) - YSIZE, (LCDWIDTH - 1), (LCDHEIGHT - 1));
  GUI_DrawRect(18, (LCDHEIGHT - 21) - YSIZE, (LCDWIDTH - 1), (LCDHEIGHT - 20));
  GUI_SetFont(&GUI_Font6x8);
  for (x = 0; x < (LCDWIDTH - 20); x += 40)
  {
    int xPos = x + 18;
    GUI_DrawVLine(xPos, (LCDHEIGHT - 20), (LCDHEIGHT - 14));
    GUI_DispDecAt(x / 40, xPos - 2, (LCDHEIGHT - 9), 1);
  }
  for (y = 0; y < YSIZE / 2; y += 20)
  {
    int yPos = (LCDHEIGHT - 20) - YSIZE / 2 + y;
    GUI_DrawHLine(yPos, 13, 18);
    if (y)
    {
      GUI_GotoXY(1, yPos - 4);
      GUI_DispSDec(-y / 20, 2);
      yPos = (LCDHEIGHT - 20) - YSIZE / 2 - y;
      GUI_DrawHLine(yPos, 13, 18);
      GUI_GotoXY(1, yPos - 4);
      GUI_DispSDec(y / 20, 2);
    }
   else
   {
      GUI_DispCharAt('0', 7, yPos - 4);
    }
  }
}

/*******************************************************************
*
*                    Draws a random wave
*
********************************************************************
*/

static void GetRandom(I16 * paY, int Time, int n)
{
  int aDiff, i;
  if (Time > 5000)
    Time -= 5000;
  if (Time > 2500)
    Time = 5000 - Time;
  Time /= 200;
  aDiff = Time * Time + 1;
  for (i = 0; i < n; i++)
  {
    if (!i)
    {
      paY = rand() % YSIZE;
    }
    else
    {
      I16 yNew;
      int yD = aDiff - (rand() % aDiff);
      if (rand() & 1)
      {
        yNew = paY + yD;
      }
      else
      {
        yNew = paY - yD;
      }
      if (yNew > YSIZE)
      {
        yNew -= yD;
      }
      else
      { if (yNew < 0)
        yNew += yD;
      }
      paY = yNew;
    }
  }
}

/*******************************************************************
*
*                    Draws a sine wave
*
********************************************************************
*/
//基本波形
static void GetSineData(I16 * paY, int n)
{
  int i;
  for (i = 0; i < n; i++) {
    float s =sin(i * DEG2RAD * 4);//4改变波形频率;
    paY = s * YSIZE / 2 + YSIZE / 2;
  }
}
static void DemoSineWave(void)
{
  PARAM Param;
  I16 * pStart;
  int t0, Cnt = 0;
  GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)};
  GUI_HMEM hMem = GUI_ALLOC_Alloc(405 * sizeof(I16));//405
  GUI_SetColor(GUI_RED);
  GUI_SetBkColor(GUI_YELLOW);
   GUI_ClearRect(0, 0, LCD_XSIZE, 70);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("数字信号综合系统",  160, 20);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_DispStringAt("正弦波显示", 10, 60);
  pStart = GUI_ALLOC_h2p(hMem);
  GetSineData(pStart, 405);//405
  GUI_SetFont(&GUI_Font6x8);
  t0 = GUI_GetTime();
  while((GUI_GetTime() - t0) < 5000) //10000控制波形持续时间;
  {
    int t1, tDiff2;
    if (Cnt++ % 90)
    {
      Param.aY++;
    }
    else
    {
      Param.aY = pStart;
    }
    t1 = GUI_GetTime();
   // GUI_MEMDEV_Draw(&Rect, Draw2, &Param, 0, 0);
    GUI_MEMDEV_Draw(&Rect, Draw, &Param, 0, 0);
    tDiff2 = GUI_GetTime() - t1;
    if (tDiff2 < 100) //100控制波形移动速度;
    {
      GUI_Delay(100 - tDiff2);
    }
  }
  GUI_ALLOC_Free(hMem);
}

/*******************************************************************
*
*                    adds several waves
*
********************************************************************
*/
static void DrawOrData(GUI_COLOR Color, I16 * paY)
{
  GUI_SetColor(Color);
  GUI_DrawGraph(paY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);
}

/*******************************************************************
*
*                    Draws a AD wave
*
********************************************************************
*/

static void GetRandomData(I16 * paY, int Time, int n)
{
  int aDiff, i;
  if (Time > 5000)
    Time -= 5000;
  if (Time > 2500)
    Time = 5000 - Time;
  Time /= 200;
  aDiff = Time * Time + 1;
  for (i = 0; i < n; i++)
  {
int a1,a2,a3,a4,a5;
int max,min,sum,aver;
a1=GetADresult(0);
a2=GetADresult(0);
a3=GetADresult(0);
a4=GetADresult(0);
a5=GetADresult(0);
max=a1;
if (a1<a2)  max=a2;
    if (max<a3)  max=a3;
    if (max<a4)  max=a4;
    if (max<a5)  max=a5;
    min=a1;
    if (a2<min)  min=a2;
    if (a3<min)  min=a3;
    if (a4<min)  min=a4;
    if (a5<min)  min=a5;
    aver=(a1+a2+a3+a4+a5-max-min)/3;
    paY=(aver*140/1023);
  }
}
static void DemoRandomGraph(void)
{
  PARAM Param;
  int tDiff, t0;
  int a;
  GUI_RECT Rect = {19, (240 - 20) - YSIZE, (320 - 2), (240 - 21)};
  GUI_HMEM hMem = GUI_ALLOC_Alloc((LCDWIDTH - 20) * sizeof(I16));
  GUI_SetColor(GUI_RED);
  GUI_SetBkColor(GUI_YELLOW);
  GUI_ClearRect(0, 0, LCD_XSIZE, 70);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("数字信号综合系统",  160, 20);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_DispStringAt("数字波形显示", 10, 60);
   Param.aY = GUI_ALLOC_h2p(hMem);
  GUI_SetFont(&GUI_Font6x8);
   t0 = GUI_GetTime();
while((tDiff = (GUI_GetTime() - t0)) < 100) //10000
  {
    int t1, tDiff2;
    GetRandomData(Param.aY, tDiff, (LCDWIDTH - 20));
    t1 = GUI_GetTime();
    GUI_MEMDEV_Draw(&Rect, Draw, &Param, 0, 0);
    tDiff2 = GUI_GetTime() - t1;
    if (tDiff2 < 100)
{
      GUI_Delay(100 - tDiff2);
    }
  }
  GUI_ALLOC_Free(hMem);
}

//连续变化的正旋波
static void GetSineDatac(I16 * paY, int n)
{
  int i,t,l;
  t=GetADresult(1)*8/1023+1;
  l=GetADresult(2)*12/1023+1;
  for (i = 0; i < n; i++) {
    float s =sin(i * DEG2RAD * t)/l;//4改变波形频率;
    paY = s * YSIZE / 2 + YSIZE / 2;
  }
}
static int DemoSineWavec(void)
{
  PARAM Param;
  I16 * pStart;
  int t0, Cnt = 0;
  GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)};
  GUI_HMEM hMem = GUI_ALLOC_Alloc(405 * sizeof(I16));//405
  GUI_SetColor(GUI_RED);
  GUI_SetBkColor(GUI_YELLOW);
  GUI_ClearRect(0, 0, LCD_XSIZE, 70);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("数字信号综合系统",  160, 20);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_DispStringAt("波形调整", 10, 60);
  pStart = GUI_ALLOC_h2p(hMem);
  GetSineDatac(pStart, 405);//405
  GUI_SetFont(&GUI_Font6x8);
  t0 = GUI_GetTime();
  while((GUI_GetTime() - t0) <100) //10000控制波形持续时间;
  {
    int t1, tDiff2;
    if (Cnt++ % 90)
    {
      Param.aY++;
    }
    else
    {
      Param.aY = pStart;
    }
    t1 = GUI_GetTime();
    GUI_MEMDEV_Draw(&Rect, Draw, &Param, 0, 0);
    tDiff2 = GUI_GetTime() - t1;
    if (tDiff2 < 100) //100控制波形移动速度;
    {
      GUI_Delay(100 - tDiff2);
    }
  }
  GUI_ALLOC_Free(hMem);
}

static void GetRandomData2(I16 * paY, int n)
{
I16 * pbY;
int aDiff, i;
  for (i = 0; i < n; i++)
  {
    
int a1,a2,a3,a4,a5,addre;
int max,min,sum,aver;
a1=GetADresult(0);
a2=GetADresult(0);
a3=GetADresult(0);
a4=GetADresult(0);
a5=GetADresult(0);
addre=0xf8000;
max=a1;
if (a1<a2)  max=a2;
    if (max<a3)  max=a3;
    if (max<a4)  max=a4;
    if (max<a5)  max=a5;
    min=a1;
    if (a2<min)  min=a2;
    if (a3<min)  min=a3;
    if (a4<min)  min=a4;
    if (a5<min)  min=a5;
    aver=(a1+a2+a3+a4+a5-max-min)/3;
    pbY=(aver*140/1023);
    flash_sec_erase(34);
    flash_single_write(addre,pbY);
    addre=addre+1;
  }
    flash_read(0xf8000);
}
static void DemoRandomGraph2(void)
{
  PARAM Param;
  int tDiff, t0;
  int a,key;
  GUI_RECT Rect = {19, (240 - 20) - YSIZE, (320 - 2), (240 - 21)};
  GUI_HMEM hMem = GUI_ALLOC_Alloc((LCDWIDTH - 20) * sizeof(I16));
  GUI_SetColor(GUI_RED);
  GUI_SetBkColor(GUI_YELLOW);
  GUI_ClearRect(0, 0, LCD_XSIZE, 70);
  GUI_SetFont(&GUI_FontHZ17x16);
  GUI_SetTextAlign(GUI_TA_HCENTER);
  GUI_DispStringAt("数字信号综合系统",  160, 20);
  GUI_SetFont(&GUI_FontHZ12x12);
  GUI_DispStringAt("波形回放", 10, 60);
  Param.aY = GUI_ALLOC_h2p(hMem);
  GUI_SetFont(&GUI_Font6x8);
  flash_init();
  GetRandomData2(Param.aY, (LCDWIDTH - 20));
  GUI_MEMDEV_Draw(&Rect, Draw, &Param, 0, 0);
  GUI_ALLOC_Free(hMem);
}

这只是其中的一部分!

抱歉!评论已关闭.