|
module led_shizhong(res,clkin,on_ked,fenout,wei);//时钟
input clkin,res;
input [2:0] on_ked;//按键
output fenout,wei;
reg [7:0] fenout;//显示出口
reg [3:0] wei;//led位
reg tai,anle,anle1;//功能键按了标记,anle1保证每按一次键只加一个数
reg shan;//闪烁标记
reg [25:0] con;//分频计数
reg [21:0] con1;
reg [5:0] miao;//秒计数
reg miaoshan;//秒点闪烁
reg [5:0] weishu [1:0];//小时和分钟寄存器
reg [7:0] zibiao [9:0];//字表寄存器组
always @ (posedge res or posedge clkin)
begin
if(res)
begin
con<=0;
//fenout<=8'hFF;
//wei=0; // 初始化字段
zibiao[0]=8'h03;
zibiao[1]=8'h9F;
zibiao[2]=8'h25;
zibiao[3]=8'h0D;
zibiao[4]=8'h99;
zibiao[5]=8'h49;
zibiao[6]=8'h41;
zibiao[7]=8'h1F;
zibiao[8]=8'h01;
zibiao[9]=8'h09;
weishu[0]=0;
weishu[1]=0;
tai=0;
shan=0;
end
else
begin
if(on_ked==3'b111)
begin
anle=0;
con1=0;
end
if(on_ked!=3'b111)
begin
if(con1<22'd2000000)
begin
con1=con1+1'b1;//防抖延时
end
if(con1==22'd2000000)
begin
if(on_ked!=3'b111)
begin//也可以con1<=22'd2000001;来保证按一次键,但较占空间
if(anle==0)//保证每按一次键只加一个数
begin
anle=1;//确认按键啦
anle1=1;//保证每按一次键只加一个数
end
end
end
end
///
if(anle1==1)
begin
anle1=0;//保证每按一次键只加一个数
if(on_ked[0]==1'b0)//功能键按下
begin
tai=~tai;
end
if(tai==1'b1)
begin
if(on_ked[1]==1'b0)//调分
begin
jifen;
end
if(on_ked[2]==1'b0)//调时
begin
jishi;
end
end
end//
if(tai==1'b0)//停止闪烁
begin
shan=1'b0;
end
con=con+1'b1;
if(con==26'd40000000)//40MHz晶体,1秒分频,用于计数源
begin
con=0;
miaoshan<=~miaoshan;
if(tai==1'b1)//数字闪烁
begin
shan=~shan;
end
miao=miao+1'b1;//计秒
if(miao==6'd60)
begin
miao=0;
if(tai==1'b0)//未按功能键就走时
begin
jifen;
end
end
end
end
end
always(posedge res or posedge clkin)
begin
if(res)
begin
fenout<=8'hFF;
wei=0; // 初始化字段
end
else if(!res)
begin
case(con[18:17])//用于位扫描
2'b00:
begin
if(shan==1'b0)//第一位数字闪烁,表示进入调时
begin
wei=4'b0111;
end
else
begin
wei=4'b1111;
end
fenout=zibiao[weishu[0]%4'd10];
end
2'b01:
begin
wei=4'b1011;
fenout=zibiao[weishu[0]/4'd10];
end
2'b10:
begin
wei=4'b1101;
fenout=zibiao[weishu[1]%4'd10];
fenout[0]<=miaoshan;//秒点闪烁
end
2'b11:
begin
wei=4'b1110;
fenout=zibiao[weishu[1]/4'd10];
end
endcase
end
end
task jifen;
weishu[0]=weishu[0]+1'b1;//分钟
if(weishu[0]==6'd60)
begin
weishu[0]=0;
if(tai==1'b0)//未按功能键就走时
begin
jishi;
end
end
endtask
task jishi;
weishu[1]=weishu[1]+1'b1;//小时
if(weishu[1]==5'd24)
begin
weishu[1]=0;
end
endtask
endmodule
综合时报错:
Error (10170): Verilog HDL syntax error at led_shizhong.v(111) near text "("; expecting "@", or an identifier, or a system task, or "{", or a sequential statement,
Error (10170): Verilog HDL syntax error at led_shizhong.v(137) near text "<="; expecting ".", or "["
Error (10112): Ignored module "led_shizhong" at led_shizhong.v(1) due to previous errors |
|