Alx09

Tema sbmm

Apr 4th, 2021
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.95 KB | None | 0 0
  1. #include <LiquidCrystal.h>
  2. #include<math.h>
  3. const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
  4. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  5.  
  6. int  nrGrade;
  7.  
  8. void setup(){
  9.   DDRC &= ~0x30;
  10.   DDRD |= 0xFF;
  11.   lcd.begin(16, 2);
  12.   PORTD = 0x00;
  13.   adc_init();
  14.  
  15. }
  16. void Switch(int b){
  17.    switch(b){
  18.     case 0: PORTD = 0x7E; break;
  19.     case 1: PORTD = 0x30; break;
  20.     case 2: PORTD = 0x6D; break;
  21.     case 3: PORTD = 0x79; break;
  22.     case 4: PORTD = 0x33; break;
  23.     case 5: PORTD = 0x5B; break;
  24.     case 6: PORTD = 0x5F; break;
  25.     case 7: PORTD = 0x70; break;
  26.     case 8: PORTD = 0x7F; break;
  27.     case 9: PORTD = 0x73; break;
  28.   }
  29.  delay(1000);
  30. }
  31.  
  32. void AfisGrade(){
  33.   PORTD = 0x63;
  34.   delay(1000);
  35.   PORTD = 0x4E;
  36.   delay(1000);
  37.  
  38. }
  39.  
  40. void loop(){
  41.  
  42.   nrGrade =(int) (((unsigned long int)read_adc(5) * 5000 / 1023) - 500) / 10;
  43.   lcd.clear();
  44.   lcd.print(nrGrade);
  45.    delay(1000);
  46.   if(nrGrade < 0){
  47.       PORTD = 0x01;
  48.       delay(1000);
  49.       nrGrade = - nrGrade;
  50.      
  51.     }
  52.    
  53.     if(nrGrade < 10) Switch(nrGrade);
  54.     else if (nrGrade < 100){
  55.      Switch(nrGrade / 10);
  56.      Switch(nrGrade % 10);
  57.     }
  58.     else {
  59.      Switch(nrGrade / 100);
  60.      Switch(nrGrade / 10 % 10);
  61.      Switch(nrGrade % 10);
  62.     }
  63.    
  64.     AfisGrade();
  65.     delay(1000);
  66.     lcd.clear();
  67.     lcd.setCursor(0,0);
  68.    
  69.  
  70.    
  71. }
  72.  
  73. void adc_init()//adc initialization
  74. {
  75. ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));//set division factor between system clock frequency and the input clock to the ADC- 128
  76. ADMUX |= (1 << REFS0);//AVcc with external capacitor at Aref pin
  77. ADCSRA |= (1 << ADEN);//enable ADC
  78. ADCSRA |= (1 << ADSC);//ADC start conversion
  79. }
  80. uint16_t read_adc(uint8_t channel)
  81. {
  82. ADMUX &= 0xF0;//set input AO to A5
  83. ADMUX |= channel;//select chanel AO to A5
  84. ADCSRA |= (1 << ADSC);//start conversion
  85. while(ADCSRA & (1 << ADSC));//wait wile adc conversion are not updated
  86. return ADCW;//read and return voltage
  87. }
Advertisement
Add Comment
Please, Sign In to add comment