熄灭了一下说明是检测到断码F0的,为什么马上有亮了,那就很简单了
if(buffer的值是F0) //检测到断码
led = 熄灭;
else //不再发送断码或者你的buffer值已经更新
led = 点亮;
熄灭时间是根据你的buffer的值持续为F0的时间来判断的,松开后,buffer值不再是F0,LED马上又亮了,那么就代表LED应该只会持续亮一个时钟周期或者几个时钟周期,具体buffer是什么值以及LED持续熄灭时间,可能要看你的代码以及PS2协议规定。
所以,要亮就比较简单了。
直接检测到断码后,熄灭LED,然后保持LED,再到下一次按下即检测到通码后点亮并保持
这种可以用状态机实现,肯定是灭-亮-灭的循环。空闲状态LED保持熄灭。这里就要多一步检测通码,具体实现可以根据需求来改
case(LED_STATE)
IDLE : begin
if(buffer=通码) begin
LED <= 1'b1;
LED_STATE <= LED_High;
end
else begin
LED <= 1'b0;
LED_STATE <= IDLE;
end
end
LED_High : begin //在此状态检测断码,如果没有检测到,LED则保持High
if(buffer=断码) begin
LED <= 1'b0; //熄灭
LED_STATE <= LED_Low;
end
else begin
LED <= 1'b1; //保持1
LED_STATE <= LED_STATE;
end
end
LED_Low : begin
if(buffer=通码) begin
LED <= 1'b1;
LED_STATE <= LED_High;
end
else begin //不检测到通码则保持熄灭
LED <= 1'b0;
LED_STATE <= LED_STATE;
end
end
default:;
endcase