【正文】
b1101111。 //8 439。b1000 : seg=739。b0000111。 //6 439。b0110 : seg=739。b1101101。 //4 439。b0100 : seg=739。b1001111。 //2 439。b0010 : seg=739。b0000110。 //0 439。b0000 : seg=739。b011: seg0=password[3:0]。b010: seg0=password[7:4]。b001: seg0=password[11:8]。b000: seg0=password[15:12]。b11110111。 339。b010: dig=839。b11111101。 339。b000: dig=839。 end else begin digyi=digyi+1。 end end always (posedge clk0_div) begin if(digyi==339。 if(CNT_R0 4096) begin clk0_div = 1。 end End //diaplay 分頻后顯示 always (posedge clk0) begin CNT_R0 = CNT_R0 + 139。key=439。b1001。!change) begin key_pressed_flag=1。 end else if(!fouramp。key=439。amp。b0111。!change) begin key_pressed_flag=1。 end else if(!twoamp。key=439。amp。b0101。!change) ////按下 change 切換輸入數(shù)的范圍 begin key_pressed_flag=1。 end else if(!zeroamp。key=439。amp。b0011。change) begin key_pressed_flag=1。 end else if(!threeamp。key=439。amp。b0001。change) begin key_pressed_flag=1。 end else if(!oneamp。key=439。amp。b0000。 end always(posedge clk1 or negedge resetb) begin if(!resetb) begin key_pressed_flag=0。 else if(error==1) try_count=try_count+1。 endcase else password=password。 fourth: password[3:0]=key。 second: password[11:8]=key。 end end //記錄密碼 always(posedge clk1 or negedge resetb) begin if(!resetb) password=0。 end else begin correct=0。 end else//密碼錯(cuò)誤時(shí) begin error=1。!yes) if(password==PASSWORD)//密碼正確 時(shí) begin correct=1。 end else if(!key_pressed_flagamp。 end //比較密碼,產(chǎn)生正確或者錯(cuò)誤信息 always(posedge clk1 or negedge resetb) begin if(!resetb) begin correct=0。 default: next_sub_state=sub_state。 fourth: next_sub_state=finish。 second: next_sub_state=third。 end always(!zero||!one||!two||!three||!four||!yes or sub_state) //always(key or sub_state) begin if(key_pressed_flag||!yes) if(!yes)//4 個(gè)密碼輸完時(shí),進(jìn)行確認(rèn) next_sub_state=first。 end //從狀態(tài)機(jī),用于輸入 4 位密碼 always(posedge clk1 or negedge resetb) begin if(!resetb) sub_state=first。 else if(main_state==pass) //pass 狀態(tài)計(jì)時(shí)器 pass 定時(shí)器加 1 pass_count=pass_count+1。 else alarm_count=0。 end end //alarm 一段時(shí)間后,自動(dòng)進(jìn)入 waits 狀態(tài) //alarm 定時(shí)器 always(posedge clk1 or negedge resetb) begin if(!resetb) alarm_count=0。 alarmed=839。 end else//其它狀態(tài)復(fù)位 begin passed=839。 alarmed=839。 end else