資源簡介
使用了Verilog和Sopc兩項功能,故在硬件部分使用Verilog編寫出數碼管的驅動程序,使用NiOS II編寫實現過程。
? 1)使用Qsys生成的定時器timer_1ms實現計時功能;
? ? 2)使用8個數碼管顯示時間;
? ? 3)使用3個按鈕實現調時間和鬧鐘時間的功能。
按鍵1:更換模式(模式0:正常顯示時間;模式1:調當前時間的小時;模式2;調當前時間的分鐘;模式3:當前時間的秒;模式4:調鬧鐘時間的小時;模式5:調鬧鐘時間的分鐘);
按鍵2:在非模式0下給需要調節的時間數加一,但不溢出;
按鍵3:在非模式0下給需要調節的時間數減一,但不小于零;
實現時間和鬧鐘時間的調時功能;
? ? 4)加入閃爍標志,給正在調整的位閃爍,判斷是哪一位在調整;
? ? 5)按鍵按下時,對應一個led燈點亮;
? ? 6)使用蜂鳴器實現鬧鐘功能,鬧鐘響時實現流水燈指示功能。
代碼片段和文件信息
#include?
#include?“system.h“
#include?“alt_types.h“
#include?“altera_avalon_pio_regs.h“
#include?“altera_avalon_timer_regs.h“
#include?“sys/alt_irq.h“
int?hour?=?23minute?=?59second?=?50;
int?hour1?=?0minute1?=?0;
int?secLsecHminuLminuHhourLhourH;
int?segtab[12]={0x00x1?0x2?0x3?0x4?0x5?0x6?0x7?0x8?0x90xf0xe};
int?model_flag?=?0S_flag?=?0BEEP?=?0beep_flag?=?0beep_flag1?=?0;
int?key_set?=?1key_add?=?1key_sub?=?1key_rst?=?1;
int?a[8]={00000000};
int?n?=0;
void?write_data()
{
IOWR(DIG_1_base0a[7]);
IOWR(DIG_2_base0a[6]);
IOWR(DIG_3_base0a[5]);
IOWR(DIG_4_base0a[4]);
IOWR(DIG_5_base0a[3]);
IOWR(DIG_6_base0a[2]);
IOWR(DIG_7_base0a[1]);
IOWR(DIG_8_base0a[0]);
}
void?rst()
{
?if(key_rst==0)
?{
?key_rst?=1;
a[0]=2;
a[1]=3;
a[2]=segtab[10];
a[3]=5;
a[4]=9;
a[5]=segtab[10];
a[6]=5;
a[7]=5;
write_data();
?}
}
void?set_led(int?led_flag?int?state)
{
if?(?led_flag?==?1)?{
IOWR(LED_base00xff);
}
else?if?(?led_flag?==?2){
IOWR(LED_base0state);
}
else?{
IOWR(LED_base00x00);
}
}
int?read_key()
{
int?status?=?0;
status?=?IORD(KEY_base0);
return?status;
}
int?tmp?=?0;
void?check_key()
{
delay(10);
int?status?=?IORD(KEY_base0);
?? if?(?status)?{
tmp?++;
if?(?tmp?==?50)?{
if?(?status?&?0x01)?{
key_set?=?0;
set_led(20x01);
}
else?if?(?status?&?0x01?<1)?{
key_add?=0;
set_led(20x02);
}
else?if?(?status?&?0x01<2){
key_sub?=?0;
set_led(20x04);
}
else?if?(?status?&?0x01<3){
key_rst?=?0;
set_led(20x08);
}
else
{
tmp?=?0;
}
}
}
else?{
tmp?=?0;
}
}
void?delay(int?us)//?延時函數
{
int?ij;
for?(?i?=?us;?i?>?us;?i--)?{
for?(?j?=?50;?j?>?0;?j--);
}
}
int?flag?=?0ss_add?=?0;
void?ISR_timer(void?*?context?alt_u32?id)
{
????IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1S_base?0);
????ss_add++;
????if(ss_add?>=?500)
????{
???? ss_add?=?0;
???? S_flag?=!?S_flag; ??????//閃爍標志位
????}
????flag?=?1;
}
void?display()
{
switch(model_flag)
{
case?0:
{
a[0]=segtab[hour/10];
a[1]=segtab[hour%10];
a[2]=segtab[10];
a[3]=segtab[minute/10];
a[4]=segtab[minute%10];
a[5]=segtab[10];
a[6]=segtab[second/10];
a[7]=segtab[second%10];
write_data();
}break;
case?1:
{
if(S_flag==1)
{
a[0]=segtab[hour/10];
a[1]=segtab[hour%10];
}
else
{
a[0]=segtab[11];
a[1]=segtab[11];
}
a[2]=segtab[10]; //橫線-
a[3]=segtab[minute/10];
a[4]=segtab[minute%10];
a[5]=segtab[10];
a[6]=segtab[second/10];
a[7]=segtab[second%10];
write_data();
}
break;
case?2:
{
a[0]=segtab[hour/10];
a[1]=segtab[hour%10];
a[2]=segtab[10];
if(S_flag==1)
{
a[3]=segtab[minute/10];
a[4]=segtab[minute%10];
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-12-17?13:13??TIMER\
?????目錄???????????0??2018-11-15?20:20??TIMER\.qsys_edit\
?????文件??????????66??2018-11-08?14:34??TIMER\.qsys_edit\filters.xm
?????文件???????72097??2018-11-15?15:54??TIMER\.qsys_edit\layout.xm
?????文件???????72112??2018-11-15?15:55??TIMER\.qsys_edit\mycpu.xm
?????文件?????????565??2018-11-14?22:57??TIMER\.qsys_edit\preferences.xm
?????目錄???????????0??2018-12-17?13:14??TIMER\db\
?????文件????????1262??2018-11-15?15:58??TIMER\db\.cmp.kpt
?????文件????????1575??2018-11-08?14:38??TIMER\db\add_sub_hui.tdf
?????文件???????17656??2018-11-08?14:38??TIMER\db\altera_mult_add_80u2.v
?????文件???????17656??2018-11-08?14:38??TIMER\db\altera_mult_add_a0u2.v
?????文件???????37802??2018-11-08?14:38??TIMER\db\altsyncram_3id1.tdf
?????文件???????37470??2018-11-08?14:38??TIMER\db\altsyncram_boc1.tdf
?????文件???????12571??2018-11-08?14:38??TIMER\db\altsyncram_cpg1.tdf
?????文件????????6424??2018-11-08?14:38??TIMER\db\altsyncram_g7h1.tdf
?????文件???????37407??2018-11-08?14:38??TIMER\db\altsyncram_glg1.tdf
?????文件???????37407??2018-11-08?14:38??TIMER\db\altsyncram_hlg1.tdf
?????文件???????34541??2018-11-08?14:38??TIMER\db\altsyncram_i2d1.tdf
?????文件???????51233??2018-11-08?14:38??TIMER\db\altsyncram_n802.tdf
?????文件???????17839??2018-11-08?14:38??TIMER\db\altsyncram_njh1.tdf
?????文件???????30551??2018-11-08?14:38??TIMER\db\altsyncram_oac1.tdf
?????文件???????30550??2018-11-08?14:38??TIMER\db\altsyncram_qac1.tdf
?????文件???????31245??2018-11-08?14:38??TIMER\db\altsyncram_qv81.tdf
?????目錄???????????0??2018-11-15?20:20??TIMER\db\ip\
?????目錄???????????0??2018-11-15?20:20??TIMER\db\ip\mycpu\
?????文件????????7387??2018-11-15?15:57??TIMER\db\ip\mycpu\mycpu.bsf
?????文件???????14657??2018-11-15?15:57??TIMER\db\ip\mycpu\mycpu.qip
?????文件???????50494??2018-11-15?15:57??TIMER\db\ip\mycpu\mycpu.v
?????文件??????167712??2018-11-15?15:57??TIMER\db\ip\mycpu\mycpu__report.html
?????文件?????1197196??2018-11-15?15:57??TIMER\db\ip\mycpu\mycpu__report.xm
?????目錄???????????0??2018-11-15?20:20??TIMER\db\ip\mycpu\submodules\
............此處省略604個文件信息
評論
共有 條評論