📄 scan_disp_new.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 + -