#include "system.h" #include "altera_avalon_timer_regs.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "sys/alt_irq.h" #include <unistd.h> alt_u16 flag; //毫秒定時(shí)計(jì)數(shù)器 alt_u16 second; //秒計(jì)數(shù)器 //alt_u8 seg[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; alt_u8 seg[16] = { 63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; // 0,1,2,....9, a, b, c, d, e,f void delay(alt_u32 cnt); void seg_dis(alt_u16 dis_num); //毫秒定時(shí)中斷函數(shù) static void handle_Timer0_interrupts(void) { IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE,0);//清TO標(biāo)志 if(flag < 1000) flag =flag+1; else { flag = 0; second++; if(second==60) second=0; } } //主函數(shù) int main (void) { flag = 0; second = 0; //IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,0x00); //數(shù)碼管位選管腳關(guān)閉 //IOWR_ALTERA_AVALON_PIO_DATA(SEGCS4_PIO_BASE,0xf); //數(shù)碼管片選管腳關(guān)閉 alt_irq_register(TIMER_IRQ,TIMER_BASE,handle_Timer0_interrupts); //注冊(cè)定時(shí)器中斷函數(shù) IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE,7); //啟動(dòng)timer允許中斷,連續(xù)計(jì)數(shù) while(1) { //IOWR_ALTERA_AVALON_PIO_DATA(SEGCS4_PIO_BASE,0xf); //數(shù)碼管片選管腳關(guān)閉 IOWR_ALTERA_AVALON_PIO_DATA(PIO_HEX0_BASE,seg[(flag%100)/10]); //數(shù)碼管位選顯示變量second的個(gè)位 //IOWR_ALTERA_AVALON_PIO_DATA(SEGCS4_PIO_BASE,0x7); //數(shù)碼管片選個(gè)位 delay(2500); //delay 5ms IOWR_ALTERA_AVALON_PIO_DATA(PIO_HEX1_BASE,seg[(flag%1000)/100]); delay(2500); //delay 5ms IOWR_ALTERA_AVALON_PIO_DATA(PIO_HEX2_BASE,seg[(second%10)]); delay(2500); //delay 5ms IOWR_ALTERA_AVALON_PIO_DATA(PIO_HEX3_BASE,seg[(second%100)/10]); delay(2500); //delay 5ms } } //延時(shí)函數(shù)(延時(shí)時(shí)間為(2+2*i)us) void delay(alt_u32 cnt) { alt_u32 i =0; while(i < cnt) { i++; } } 圖5 參考程序 6、點(diǎn)擊project->build project; 7、點(diǎn)擊run->run as->NiosII hardware;觀測(cè)結(jié)果;
|