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

📄 50a66e671d6b001b1041c1610f82f7f4

📁 vhdl语言开发
💻
字号:
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include <unistd.h>
#include "sys/alt_irq.h"
#include "traffic.h"

static alt_u8 second2;
static alt_u8 second3;
static alt_u8 second1;

//static alt_u16 year;
//static alt_u8 month;
//static alt_u8 day;
//static alt_u8 max_day;
static alt_u8 str1[16];
static alt_u8 str2[16];
static alt_u8 str3[16];
//static alt_u8 clr[16];
volatile int edge_capture;




static void init_led_pio(){
  IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x00);
}

static void lcd_init(FILE *lcd){ 
  fprintf(lcd,"%c%s  Traffic light",ESC,ESC_TOP_LEFT);
}

static void initial_time(){
  second1=10;
  second2=10;
  second3=10;  
}

void clear(FILE *lcd){ 
  fprintf(lcd,"%c%s\n",ESC,ESC_CLEAR);
  fprintf(lcd,"%c%s\n",ESC,ESC_CLEAR);
}


static void display_red(FILE *lcd){    
  str1[0]=' ';
  str1[1]=' ';
  str1[2]=' ';
  str1[3]='r';
  str1[4]='e';
  str1[5]='d';
  str1[6]=' ';
  str1[7]=' ';
  str1[8]=(alt_u8)(second1/10+0x30);
  str1[9]=(alt_u8)(second1%10+0x30);
  str1[10]=' ';
  str1[11]=' ';
  str1[12]=' ';
  str1[13]=' ';
  str1[14]=' ';
  //str1[15]=' ';  
  fprintf(lcd,"%c%s %s\n",ESC,ESC_TOP_LEFT,str1);
  //usleep(1000000);
}

static void display_green(FILE *lcd){    
  str2[0]=' ';
  str2[1]=' ';
  str2[2]='g';
  str2[3]='r';
  str2[4]='e';
  str2[5]='e';
  str2[6]='n';
  str2[7]=' ';
  str2[8]=(alt_u8)(second3/10+0x30);
  str2[9]=(alt_u8)(second3%10+0x30);
  str2[10]=' ';
  str2[11]=' ';
  str2[12]=' ';
  str2[13]=' ';
  str2[14]=' ';
  //str2[15]=' ';  
  fprintf(lcd,"%c%s %s\n",ESC,ESC_TOP_LEFT,str2);
  //usleep(1000000);
}

static void display_yellow(FILE *lcd){    
  str3[0]=' ';
  str3[1]='y';
  str3[2]='e';
  str3[3]='l';
  str3[4]='l';
  str3[5]='o';
  str3[6]='w';
  str3[7]=' ';
  str3[8]=(alt_u8)(second2/10+0x30);
  str3[9]=(alt_u8)(second2%10+0x30);
  str3[10]=' ';
  str3[11]=' ';
  str3[12]=' ';
  str3[13]=' ';
  str3[14]=' ';
  //str3[15]=' ';  
  fprintf(lcd,"%c%s %s\n",ESC,ESC_TOP_LEFT,str3);
  //usleep(1000000);
}


int main()
{
  FILE *lcd;
  lcd=fopen("/dev/lcd","w");
  init_led_pio();
  lcd_init(lcd);
  clear(lcd);
  initial_time();
  
  loop1:
       //for (second1=30;second1>0;second1--)
       //second1=30;
       if(second1>0){
       IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0001);
       display_red(lcd);
       usleep(1000000);
       second1--;
       if(second1<5){
        IOADDR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE);
        IORD_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE);        
        IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0001);
        usleep(1000000);
        IOADDR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE);      
         IORD_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE) ;       
         IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE, 0010); 
         usleep(1000000);
        IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(LED_PIO_BASE);       
        IORD_ALTERA_AVALON_PIO_IRQ_MASK(LED_PIO_BASE);         
        IOWR_ALTERA_AVALON_PIO_IRQ_MASK(LED_PIO_BASE, 0100);  
        usleep(1000000);
        IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(LED_PIO_BASE);      
        IORD_ALTERA_AVALON_PIO_EDGE_CAP(LED_PIO_BASE);      
        IOWR_ALTERA_AVALON_PIO_EDGE_CAP(LED_PIO_BASE, 1000);
        usleep(1000000);
       }
       goto loop1;}
       //usleep(1000000);
       //if (second1==0)
       else 
       {IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0001);
        display_red(lcd);
        usleep(1000000);
       //second2=10;
       second1=10;
       goto loop2;}
  loop2:  
       //for (second2=10;second2>0;second2--)  
       //second2=10;
       if(second2>0){
       IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0010); 
       display_yellow(lcd);
       usleep(1000000);
       second2--;
       goto loop2;}
       //usleep(1000000);       
       //if (second2==0)
       else
       {IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0010);
        display_yellow(lcd);
        usleep(1000000);
       //second3=60;
       second2=10;
       goto loop3;}
  loop3:
       //for (second3=60;second3>0;second3--)
       //second3=60;
       if(second3>0){
       IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0100);
       display_green(lcd);
       usleep(1000000);
       second3--;
       if(second1<5){
        IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,  0000);
        usleep(100000);
        IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,  100000);
        usleep(100000);
        IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,  0000);
        usleep(100000);
        IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,  1000000);
        usleep(100000);
        IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,  0000);
        usleep(100000);

       }
       goto loop3;}
       //usleep(1000000);
       //if (second3==0)
       else 
       {IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0100);
        display_green(lcd);
        usleep(1000000);
       //second1=30;
       second3=10;
       goto loop1;}
}
       
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -