RuiViana

Bit_NBit_CEI_Rial

Jul 27th, 2016
111
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. unsigned int Display = 0xFFFF;
  2. unsigned int Temp = 0;                    // Temp para usar serial monitor com entrada dos dados
  3. byte Flag;                                // Flag para usar serial monitor com entrada dos dados
  4. byte bitSt[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};   // Matriz para guardar os tempos
  5. byte HC595 = 2;                           // Quantidade de HC595
  6. #define Clock 2                           // Port para o clock do HC585
  7. //-------------------------
  8. void setup()
  9. {
  10.   Serial.begin(9600);                     // Inicialisa serial
  11.   pinMode(Clock, OUTPUT);                 // Port saída para o HC595 Pino 11
  12. }
  13. //------------------------
  14. void loop()
  15. {
  16. //  Teste_C_Serial();                       // Testa com serial entre com 2 digitos
  17. //  Display;                              // Testa sem incremento
  18.   Display++;                             // Testa com incremento
  19.  
  20.   for (int i = 0; i < (HC595 * 8); i++)   // Ecexuta para a quantidade de portas dos HC595
  21.   {                                       // Separa os bites dos dados
  22.     if (bitRead(Display, i) == 1)         // Se for bit
  23.       bitSt[i] = 20;                      // Define 20 uSeg
  24.     else                                  // Se for não bit
  25.       bitSt[i] = 1;                       // Define 1 uSeg
  26.   }
  27.   cli();                                  // Desativa interrupts
  28.   Byte();                                 // Chama a rotina que envia os bits
  29.   Latch();                                // Chama rotina que transfere dos shiftregs para os Latchs
  30.   sei();                                  // Ativa interrupts
  31. }
  32. //---------------------------
  33. void Latch()
  34. {
  35.  
  36.   digitalWrite(Clock, LOW);               // Down port
  37.   delayMicroseconds(150);                 // Tempo de transferencia dos shiftregs para os latchs
  38.   digitalWrite(Clock, HIGH);              // Upper port
  39.   delayMicroseconds(50);                  // Tempo entre os bits (Tempo de recarga do capacitor)
  40. }
  41. //---------------------------
  42. void Byte()
  43. {
  44.   for (int i = 0; i < (HC595 * 8); i++)   // Ecexuta para a quantidade de portas dos HC595
  45.   {
  46.     digitalWrite(Clock, LOW);             // Lower port
  47.     delayMicroseconds(bitSt[i]);          // bit on ou off
  48.     digitalWrite(Clock, HIGH);            // Upper port
  49.     delayMicroseconds(20);                // Tempo entre os bits (Tempo de recarga do capacitor)
  50.   }
  51. }
  52. //-------------------------------------------
  53. void Teste_C_Serial()
  54. {
  55.   if (Serial.available())                 // Se a serial tiver dados
  56.   {
  57.     Temp = 0;                             // Zera temporario
  58.   }
  59.   while (Serial.available())              // Enquanto tiver dados na serial          
  60.   {                              
  61.     Temp = Temp | Serial.read();          // Le a serial e or com Temp
  62.     delay(10);                            // Tempo de serial
  63.     if (Flag == 0)                        // Se ainda nao passou por aqui
  64.     {
  65.       Temp = Temp << 8 ;                  // Desloque
  66.       Flag = 1;                           // Informa que ja passou por aqui
  67.     }
  68.   }
  69.   Flag = 0;                               // Desliga passagem
  70.   Display = Temp;                         // Copia Temp para Digital
  71. }
  72. //---------------------------------------------
RAW Paste Data