marichan022

L09

Jan 27th, 2020
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. #define F_CPU 7372800UL
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5. #include <avr/interrupt.h>
  6. #include "lcd.h"
  7.  
  8. uint8_t s = 0, m = 0, h = 0;
  9. uint8_t modalitet = 0;
  10. uint8_t chooseEditor = 0, edit[4] = {"", "Hours", "Minutes", "Seconds"};
  11.  
  12. void writeMessage() {
  13.     lcd_clrscr();
  14.     lcd_puts("Hello World!");
  15. }
  16.  
  17. void writeClock() {
  18.     lcd_clrscr();
  19.     lcd_gotoxy(4,0);
  20.     char time[9];
  21.     time[7] = '0' + s % 10;
  22.     time[6] = '0' + s / 10;
  23.     time[5] = ':';
  24.     time[4] = '0' + m % 10;
  25.     time[3] = '0' + m / 10;
  26.     time[2] = ':';
  27.     time[1] = '0' + h % 10;
  28.     time[0] = '0' + h / 10;
  29.     time[8] = '\0';
  30.     lcd_puts(time);
  31. }
  32.  
  33. void writeMod() {
  34.     lcd_gotoxy(0,1);
  35.     char mod[3] = {'M', '0' + modalitet, '\0'};
  36.     lcd_puts(mod);
  37.     if (modalitet == 1) {
  38.         lcd_gotoxy(8,1);
  39.         lcd_puts(edit[chooseEditor]);
  40.     } else if (modalitet == 2) {
  41.         lcd_gotoxy(11,1);
  42.        
  43.     }
  44. }
  45.  
  46. void writeLCD() {
  47.     if(modalitet == 0) {
  48.         writeMessage();
  49.     } else {
  50.         writeClock();
  51.     }
  52.     writeMod();
  53. }
  54.  
  55. ISR(TIMER0_COMP_vect) {
  56.     s++;
  57.     if(s == 60) {
  58.         s = 0;
  59.         m++;
  60.         if(m == 60) {
  61.             m = 0;
  62.             h++;
  63.             if(h == 24) {
  64.                 h = 0;
  65.             }
  66.         }
  67.     }
  68.     writeLCD();
  69. }
  70.  
  71. void debounce() {
  72.  
  73. }
  74.  
  75. ISR(INT0_vect) {
  76.     modalitet = (modalitet + 1) % 3;
  77.     debounce();
  78. }
  79.  
  80. int main(void) {
  81.     DDRD = _BV(4);
  82.    
  83.     DDRA = 0xff;
  84.     DDRB = 0xf0;
  85.     PORTB = _BV(0) | _BV(1) | _BV(2);
  86.    
  87.     MCUCR = _BV(ISC01);
  88.     GICR = _BV(INT0);
  89.    
  90.     TCCR0 = _BV(WGM01) | _BV(CS02) | _BV(CS00);
  91.     OCR0 = 71;
  92.     /*
  93.         100 = 7372800 / N(1+x)
  94.         x = (73727 - N) / N
  95.         N = 1024
  96.         x = 71
  97.     */ 
  98.    
  99.     TCCR1A = _BV(COM1B0) | _BV(COM1B1) | _BV(WGM10);
  100.     TCCR1B = _BV(WGM12) | _BV(CS10);
  101.     OCR1B = 128;
  102.     TIMSK = _BV(OCIE0);
  103.     sei();
  104.  
  105.     uint8_t deb = 0;
  106.     lcd_init(LCD_DISP_ON);
  107.     writeLCD();
  108.  
  109.     while(1) {
  110.         if(!deb)
  111.             deb--;
  112.        
  113.         if (bit_is_cleared(PINB,0)) {
  114.             deb = 200;
  115.         } else if (bit_is_cleared(PINB,1)) {
  116.         }
  117.     }
  118. }
Add Comment
Please, Sign In to add comment