📄 time.c
字号:
#include"time.h"
/*declare*/
static alt_u8 hour;
static alt_u8 minute;
static alt_u8 second;
static alt_u16 year;
static alt_u8 month;
static alt_u8 day;
static alt_u8 max_day;
static int flag,flag2,flag3;
//flag1:show day or time;
//flag2:move set
//flag3:
static int begin;
/*declare the edge capture*/
volatile int edge_capture;
//----------button_capture-------------------------------
#ifdef BUTTON_PIO_BASE
static void handle_button_interrupts(void* context, alt_u32 id)
{
volatile int* edge_capture_ptr = (volatile int*) context;
/* Store the value in the Button's edge capture register in *context. */
*edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE);
/* Reset the Button's edge capture register. */
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0);
}
//---------------Initialize the button-----------------
static void init_button_pio()
{
void* edge_capture_ptr = (void*) &edge_capture;
/* Enable all 4 button interrupts. */
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xf);
/* Reset the edge capture register. */
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x0);
/* Register the interrupt handler. */
alt_irq_register( BUTTON_PIO_IRQ, edge_capture_ptr, handle_button_interrupts );
}
#endif
static void last_day()
{
if (month==4||month==6||month==9||month==11)
max_day=30;
else if (month==2)
{
if((year%4==0&&year%100!=0)||year%400==0)
max_day=29;
else
max_day=28;
}
else
max_day=31;
}
/*lcd clear*/
void clear(FILE * lcd)
{
fprintf(lcd,"%c%s\n",ESC,ESC_CLEAR);
fprintf(lcd,"%c%s\n",ESC,ESC_CLEAR);
}
/*main*/
int main(void)
{
FILE * lcd;
lcd=fopen("/dev/lcd_16207","w");
hour=12;minute=30;second=0;year=2004;month=7;day=28;flag=0;begin=0;
init_button_pio();
while(1)
{
//-----------------------count++-----------------------------------------------
usleep(500000);
second++;
if (second>=60)
{
second=0;
minute++;
}
if (minute>=60)
{
minute=0;
hour++;
}
if (hour>=24)
{
hour=0;
day++;
}
last_day();
if(day>max_day)
{
day=1;
month++;
last_day();
}
if(month>=12)
{
month=1;
year++;
}
//----------------led state-----------------------------------------------------
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,flag2);
//----------------button2 show time or date-------------------------------------
if(flag==0&&flag3==0)
{
clear(lcd);
fprintf(lcd,"%c%stime:%d:%d:%d ",ESC,ESC_TOP_LEFT,hour,minute,second);
}
else if(flag==1&&flag3==0)
{
clear(lcd);
fprintf(lcd,"%c%sdate:%d-%d-%d",ESC,ESC_TOP_LEFT,year,month,day);
}
//---------------button1 ++ or button2 -- --------------------------------------
if(flag==2&&edge_capture!=0&&flag3==1)
{
if (flag2==1)
{
switch(edge_capture)
{
case 0x1:
year++;
clear(lcd);
fprintf(lcd,"%c%syear:%d ",ESC,ESC_TOP_LEFT,year);
edge_capture=0;
break;
case 0x2:
year--;
clear(lcd);
fprintf(lcd,"%c%syear:%d ",ESC,ESC_TOP_LEFT,year);
edge_capture=0;
break;
case 0x4:
flag3=0;
clear(lcd);
fprintf(lcd,"%c%sset mon,pushPB1",ESC,ESC_TOP_LEFT);
edge_capture=0;
break;
}
}
if (flag2==2)
{
switch(edge_capture)
{
case 0x1:
month++;
clear(lcd);
fprintf(lcd,"%c%smonth:%d ",ESC,ESC_TOP_LEFT,month);
edge_capture=0;
break;
case 0x2:
month--;
clear(lcd);
fprintf(lcd,"%c%smonth:%d ",ESC,ESC_TOP_LEFT,month);
edge_capture=0;
break;
case 0x4:
flag3=0;
clear(lcd);
fprintf(lcd,"%c%sset day,pushPB1",ESC,ESC_TOP_LEFT);
edge_capture=0;
break;
}
}
if (flag2==3)
{
switch(edge_capture)
{
case 0x1:
day++;
clear(lcd);
fprintf(lcd,"%c%sday:%d ",ESC,ESC_TOP_LEFT,day);
edge_capture=0;
break;
case 0x2:
day--;
clear(lcd);
fprintf(lcd,"%c%sday:%d ",ESC,ESC_TOP_LEFT,day);
edge_capture=0;
break;
case 0x4:
flag3=0;
clear(lcd);
fprintf(lcd,"%c%sset hour,pushPB1",ESC,ESC_TOP_LEFT);
edge_capture=0;
break;
}
}
if (flag2==4)
{
switch(edge_capture)
{
case 0x1:
hour++;
clear(lcd);
fprintf(lcd,"%c%shour:%d ",ESC,ESC_TOP_LEFT,hour);
edge_capture=0;
break;
case 0x2:
hour--;
clear(lcd);
fprintf(lcd,"%c%shour:%d ",ESC,ESC_TOP_LEFT,hour);
edge_capture=0;
break;
case 0x4:
flag3=0;
clear(lcd);
fprintf(lcd,"%c%sset min,pushPB1",ESC,ESC_TOP_LEFT);
edge_capture=0;
break;
}
}
if (flag2==5)
{
switch(edge_capture)
{
case 0x1:
minute++;
clear(lcd);
fprintf(lcd,"%c%sminute:%d ",ESC,ESC_TOP_LEFT,minute);
edge_capture=0;
break;
case 0x2:
minute--;
clear(lcd);
fprintf(lcd,"%c%sminute:%d ",ESC,ESC_TOP_LEFT,minute);
edge_capture=0;
break;
case 0x4:
flag3=0;
edge_capture=0;
clear(lcd);
fprintf(lcd,"%c%spush PB1 ",ESC,ESC_TOP_LEFT);
}
}
}
//-----------------main stste machine-------------------------------------------
if(edge_capture!=0&&flag3==0)
{
switch(edge_capture)
{
case 0x1:
if(flag2<=4)
{
flag2++;
flag=2;
flag3=1;
clear(lcd);
fprintf(lcd,"%c%spush PB1 ",ESC,ESC_TOP_LEFT);
}
else
{
flag2=0;
flag=0;
flag3=0;
}
edge_capture=0;
break;
case 0x2:
if(flag==0)
{
flag=1;
edge_capture=0;
}
else
{
flag=0;
edge_capture=0;
}
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -