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

📄 scan_disp_new.v

📁 用verlog HDL写的电子日历,可以显示年,月,日和时间,具有闹铃的功能
💻 V
字号:
/* scheme4中数码管扫描显示子模块,当选择了某对象后,所对应的数码管闪烁点亮(比较繁琐) */

module scan_disp_new(clk,clk_4Hz,disp_mode,sel,sec,min,hour,week,day,mon,year,amin,ahour,scan_data,scan_en);
  input clk,clk_4Hz;       // clk的T=1ms,clk_4Hz作为数码管闪烁显示的时钟
  input[1:0] disp_mode;    // 来自route子模块,选择显示的信号(时间、日期、星期或闹钟定时)
  input[1:0] sel;		   // 来自route子模块,选择显示不同的对象(如时间中的小时或分钟或秒,日期中的年或月或日)
  input[7:0] sec,min,hour; // 秒、分、时输入信号
  input[3:0] week;         // 星期输入信号
  input[7:0] day,mon,year; // 日、月、年输入信号
  input[7:0] amin,ahour;   // 闹钟定时的分、小时输入信号

  output[3:0] scan_data;   // 驱动数码管
  output[6:1] scan_en;     // 分别驱动各数码管共阴极引脚SC6~SC1
  reg[3:0] scan_data;
  reg[6:1] scan_en;  
  reg[2:0] state;          // 状态机,s6~s1为state的6个状态,分别用于控制scan_en[6:1]
  reg flash_en;			  // 闪烁使能信号
  parameter
    s1=3'b001,
    s2=3'b010,
    s3=3'b011,
    s4=3'b100,
    s5=3'b101,
    s6=3'b110;

  always @(posedge clk)
    begin
 	  if(state==s6) state=s1;        // 状态机的状态转移
	  else state=state+1;

      if (sel==0)
          flash_en=0;        // 当sel等于0时,为正常显示状态
  /*    case (disp_mode)
      3:begin                       // (1)显示闹钟定时
        case(state) // 产生七段码数码管的输入信号和使能信号                   
          s1:begin scan_data=ahour[7:4];scan_en=1;end // 在s1状态下,DP1亮,显示闹钟定时的小时高位
          s2:begin scan_data=ahour[3:0];scan_en=2;end // 在s2状态下,DP2亮,显示闹钟定时的小时低位
          s3:begin scan_data=amin[7:4];scan_en=4;end
          s4:begin scan_data=amin[3:0];scan_en=8;end
          s5:begin scan_data=sec[7:4];scan_en=0;end
          s6:begin scan_data=sec[3:0];scan_en=0;end// 在s5和s6状态下,所有数码管都不亮
          default:state=s1;                         // 默认状态为s1
        endcase
        end
      2:begin                       // (2)直接显示星期,不必按select键
          scan_data=week[3:0];
          scan_en=1;
        end
      1:begin                       // (3)显示年月日
        case(state)                    
          s1:begin scan_data=year[7:4];scan_en=1;end // 在s1状态下,DP1亮,显示年高位
          s2:begin scan_data=year[3:0];scan_en=2;end // 在s2状态下,DP2亮,显示年低位
          s3:begin scan_data=mon[7:4];scan_en=4;end
          s4:begin scan_data=mon[3:0];scan_en=8;end
          s5:begin scan_data=day[7:4];scan_en=16;end
          s6:begin scan_data=day[3:0];scan_en=32;end// 在s6状态下,DP6亮,显示日低位
          default:state=s1;                         // 默认状态为s1
        endcase
        end
      default:begin                // (4)显示时分秒
        case(state)                    
          s1:begin scan_data=hour[7:4];scan_en=1;end // 在s1状态下,DP1亮,显示小时高位
          s2:begin scan_data=hour[3:0];scan_en=2;end // 在s2状态下,DP2亮,显示小时低位
          s3:begin scan_data=min[7:4];scan_en=4;end
          s4:begin scan_data=min[3:0];scan_en=8;end
          s5:begin scan_data=sec[7:4];scan_en=16;end
          s6:begin scan_data=sec[3:0];scan_en=32;end// 在s6状态下,DP6亮,显示秒低位
          default:state=s1;                         // 默认状态为s1
        endcase
        end
      endcase */
    //end

      else         
        flash_en = clk_4Hz;		 // 当sel不等于0时,即表示要设置初值,则flash_en有

⌨️ 快捷键说明

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