always@(negedge key[2])//改state begin state=(state+1)%2; end
always@(negedge key[1])//改zstate和nstate begin temp=state; if(temp==0)//如果在计时状态 begin zstate=(zstate+1)%4; end else//闹钟状态 begin nstate=(nstate+1)%4; end end
always@(negedge key[0])//增加 begin t4=state; t5=zstate; t6=nstate; th=hour; tm=minute; ts=second; if(t4==0)//如果在计时状态 begin if(t5==1) begin if(th==23) th=0; else th=th+1; end if(t5==2) begin if(tm==59) tm=0; else tm=tm+1; end if(t5==3) begin if(ts==59) ts=0; else ts=ts+1; end end else//闹钟状态 begin if(t6==1) begin if(nhour==23) nhour=0; else nhour=nhour+1; end if(t6==2) begin if(nminute==59) nminute=0; else nminute=nminute+1; end if(t6==3) begin if(nsecond==59) nsecond=0; else nsecond=nsecond+1; end end end
always@(posedge clk1,negedge key[3]) begin t1=state; t2=zstate; t3=nstate; if(!key[3])//按下置零 begin hour=0; minute=0; second=0; show(hour/10,hex7); show(hour%10,hex6); show(minute/10,hex5); show(minute%10,hex4); show(second/10,hex3); show(second%10,hex2); show(10,hex1); show(zstate+12,hex0); end else//clk1来了 begin if(t1==0) begin if(t2==0) begin //下面是正常的计时 if(second==59) begin second=0; if(minute==59) begin minute=0; if(hour==23) hour=0; else hour=hour+1; end else minute=minute+1; end else begin second=second+1; end show(hour/10,hex7); show(hour%10,hex6); show(minute/10,hex5); show(minute%10,hex4); show(second/10,hex3); show(second%10,hex2); show(10,hex1); show(12,hex0); //以上是正常的计时,以下是报时和闹钟 if(minute==0&&second==0) ztimer=59; else ztimer=0; if(hour==nhour&&minute==nminute&&second==nsecond) ntimer=59; else ntimer=0; if(ztimer>0) begin ledr=18'b111111111111111111;//亮红灯 ztimer=ztimer-1; end else ledr=18'b000000000000000000;//关红灯 if(ntimer>0) begin ledg=9'b111111111;//亮绿灯 ntimer=ntimer-1; end else ledg=9'b000000000; end elseif(t2==1) begin hour=th; show(hour/10,hex7); show(hour%10,hex6); show(minute/10,hex5); show(minute%10,hex4); show(second/10,hex3); show(second%10,hex2); show(10,hex1); show(t2+12,hex0); end elseif(t2==2) begin minute=tm; show(hour/10,hex7); show(hour%10,hex6); show(minute/10,hex5); show(minute%10,hex4); show(second/10,hex3); show(second%10,hex2); show(10,hex1); show(t2+12,hex0); end elseif(t2==3) begin second=ts; show(hour/10,hex7); show(hour%10,hex6); show(minute/10,hex5); show(minute%10,hex4); show(second/10,hex3); show(second%10,hex2); show(10,hex1); show(t2+12,hex0); end end elseif(t1==1) begin show(nhour/10,hex7); show(nhour%10,hex6); show(nminute/10,hex5); show(nminute%10,hex4); show(nsecond/10,hex3); show(nsecond%10,hex2); show(11,hex1); show(nstate+12,hex0); end end