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

📄 time.c

📁 用c语言写的niosii软核的多种外设测试程序
💻 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 + -