Advertisement
HanNhuThien

xc8 - 16F887A - MPX2 CC - 74HC595

Mar 2nd, 2016
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.18 KB | None | 0 0
  1.  
  2. #include <xc.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define _XTAL_FREQ 1000000
  7.  
  8. #pragma config FOSC = XT // Oscillator Selection bits (HS oscillator)
  9. #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
  10. #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
  11. #pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
  12. #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  13. #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  14. #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  15. #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
  16.  
  17. unsigned int volume, value, f, ADCvalue, voltage;
  18. int i, x;
  19. int mask;
  20.  
  21. const unsigned char DIGIT[10] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
  22.  
  23. void ADCinit(void){
  24.     ADCS2= ADCS1= 0; ADCS0= 1; //Set Fosc/8
  25.     ADFM= 1; //right justified
  26.     CHS2= CHS1= CHS0= 0; // Choose AN0
  27.     PCFG3= PCFG2= PCFG1= 1; PCFG0= 0;    
  28. }
  29.        
  30. unsigned int atod(void){
  31.     ADON= 1; //A to D on
  32.     GO= 1;
  33.     __delay_ms(1);
  34.     while (GO);
  35.     return (int) ADRESH* 256 + ADRESL; // Dich 8 bit
  36. }
  37.  
  38.  shift_out(){
  39.      int numero;
  40.     value= DIGIT[numero];
  41.     mask= 1;
  42.     RC3= 0; //Set ST_CP= 0 , open latch
  43.     RC0= 0; // Set SH_CP=0 , enable to write to shift register
  44.    
  45.     for(i=0; i< 7; i++){
  46.         if (value & mask)
  47.          RC1= 1; //DS= 1;
  48.       else  
  49.          RC1=0; //DS= 0;
  50.    
  51.     RC0= 1;
  52.     __delay_us(5);
  53.     RC0= 0; // Next bit
  54.     __delay_us (5);
  55.    
  56.     mask = mask << 1;
  57.     }
  58.     RC3= 1; // Shift out to Qn gate
  59.     __delay_us(125);
  60.  
  61. }
  62.  
  63. void main (){
  64.     TRISA= 0xff;
  65.     TRISC= 0x00;
  66.     ADCinit ();
  67.     unsigned int ones,tens=0;
  68. while(1)
  69. {
  70. __delay_ms(1);  
  71. ADCvalue = atod();
  72. voltage = ADCvalue *5000 /1023;
  73. f = voltage / 10 - 273;
  74. ones= f%10;
  75. tens= (f/10)%10;
  76.  
  77. shift_out();
  78. PORTC = DIGIT[tens];
  79. __delay_us(50);
  80. PORTC = DIGIT [ones];
  81. __delay_us(50);
  82. }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement