Example #1
0
int main(){

#ifndef TESTING

#include "uart.h"
#include "mmc.h"

	// Initializam modulele hardware

	uart_init();
	SPI_init();
	MMC_init();
	BTN_init();
	LCD_init();
#endif
	/* Gaseste prima partitie FAT32 de pe card*/
	init_partition(buffer);

	/**
	  * Gaseste datele despre sistemul de fisiere :
	  * nr de tabele FAT, cluster-ul directorului Root, etc.
	  */
	initFAT32(buffer);
	print_volid(buffer);

	LCD_str( "  ", 0);
	LCD_str( "  ", 0);
	LCD_str( "  Welcome to", 0);
	LCD_str( " MMC Explorer", 0);
	_delay_ms(2500);
	LCD_clear();
	printdirs(openroot());
	return EXIT_SUCCESS;
}
Example #2
0
void printTemperatures(float t1, float t2)
{
	LCD_clear();
	LCD_str("T1: ");
	LCD_int(t1);
	LCD_goto(0,1); //goto second line
	LCD_str("T2: ");
	LCD_int(t2);
}
Example #3
0
void S640K1_TP_respond(int x,int y)
{
  unsigned char n;
  for(n=0;n<21;n++)
  {
    if(x>S640K1_TP[n][0]&&x<S640K1_TP[n][2]&&y>S640K1_TP[n][1]&&y<S640K1_TP[n][3])
    {
      if(n==19)//模式切换
      {
        //sys_flag=main_panel;
        //return;
        auto_scan_flag=~auto_scan_flag;
        if(auto_scan_flag==0xff)
        {
          skq_scan_thread_create();
          LCD_str(671,352,"自动模式",32,Blue2,Black);
        }
        else if(auto_scan_flag==0x00)
        {
          rt_thread_delete(skq_scan_thread);
          LCD_str(671,352,"手动模式",32,Blue2,Black);
        }
        return;
      }
      else if(n==20)//(退出)
      {
        rt_thread_delete(skq_scan_thread);
        ADC_R_stop();
        ADC_V_stop();
        PowerA_DIS();
        CD4067_DIS();
        sys_flag=main_panel;
        draw_main_panel();
        return;
      }
      else if(n==16)
      {
        ;
      }
      else 
      {        
        LCD_DrawFullRect( S640K1_TP[n][0],   S640K1_TP[n][1],   S640K1_TP[n][2],   S640K1_TP[n][3],  Black, 0);
        S640K1_measure_levels(n);
        LCD_DrawFullRect( S640K1_TP[n][0],   S640K1_TP[n][1],   S640K1_TP[n][2],   S640K1_TP[n][3],  Blue2, 0);
      } 
    }
  }
}
Example #4
0
void start(void)
{
	LCD_str("SZUKAM POCZATKU");
	while( !(PINC & (1<<ZAB)) )
		kroczki=-1;
	lcd_clr();
}
Example #5
0
/**
  * @brief  主函数
  * @param  无  
  * @retval 无
  */
int main(void)
{	
	Site_t site= {0,0};
	
	/* LED 端口初始化 */
	LED_GPIO_Config();	 
	
	/* LCD初始化 */
	LCD_init();

	SysTick_Init();
	
	site.x=20;site.y=20;
	LCD_str(site,"LCD test OK",BLUE,RED);

	key_event_init();

	/* 方法2,使用固件库控制IO */
	while (1)
	{	
		deal_key_event();
	}

}
Example #6
0
/**
  * Meniul de navigare in fisiere
  */
