20.04.2024, Суббота, 00:29
20.04.2024 в 00:29
Таймер на семисегментном индикаторе
Задействованы два правых разряда индикатора. Счёт секунд от 00 до 99, по кругу.

Схема в Протеусе такая:



Код в CodeVisionAVR такой:

Код

#include <io.h>
#include <delay.h>

static flash unsigned char digit[] =  
{
  (0b11000000), //0
  (0b11111001), //1
  (0b10100100), //2
  (0b10110000), //3
  (0b10011001), //4
  (0b10010010), //5
  (0b10000010), //6
  (0b11111000), //7
  (0b10000000), //8
  (0b10010000) //9  
};
   
static flash unsigned char razryad[] =  
{
  (1), //0
  (2), //1
  (4), //2
  (8), //3
};
   

void main(void)
{
  int i,j,k,m;
  PORTD=0x00;  
  DDRD=0b11111111;
  PORTC=0xFF;  
  DDRC=0b11111111;
   
while (1)
  {  
  for(i=0;i<10;i++)
  {
  for(k=0;k<10;k++)
  {
  m=k;
  for(j=0;j<50;j++)
  {
  PORTD=digit[i];  
  PORTC=razryad[2];
  delay_ms(10);  
  PORTD=digit[m];  
  PORTC=razryad[3];  
  delay_ms(10);
  }  
  }
  }
  }
}


"В реале" работает чётко, в Протеусе же с такой частотой обновления семисегментика реалтайм не получается
Просмотров: 3164. Комментариев: 0
dth="100%" cellspacing="0" cellpadding="0" class="commTable">
Имя *: Email:
Подписка:1 Код *: