CAFE

한국직업능력교육원

[Arduino 실습 11] User Font + Time 시계

작성자송명규|작성시간26.06.09|조회수21 목록 댓글 0

 

// Sys Lib

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

// Arduino API

#include <MsTimer2.h>

#include <TimerOne.h>

 

// My Lib

#include <value.h>

#include <My_Arduino_GPIO_Lib_V1_8.h>

//#include <My_Arduino_FND_Lib_V2_7.h>

 

// PRJ Lib

#define GPIO_IF  1

#define Digit_4  2

//#define Fnd_Dis  3

#define Fnd_Led_Dis 4

//#define En_Font_Dis 5

#include "fnd_dis.h"

 

#include <My_LCD_User_Font_Lib_V1_4.h>

#define I2C_IF    1

#include <My_Arduino_LiqCry_LCD_Lib_V1_5.h>



#define Arduino_Mode   1

#define HW_Uart_mode   2

#define Arduino_i2c_Char_LCD 3

extern int out_dev_set_mode;

#include <My_MCU_Printf_Lib_V2_6.h>

 

char x_cnt = 0;

 

byte love[8] = {

  0b00000,

  0b01010,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b01110,

  0b00100

};



void tm1_irq()

{

  //1ms

  // 1ms

  fnd_led_dis(ct -> min * 100 + ct -> sec, ct -> sec);

 }

 

void tm2_irq()

{

  // 1sec

  ct -> sec++;

  if(ct -> sec > 59) // 1min chk

  {

    ct -> sec =0;

    ct -> min++;

    if(ct -> min > 59) // 1 hour

     {

       ct -> min = 0;

       //hour++

     }

  }

 

  fg -> t2_flag = 1;

 

  // 실습1

 

  // ct ->t_loop++;

  // if(ct -> t_loop > 500)

  // {

   // 500ms

  //  ct -> t_loop = 0;

  //  ct-> cnt16 = ((*ct).cnt16 > 2000) ? 1234 : cnt.cnt16 + 1;

  //  fg -> t2_flag = 1;

  //}

}



void setup() {

  // put your setup code here, to run once:

  for(int i = 0; i<= 7;)

  { // LED + FND DIR Set  

    pinMode(LED_pin[i], OUTPUT);

    Led_Byte_Out(0xff); // init

    i++;

  }

 

  pinMode(x1000, OUTPUT);  

  pinMode(x100, OUTPUT);

  pinMode(x10, OUTPUT);

  pinMode(x1, OUTPUT);

  #if Fnd_Led_Dis

    pinMode(led_scan_pin, OUTPUT);

  #endif  

 

  Serial.begin(115200);

  out_dev_set_mode = HW_Uart_IF_Mode;

 

  lcd_init();

 // i2c_scan_id();

  //Lcd_Test();

  gotoxy(2, 0);

  lcd_str("song ");

  lcd_send('K');

 

  print_xy_str(5, 1, "LCD_Test ");

  print_xy_char(14, 1, 'Q');

  print_xy_send(13, 0, 'Y');

  delay(1000);

  LCD_All_CLr;

  LCD_Home;

 

  gotoxy(2,0);

  lcd_str("Up Cnt: ");

  print_xy_str(2, 1, "Dn Cnt: ");

 

  // Timer2 Interrupt

  MsTimer2::set(1000, tm2_irq); //1sec

  MsTimer2::start();

 

 

  // Timer1 Interrupt = IRQ

  Timer1.initialize(1000); // 1ms ==fnd display

  Timer1.attachInterrupt(tm1_irq);

 

  LCD_All_CLr;

  LCD_Home;

 

  // user Font Write  

  lcd.createChar(0, time_1);

  lcd.createChar(1, time_2);

  lcd.createChar(2, time_3);

  lcd.createChar(3, time_4);

 

  lcd.createChar(4, time_5);

  lcd.createChar(5, time_6);

  lcd.createChar(6, time_7);

  lcd.createChar(7, time_8);

 

 

 

  // lcd.write(0);

  // lcd.write(1);

  // lcd.write(2);

  // lcd.write(3);

  // lcd.write(4);

  // lcd.write(5);

  // lcd.write(6);

  // lcd.write(7);

}

 

