⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 FPGA设计初级班和提高班培训课堂PPT;实验的源代码;实验指导书!
💻 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 + -