void printdirs(struct DIR * dir){
	char namebuf [12];
	uint32_t size = 0;
	uint8_t bitmap = 0, selected = 0, cnt = 0, ret_code = 0, is=0;
	struct dirent * crt_dir;

	do{
		/* Afisam continutul directorului curent */
		rewinddir(dir);
		LCD_clear();
		cnt = 0;
		while(1){
			crt_dir = readdir( dir, buffer);
			ret_code = check (crt_dir);
			if(ret_code == DIR_INVALID)
				continue;
			if(ret_code == DIR_END)
				break;

			get_dirent_name(crt_dir, namebuf);
			if(cnt ++ == selected){
				LCD_str( namebuf,SELECTED );
			}else{
				LCD_str( namebuf, NOT_SELECTED);
			}
		}

		/* Asteptam sa selecteze un fisier sau director */
		bitmap = BTN_wait();

		switch(bitmap){
			case UP:
				selected = (selected +1)%cnt;
				continue;
			case DOWN:
				selected = (selected + cnt-1) % cnt;
				continue;
			case ENTER:
				rewinddir(dir);
				selected ++;
				while(1){
					crt_dir = readdir( dir, buffer);
					ret_code = check (crt_dir);
					if( ret_code == DIR_VALID) selected--;
					if( !selected ) break;
				}
				break;
			default:
				continue;

		}

		is_dir(crt_dir, &is);
		if( is){
			dir = opendir(crt_dir);
		}else{
			get_dirent_size(crt_dir, &size);
			open_f(crt_dir);

			/* Curatam ecranul si afisam poza */
			LCD_clear();
			draw_bmp();
			close_f();

			/* Asteptam sa apese butonul de exit */
			while( BTN_wait() != CLOSE);
		}
	}while(1);
	exit(EXIT_SUCCESS);
}
Example #7
0
void sk640k1_scan(void)
{
  rt_int16_t  *p;
  u8 m,n,k;
  
  for(n=0;n<7;n++)
  {
    Set_Scan_Channel((7-n));
    rt_thread_delay(5);
    ADC_R_Restart();
    ADC_R_DMA_Config();
    while(!DMA_GetFlagStatus(ADC_R_DMA_Flag));
    p=Get_ADC_R_Value();
//    rt_kprintf("n=%d,r=%d\r\n",n,*p);
    if((*p)<1000)
    {
      sk640_jiwei_flag=sk640_jiwei_flag|1<<n;
    }
    else
    {
      sk640_jiwei_flag=sk640_jiwei_flag&~(1<<n);      
    }
  }
  Set_Scan_Channel(0);//是否在零位
  rt_thread_delay(5);
  ADC_R_Restart();
  ADC_R_DMA_Config();
  while(!DMA_GetFlagStatus(ADC_R_DMA_Flag));
  p=Get_ADC_R_Value();
  if((*p)<1000)//是
  {
    switch(sk640_jiwei_flag)
    {
    case 0x00://级位为0
      {
      S640K1_measure_levels(7);
      LCD_DrawFullRect( S640K1_TP[7][0],   S640K1_TP[7][1],   S640K1_TP[7][2],   S640K1_TP[7][3],  Red, 0);
      LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
      for(k=0;k<21;k++)
      {
        LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
      }
      LCD_DrawFullRect( S640K1_TP[16][0],   S640K1_TP[16][1],   S640K1_TP[16][2],   S640K1_TP[16][3],  Red, 0);
      break;
      }
    case 0x4C://后
      {
        LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
        for(k=0;k<21;k++)
        {
          LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
        }
        S640K1_measure_levels(15);
        LCD_DrawFullRect( S640K1_TP[15][0],   S640K1_TP[15][1],   S640K1_TP[15][2],   S640K1_TP[15][3],  Red, 0);
        S640K1_measure_levels(7);
        LCD_DrawFullRect( S640K1_TP[7][0],   S640K1_TP[7][1],   S640K1_TP[7][2],   S640K1_TP[7][3],  Red, 0);
        break;
      }
    case 0x2A://前
      {
        LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
        for(k=0;k<21;k++)
        {
          LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
        };
        S640K1_measure_levels(17);
        LCD_DrawFullRect( S640K1_TP[17][0],   S640K1_TP[17][1],   S640K1_TP[17][2],   S640K1_TP[17][3],  Red, 0);
        S640K1_measure_levels(7);
        LCD_DrawFullRect( S640K1_TP[7][0],   S640K1_TP[7][1],   S640K1_TP[7][2],   S640K1_TP[7][3],  Red, 0);
        break;
      }
    case 0x34://制
      {
        LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
        for(k=0;k<21;k++)
        {
          LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
        }
        S640K1_measure_levels(18);
        LCD_DrawFullRect( S640K1_TP[18][0],   S640K1_TP[18][1],   S640K1_TP[18][2],   S640K1_TP[18][3],  Red, 0);
        S640K1_measure_levels(7);
        LCD_DrawFullRect( S640K1_TP[7][0],   S640K1_TP[7][1],   S640K1_TP[7][2],   S640K1_TP[7][3],  Red, 0);
        break;
      }
    default:
      {
        for(k=0;k<21;k++)
        {
          LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
        }
        LCD_str(521,352,"级位错误",32,Red,Black);
        S640K1_measure_levels(15);
        S640K1_measure_levels(17);
        S640K1_measure_levels(18);
        break;
      }
    }
  }
  else//不是在0位
  {
    switch(sk640_jiwei_flag)
    {
    case 0x00://级位为0
      {
        LCD_str(521,352,"无司控器",32,Red,Black);
        break;
      }
    case 0x4D://后
      {
      LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
      for(k=0;k<21;k++)
      {
        LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
      }
      S640K1_measure_levels(15);
      LCD_DrawFullRect( S640K1_TP[15][0],   S640K1_TP[15][1],   S640K1_TP[15][2],   S640K1_TP[15][3],  Red, 0);

      rt_thread_delay(5);
      ADC_V_Restart();
      ADC_V_DMA_Config();
      while(!DMA_GetFlagStatus(ADC_V_DMA_Flag));
      p=Get_ADC_V_Value();*p=6*(*p);
      for(n=0;n<18;n++)
      {
        if(((*p)> sk640_jiwei_v[n])&&((*p)<= sk640_jiwei_v[n+1]))
        {
          for(m=0;m<7;m++)
          {
            if(n==sk640_jiwei_q[m])
            {
              S640K1_measure_levels((8+m));
              for(k=7;k<15;k++)
              {
                LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
              }
              LCD_DrawFullRect( S640K1_TP[8+m][0],   S640K1_TP[8+m][1],   S640K1_TP[8+m][2],   S640K1_TP[8+m][3],  Red, 0);
              break;
            }
          }
          break;
        }
      }
      
      break;
      }
    case 0x2B://前
      {
      LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
      for(k=0;k<21;k++)
      {
        LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
      }
      S640K1_measure_levels(17);
      LCD_DrawFullRect( S640K1_TP[17][0],   S640K1_TP[17][1],   S640K1_TP[17][2],   S640K1_TP[17][3],  Red, 0);
      rt_thread_delay(5);
      ADC_V_Restart();
      ADC_V_DMA_Config();
      while(!DMA_GetFlagStatus(ADC_V_DMA_Flag));
      p=Get_ADC_V_Value();*p=6*(*p);
      for(n=0;n<18;n++)
      {
        if(((*p)> sk640_jiwei_v[n])&&((*p)<= sk640_jiwei_v[n+1]))
        {
          for(m=0;m<7;m++)
          {
            if(n==sk640_jiwei_q[m])
            {
              S640K1_measure_levels((8+m));
              for(k=7;k<15;k++)
              {
                LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
              }
              LCD_DrawFullRect( S640K1_TP[8+m][0],   S640K1_TP[8+m][1],   S640K1_TP[8+m][2],   S640K1_TP[8+m][3],  Red, 0);
              break;
            }
          }
          break;
        }
      }
      
      break;
      }
    case 0x35://制
      {
      LCD_DrawFullRect( 520,   350,   650,   385,  Black, 1);
      for(k=0;k<21;k++)
      {
        LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
      }
      S640K1_measure_levels(18);
      LCD_DrawFullRect( S640K1_TP[18][0],   S640K1_TP[18][1],   S640K1_TP[18][2],   S640K1_TP[18][3],  Red, 0);
      rt_thread_delay(5);
      ADC_V_Restart();
      ADC_V_DMA_Config();
      while(!DMA_GetFlagStatus(ADC_V_DMA_Flag));
      p=Get_ADC_V_Value();*p=6*(*p);
      for(n=0;n<18;n++)
      {
        if(((*p)> sk640_jiwei_v[n])&&((*p)<= sk640_jiwei_v[n+1]))
        {

          for(m=0;m<7;m++)
          {
            if(n==sk640_jiwei_z[m])
            {
              
                S640K1_measure_levels(m);
                for(k=0;k<7;k++)
                {
                  LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
                }
                LCD_DrawFullRect( S640K1_TP[m][0],   S640K1_TP[m][1],   S640K1_TP[m][2],   S640K1_TP[m][3],  Red, 0);
                break;
            }            
          }
          break;
        }
      }
      break;
      }
    default:
      {
      for(k=0;k<21;k++)
      {
        LCD_DrawFullRect( S640K1_TP[k][0],   S640K1_TP[k][1],   S640K1_TP[k][2],   S640K1_TP[k][3],  Blue2, 0);
      }
      LCD_str(521,352,"级位错误",32,Red,Black);
      S640K1_measure_levels(15);
      S640K1_measure_levels(17);
      S640K1_measure_levels(18);
      break;
      }
    }
  }
}
Example #8
0
void S640K1_measure_levels(unsigned char n)
{
  unsigned char i=0;
  rt_int16_t  *p,temp=2000;
  if((n==17)||(n==18))
  {
    n-=1;
  }
  while(1)
  {
    
        Set_Scan_Channel(S640K1_levels[n].contacts[i].channel);
        rt_thread_delay(5);
        ADC_R_Restart();
        ADC_R_DMA_Config();
        while(!DMA_GetFlagStatus(ADC_R_DMA_Flag));
        p=Get_ADC_R_Value();
        if((*p)>1000)
        {
          temp=*p;
          S640K1_levels[n].contacts[i].R[0]=' ';
          S640K1_levels[n].contacts[i].R[1]='_';
          S640K1_levels[n].contacts[i].R[2]='/';
          S640K1_levels[n].contacts[i].R[3]='_';
        }
        else if((*p)<=1000)
        {
          temp=(u16)((*p)*(S640K1_levels[n].contacts[i].div));
          S640K1_levels[n].contacts[i].R[0]=temp/1000+'0';
          S640K1_levels[n].contacts[i].R[1]=(temp%1000)/100+'0';
          S640K1_levels[n].contacts[i].R[2]=(temp%100)/10+'0';
          S640K1_levels[n].contacts[i].R[3]=temp%10+'0';
        }
        S640K1_levels[n].contacts[i].R[4]='\0';
        
        if(temp<R_ref)
        {
          LCD_DrawFullCircle(S640K1_levels[n].contacts[i].point_coordinate[0],S640K1_levels[n].contacts[i].point_coordinate[1],5,Green,0x01);
        }
        else
        {
          LCD_DrawFullCircle(S640K1_levels[n].contacts[i].point_coordinate[0],S640K1_levels[n].contacts[i].point_coordinate[1],5,Red,0x01);
        }
        LCD_str(S640K1_levels[n].contacts[i].value_coordinate[0], S640K1_levels[n].contacts[i].value_coordinate[1],S640K1_levels[n].contacts[i].R,32,Blue2, Black);
      
      if(S640K1_levels[n].contacts[i].flag_last==1)
      {
        ADC_V_Restart();
        ADC_V_DMA_Config();
        while(!DMA_GetFlagStatus(ADC_V_DMA_Flag));
        p=Get_ADC_V_Value();*p=6*(*p);
        
        S640K1_levels[n].level_V[0]=*p/10000+'0';
        if(S640K1_levels[n].level_V[0]=='0')
        {
          S640K1_levels[n].level_V[0]=' ';
        }
        S640K1_levels[n].level_V[1]=(*p%10000)/1000+'0';
        S640K1_levels[n].level_V[2]='.';
        S640K1_levels[n].level_V[3]=(*p%1000)/100+'0';
        S640K1_levels[n].level_V[4]=(*p%100)/10+'0';
        S640K1_levels[n].level_V[5]='V';
        S640K1_levels[n].level_V[6]='\0';
        
        
        LCD_str(671,304,S640K1_levels[n].level_V,32,Blue,Black);
        
        break;
      }
      i++;
  }
}
Example #9
0
void draw_s640k1(void)
{
  LCD_Clear(Black);
  LCD_str(267,0,"测试型号:S640K1",32,Blue,Black);
  
  
//  LCD_str(0,32,"换向手柄",32,Blue,Black);
  LCD_str(128,224,"后零前制",32,Blue,Black);
  LCD_str(0,256,"402(403)",32,Blue,Black);
  LCD_str(0,288,"404(405)",32,Blue,Black);
  LCD_str(0,320,"405(404)",32,Blue,Black);
  LCD_str(0,352,"407(407)",32,Blue,Black);
  LCD_str(0,384,"406(406)",32,Blue,Black);
  LCD_str(0,416,"409(410)",32,Blue,Black);
  LCD_str(0,447,"410(409)",32,Blue,Black); 
  
//  LCD_str(256,64,"401(401)",32,Blue,Black);
//  LCD_str(256,96,"401(401)",32,Blue,Black);
//  LCD_str(256,128,"401(401)",32,Blue,Black);
  LCD_str(256,352,"401(401)",32,Blue,Black); 
//  LCD_str(256,192,"401(401)",32,Blue,Black);
//  LCD_str(256,224,"401(401)",32,Blue,Black);
//  LCD_str(256,256,"401(401)",32,Blue,Black); 
  
  u8 n=0;
  for(n=0;n<7;n++)
  {
    LCD_DrawUniLine( 128,  (272+32*n),  256,  (272+32*n),  Cyan);
  }
  for(n=0;n<4;n++)
  {
    LCD_DrawUniLine( (144+32*n),  256,  (144+32*n),  479,  Cyan);
  }
  LCD_DrawUniLine( 256, 272,  256,  464,  Green);
  
  
//  LCD_str(384,64,"控制手柄",32,Blue,Black);
  LCD_str(176,32,"制动",32,Blue,Black);
  LCD_str(352,32,"零",32,Blue,Black);
  LCD_str(492,32,"牵引",32,Blue,Black);
  LCD_str(136,64,"1",32,Blue,Black);
  LCD_str(168,64,"3",32,Blue,Black);
  LCD_str(200,64,"6",32,Blue,Black);
  LCD_str(232,64,"9",32,Blue,Black);
  LCD_str(256,64,"12",32,Blue,Black);
  LCD_str(288,64,"15",32,Blue,Black);
  LCD_str(320,64,"17",32,Blue,Black);
  LCD_str(360,64,"0",32,Blue,Black);
  LCD_str(392,64,"*",32,Blue,Black);
  LCD_str(424,64,"3",32,Blue,Black);
  LCD_str(456,64,"6",32,Blue,Black);
  LCD_str(488,64,"9",32,Blue,Black);
  LCD_str(512,64,"12",32,Blue,Black);
  LCD_str(544,64,"15",32,Blue,Black);
  LCD_str(576,64,"17",32,Blue,Black);
  
  
  LCD_str(0,96,"422(415)",32,Blue,Black);
  LCD_str(0,160,"402(403)",32,Blue,Black);
  
  LCD_str(608,96,"414(416)",32,Blue,Black);
  LCD_str(608,144,"412(412)",32,Blue,Black); 
  LCD_str(608,192,"413(413)",32,Blue,Black);
  
  for(n=0;n<4;n++)
  {
    LCD_DrawUniLine( 128,  (112+32*n),  608,  (112+32*n),  Cyan);
  }
  for(n=0;n<15;n++)
  {
    LCD_DrawUniLine( (144+32*n),  96,  (144+32*n),  224,  Cyan);
  }
  LCD_DrawUniLine( 608, 144,  608,  176,  Green);
  LCD_DrawUniLine( 128, 144,  128,  272,  Green);
  
  for(n=0;n<43;n++)
  {
    LCD_DrawFullCircle( S640K1_POINTS[n][0],  S640K1_POINTS[n][1],  5,  Blue2,  1);
  }
  for(n=0;n<21;n++)
  {
    LCD_DrawFullRect( S640K1_TP[n][0],   S640K1_TP[n][1],   S640K1_TP[n][2],   S640K1_TP[n][3],  Blue2, 0);
  }
  //LCD_str(671,352,"保存结果",32,Blue2,Black);
  LCD_str(671,352,"自动模式",32,Blue2,Black);
  LCD_str(671,432,"退出实验",32,Red,Black);
  LCD_str(671,256,"级位电压",32,Blue,Black);
  
}
void SetClock(char key)
{  
   // timer to avoid multiple key-presses:
   if (wait_timer > 0)
   {
      wait_timer--;
   }

   // enter/exit setup:
   if (key == '*' && wait_timer == 0)
   {
      setup = !setup;
      wait_timer = wait_interval;
      i = 0;
      num_str[0] = '\0';

   }

   switch (setup)
   {
      case true:
      clock_master = false;// clock stopped

      // fill string with zeros:
      if (strlen(num_str) == 0)
      {
         strcpy(num_str, "000000");
      }

      if (key != 0 && key != '*' && wait_timer == 0) // check for valid input
      {
         wait_timer = wait_interval; // reset timer
         num_str[i] = key; // save key input to string
         i++;
      }

      number = atol(num_str); // convert string to long
         
         // split into separate numbers:
         h = (number / 10000);
         m = ((number % 10000)/100);
         s = (number % 100);

      clockUpdate(h, m, s); // update 

      if (i > 0)
      {
         LCD_goto(1,1); 
         sprintf(save, "%02d:%02d:%02d", h, m, s);
         LCD_str(save);
      }

      else
      { 
         LCD_goto(1,1);
         LCD_str("--:--:--");
      }

      // check if hour, minutes and seconds have been entered:
      if (i == 6)
      {   
         // check if numbers are out of bounds:
         if (h > 23)
         {
            h = 0;
            m = 0;
            s = 0;
            clockUpdate(h, m, s);                 
         }

         if (m > 59)
         {
            h = 0;
            m = 0;
            s = 0;
            clockUpdate(h, m, s);
         }

         if (s > 59)
         {
            h = 0;
            m = 0;
            s = 0;
            clockUpdate(h, m, s);        
         }
         
         setup = false; //exit setup
      } 
      break;
         
      case false: // clock running      
      clock_master = true;
      break;
   }
}