// 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:
}