示例#1
0
文件: indicator.c 项目: 4glk/low_temp
void IND_OutputFormat(uint16_t value, uint8_t comma, uint8_t position, uint8_t amount)
{
  uint8_t tmp;
  uint8_t i;

  if ((position <= IND_AMOUNT_NUM)&&(position != 0)){
     for(i = 0; i < amount; i++){
        tmp = value % 10;
        if ((i == 0)||(value > 0)||(position <= comma)){
           ind_buf[position-1] = read_byte_flash(number[tmp]);
        }
        else{
           ind_buf[position-1] = read_byte_flash(number[IND_EMPTY_NUM]);
        }
        value = value/10;
        position++;
        if (position > IND_AMOUNT_NUM){
           break;
        }
     }
  }

  if ((comma <= IND_AMOUNT_NUM) && (comma != 0)) {
    ind_buf[comma-1] |= 1<<IND_COM;
  }
}
void IND_OutSym(char *str, uint8_t pos)
{
  uint8_t i, j;
  char s;
  
  /*проверяем корректность заданной позиции*/
  if ((pos > IND_AMOUNT_NUM) || (!pos)){
     return;  
  }
  
  /*проходка по строке, пока она или индикатор не кончится*/
  for (j = pos-1; j < IND_AMOUNT_NUM; j++){
    
     s = *str++;
     if (!s){
        break;   
     }
     
     /*поиск символа по таблице*/
     for (i = 0; read_byte_flash(sym[i]) != 0; i += 2){ 
       if (s == read_byte_flash(sym[i])){
          ind_buf[j] = read_byte_flash(sym[i+1]);  
       }
     }
  }
}
示例#3
0
文件: indicator.c 项目: 4glk/low_temp
void IND_Time(uint16_t CurrentTime,uint8_t position){
        uint8_t blk_dot;
    !(CurrentTime%2)?(blk_dot=1):(blk_dot=0);   // мигает по четности ...
	ind_buf[3+position-1] = read_byte_flash(number[CurrentTime % 6000/600]); // здесь раскладываем число на разряды
	ind_buf[2+position-1] = read_byte_flash(number[CurrentTime % 600 /60 ])|(blk_dot<<IND_COM);//(!(CurrentTime%2)?(1<<IND_COM):tralala()); // +точка
	ind_buf[1+position-1] = read_byte_flash(number[CurrentTime % 60 /10]);					// выделяем десятки секунд 5 максимальное значение
	ind_buf[0+position-1] = read_byte_flash(number[CurrentTime % 10]);

}
示例#4
0
文件: indicator.c 项目: 4glk/low_temp
void IND_Init(void)
{
  uint8_t i;
#ifndef IND_SPI_CONNECTION
  IND_PORT_SEG = (1<<IND_A)|(1<<IND_B)|(1<<IND_C)|(1<<IND_D)|(1<<IND_E)|(1<<IND_F)|(1<<IND_G)|(1<<IND_COM);
  IND_DDR_SEG = (1<<IND_A)|(1<<IND_B)|(1<<IND_C)|(1<<IND_D)|(1<<IND_E)|(1<<IND_F)|(1<<IND_G)|(1<<IND_COM);

  for(i = 0; i < IND_AMOUNT_NUM; i++){
     IND_PORT_DIG |= (1<<read_byte_flash(digit[i]));
     IND_DDR_DIG |= (1<<read_byte_flash(digit[i]));
  }
#else
    SPI_Init();
#endif

  for(i = 0; i < IND_AMOUNT_NUM; i++) {
     ind_buf[i] = 0;
  }
}
示例#5
0
文件: indicator.c 项目: 4glk/low_temp
void IND_Output(uint16_t value, uint8_t comma)
{
  uint8_t tmp;
  uint8_t i;


  for(i = 0; i < IND_AMOUNT_NUM; i++){
    tmp = value % 10;
    if ((i == 0)||(value > 0)||(i <= comma)){
       ind_buf[i] = read_byte_flash(number[tmp]);
    }
    else{
       ind_buf[i] = read_byte_flash(number[IND_EMPTY_NUM]);
    }
    value = value/10;
  }

  if ((comma <= IND_AMOUNT_NUM) && (comma != 0)) {
    ind_buf[comma-1] |= 1<<IND_COM;
  }
}
示例#6
0
文件: indicator.c 项目: 4glk/low_temp
void IND_OutputFormatChar(char char_string[], uint8_t comma, uint8_t position)
// TODO: реализовать бегущую строку с использованием количества элементов, а также мигание символов
{
    uint8_t i,j,amount;
    char tmp[strlen(char_string)];
    amount=strlen(char_string);
    for (i=0,j=strlen(char_string);i<strlen(char_string);i++,j--){ //зеркалирование строки
            tmp[j-1]=char_string[i];
    }

    for (j=0;j<amount;j++){
        for (i=11;i<=((int)tmp[j]);++i){    //добавлено стартовое значение , перескакиваем цифры
            if (read_byte_flash(number[i][1])==(int)tmp[j]) break; // вся трабла была с чтением с пзу
        }
      ind_buf[j+position-1] = read_byte_flash(number[i][0]); //это конечно не оптимально искать в пзу
                                                    // но не забивать же туда всю таблицу
    }
  if ((comma <= IND_AMOUNT_NUM) && (comma != 0)) {
    ind_buf[comma-1] |= 1<<IND_COM;
  }
}
示例#7
0
文件: indicator.c 项目: 4glk/low_temp
void IND_Update(void)
{
  static uint8_t count = 0;
  uint8_t i;

#ifdef IND_SPI_CONNECTION
  /*________________ подключение по SPI____________________________*/

 #ifdef IND_SHIFT_REG_DIG2
  uint16_t tmp;
 #else
  uint8_t tmp;
 #endif

  /*гасим индикатор*/
  IND_LightOutSeg(spi_buf[IND_SHIFT_REG_SEG],IND_LIGHT_OUT);

  tmp = 0;
  for (i = 0; i < IND_AMOUNT_NUM; i++){
     tmp |= (1<<read_byte_flash(digit[i]));
  }
  IND_LightOutDig(spi_buf[IND_SHIFT_REG_DIG1],((uint8_t)tmp));

 #ifdef IND_SHIFT_REG_DIG2
  IND_LightOutDig(spi_buf[IND_SHIFT_REG_DIG2],(tmp>>8));
 #endif

  SPI_WriteArray(IND_AMOUNT_REG, spi_buf);

 #ifdef IND_SCAN_SEGMENT
 /*___________реализация посегментной развертки___________*/

  tmp = 0;
  for (i = 0; i < IND_AMOUNT_NUM; i++){
    if (ind_buf[i]&read_byte_flash(mask[count])) {
       tmp |= (1<<read_byte_flash(digit[i]));
    }
  }
  IND_OutDig(spi_buf[IND_SHIFT_REG_DIG1], ((uint8_t)tmp));

 #ifdef IND_SHIFT_REG_DIG2
  IND_OutDig(spi_buf[IND_SHIFT_REG_DIG2],(tmp>>8));
 #endif

  IND_OutSeg(spi_buf[IND_SHIFT_REG_SEG], read_byte_flash(mask[count]));

  count++;
  count &= 0x07;

 #else
  /*___________реализация поразрядной развертки___________*/

  tmp = 1<<read_byte_flash(digit[count]);
  IND_OutDig(spi_buf[IND_SHIFT_REG_DIG1], ((uint8_t)tmp));

 #ifdef IND_SHIFT_REG_DIG2
  IND_OutDig(spi_buf[IND_SHIFT_REG_DIG2],(tmp>>8));
 #endif

  IND_OutSeg(spi_buf[IND_SHIFT_REG_SEG], ind_buf[count]);

  count++;
  if (count >= IND_AMOUNT_NUM){
     count = 0;
  }
 #endif

  /*вывод на индикатор*/
  SPI_WriteArray(IND_AMOUNT_REG, spi_buf);

#else
 /*____________________обычное подключение____________________________*/

 uint8_t tmp;

 /*гасим все индикаторы*/
 IND_LightOutSeg(IND_PORT_SEG, IND_LIGHT_OUT);

 tmp = 0;
 for (i = 0; i < IND_AMOUNT_NUM; i++){
    tmp |= (1<<read_byte_flash(digit[i]));
 }
 IND_LightOutDig(IND_PORT_DIG, tmp);

 #ifdef IND_SCAN_SEGMENT
 /*____________реализация посегментной развертки___________*/

  tmp = 0;

  for (i = 0; i < IND_AMOUNT_NUM; i++){
    if (ind_buf[i]&read_byte_flash(mask[count])) {
       tmp |= (1<<read_byte_flash(digit[i]));
    }
  }

  IND_OutDig(IND_PORT_DIG, tmp);
  IND_OutSeg(IND_PORT_SEG, read_byte_flash(mask[count]));

  count++;
  count &= 0x07;

 #else
 /*____________реализаци поразрядной развертки____________*/

  IND_OutDig(IND_PORT_DIG, (1<<read_byte_flash(digit[count])));
  IND_OutSeg(IND_PORT_SEG, ind_buf[count]);

  count++;
  if (count >= IND_AMOUNT_NUM){
     count = 0;
  }
 #endif
#endif
    AddTask(IND_Update,1);
}