void loop() {  

  // 실습 3

 

  // for(int i =0; i<=7; i++)

  // {

  //   gotoxy(5,0);

  //   lcd.write(i);

  //   _delay_ms(10);

  // }

 

  if(fg -> t2_flag == 1)

  {

    fg -> t2_flag = 0;

     

    Flag_sts.Dp_Flag++;

    if(Flag_sts.Dp_Flag > 4) Flag_sts.Dp_Flag = 1;

   (Flag_sts.Dp_Flag == 1) ? Flag_sts.Dp_X1_Flag = 0,  Flag_sts.Dp_X1000_Flag = 1 :

   (Flag_sts.Dp_Flag == 2) ? Flag_sts.Dp_X1000_Flag = 0, Flag_sts.Dp_X100_Flag = 1 :

   (Flag_sts.Dp_Flag == 3) ? Flag_sts.Dp_X100_Flag = 0, Flag_sts.Dp_X10_Flag = 1 :

   (Flag_sts.Dp_Flag == 4) ? Flag_sts.Dp_X10_Flag = 0, Flag_sts.Dp_X1_Flag = 1  : 0;  

   /*

    // 1. Low

    gotoxy(10, 0); // up cnt

    lcd_send(ct ->cnt16/1000 + 0x30);

    lcd_send(ct ->cnt16%1000/100 + '0');

    lcd_send(ct ->cnt16%100/10 + 48);

    lcd_send(ct ->cnt16%10 + 0x30);

 

    gotoxy(10,1); // Dn cnt

    lcd_send((2000-ct ->cnt16)/1000 + 0x30);

    lcd_send((2000-ct ->cnt16)%1000/100 + '0');

    lcd_send((2000-ct ->cnt16)%100/10 + 48);

    lcd_send((2000-ct ->cnt16)%10 + 0x30);

    */

 

 

    // mid

    // sprintf(d_buf,"Up Cnt: %4d", ct -> cnt16);

    // print_xy_str(2,0, d_buf);

 

    // sprintf(d_buf,"Dn Cnt: %4d", 2000-ct -> cnt16);

    // gotoxy(2, 1);

    // out_dev_set_mode = i2c_Char_LCD_IF_Mode;

    // dev_printf("%s", d_buf);

 

    //hi

    out_dev_set_mode = i2c_Char_LCD_IF_Mode;

    //user font dis

   // gotoxy(2, 0);

   // dev_printf("Up Cnt: %d", ct -> cnt16);

   if(x_cnt <= 3)

   {

    gotoxy(2, 0);

    lcd.write(x_cnt);

    _delay_ms(10);

   }

   else

   {

    gotoxy(14, 0);

    lcd.write(7-x_cnt);

    _delay_ms(10);

   }

  print_xy_str(4, 0, "Now Time");

 

    gotoxy(2, 1);

    dev_printf("13: %d: %d", ct -> min, ct -> sec);

 

    // UArt TX

    out_dev_set_mode = HW_Uart_IF_Mode;

   // dev_printf("Up Cnt: %d, Dn Cnt: %d\r\n", (*ct).cnt16, 2000-ct -> cnt16);

   dev_printf("현재 시간은 %d분 %d초 입니다.\r\n", ct -> min, ct -> sec);

  }



  // 실습 2

  //  LF_dis_move(5, 100);

  //  delay(1000);

  //  RR_dis_move(5, 100);

  //  delay(1000);

  //  Dis_OFF;

  //  delay(1000);

  //  DIS_ON;

  //  delay(1000);

   

 

   

 

  // put your main code here, to run repeatedly:

 

}

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