Advertisement
Electgpl

PIC - Control de MAX7219

Apr 16th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.06 KB | None | 0 0
  1. #include <16F883.h>
  2. #use delay(clock=4000000)
  3. //Pines a utilizar
  4. #define CLK  PIN_B6
  5. #define LOAD PIN_B5
  6. #define DATA PIN_B4
  7. //Variables del MAX7219 segun Datasheet
  8. #define decodifica 0x09
  9. #define brillo 0x0A
  10. #define cantDigitos 0x0B
  11. #define bajoConsumo 0x0C
  12. //Variable de formateo de salida
  13. long datoSerial=0;
  14. //Funcion de Clock
  15. void clock7219(){
  16.    output_low(CLK);
  17.    delay_ms(1);
  18.    output_high(CLK);
  19. }
  20. //Funcion para cargar el valor
  21. void load7219(){
  22.    output_low(LOAD);
  23.    delay_ms(1);
  24.    output_high(LOAD);
  25. }
  26. //Funcion para enviar el dato de 16bit
  27. void envia7219(long dato){
  28.    int cont;
  29.    for(cont=0;cont<16;++cont){
  30.       output_bit(DATA,shift_left(&dato,2,0));
  31.       clock7219();
  32.    }
  33.    load7219();
  34. }
  35. //Funcion para construir el dato a enviar
  36. void creaDato(byte modo, int datoEntrante){
  37.    datoSerial=0x00;
  38.    datoSerial<<=4;
  39.    datoSerial|=modo;
  40.    datoSerial<<=8;
  41.    datoSerial|=datoEntrante;
  42.    envia7219(datoSerial);
  43. }
  44. //Funcion para escibir, Digito y Valor (1xxx xxxx DP)
  45. void escribe7219(byte digito, int dato){
  46.    creaDato(digito, dato);
  47. }
  48. //Modo bajo consumo 1=WakeUp, 0=Sleep
  49. void bajoConsumo7219(int modoOperacion){
  50.    creaDato(bajoConsumo,modoOperacion);
  51. }
  52. //Modo de codificacion Binario(15) o Decada
  53. void decodifica7219(int modoDecodifica){
  54.    creaDato(decodifica, modoDecodifica);
  55. }
  56. //Configuracion del nivel de brillo 1 a 15
  57. void brillo7219(int nivelBrillo){
  58.    creaDato(brillo, nivelBrillo);
  59. }
  60. //Configuracion de la cantidad de digitos 1 a 8
  61. void cantDigitos7219(int totalDigitos){
  62.    creaDato(cantDigitos, totalDigitos);
  63. }
  64. void inicia7219(){
  65.    creaDato(bajoConsumo,1);
  66.    //Deco 7seg, 255 para 8dig, 15 para 4dig
  67.    creaDato(decodifica,255);
  68.    //Cant 7seg, 0 al 7
  69.    creaDato(cantDigitos,7);
  70.    //Brillo minimo 0 y maximo 15
  71.    creaDato(brillo,15);
  72. }
  73. void main(){
  74.    inicia7219();
  75.    while(true){
  76.       escribe7219(1,0);
  77.       escribe7219(2,0);
  78.       escribe7219(3,0);
  79.       escribe7219(4,1);
  80.       escribe7219(5,2);
  81.       escribe7219(6,1);
  82.       escribe7219(7,7);
  83.       escribe7219(8,0);
  84.    }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement