资源简介
使用了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个文件信息
相关资源
- 具有可编程环路补偿功能高密度电源
- FPGA系统中有源电容放电电路设计需注
- 玩转Altera FPGA:基于PLL分频计数的LE
- 二院型号FPGA 硬件描述语言编程准则
- ETC中FM0解码器的设计
- 基于FPGA和万兆网的GigE Vison设计方案
- Xilinx FPGA底层资源架构与设计规范
- fpga多通道采样
- 基于FPGA的电梯控制器系统设计
- 基于MCU+FPGA的LED大屏幕控制系统的设计
- Modelsim学习资料很全
- 宽频带数字锁相环的设计及基于FPGA的
- 一种基于FPGA的三相锁相环设计方法
- 开发板EP4CE10F17C8技术手册.zip
- 基于FPGA的快速并行FFT及应用
- 基于FPGA的移位寄存器流水线结构FFT处
- 基于FPGA的彩色线阵CCD图像采集系统设
- 在FPGA上优化实现复数浮点计算
- 基于FPGA的高速流水线浮点乘法器设计
- 电源纹波调试的小结
- 详析单片机、ARM、FPGA嵌入式的特点和
- 详析单片机、ARM、FPGA嵌入式的特点
- actel fpga外部输入时钟毛刺问题排查与
- 基于Actel FPGA的TFT控制器技术方案设计
- FPGA实现单极性SPWM调制
- uart_tx.zip
- 基于FPGA的多电平载波移相SPWM方法实现
- 基于FPGA的瓦斯浓度模糊控制系统设计
- FPGA最全面的VHDL例程源码
- FPGA工作原理.pdf
评论
共有 条评论