旋转编码器程序救助!
http://bbs.elecfans.com/forum.ph ... 0375&highlight=旋转编码器
module jxd(d,clk,q,qn,a,b,p); //旋转编码器解码电路
output a,b,q,qn;
output[7:0] p;
input d,clk;
reg q,qn;
reg a,b;
reg[7:0] p;
always@(posedge clk) //ab 鉴相电路 D触发器和与非门组成
begin
q=d;
qn=~d;
end
/*********
assign a=~(clk&q);
assign b=~(clk&qn);
但a,b要改成wire型
********/
always@(*)
begin
a=~(clk&q);
b=~(clk&qn);
end
always@(posedge a or posedge b) //可逆8位2进制计数器
begin //设计可逆计数器时不能在两个以上always内对同一变量赋值
if(a==1) //合并即可
begin
if(p==8'b00000000)
begin p<=4'b11111111;end
else
begin p<=p+1;end
end
else if(b==1)
begin
if(p==8'b11111111)
begin p<=4'b00000000;end
else
begin p<=p-1;end
end
end
endmodule
能帮我解释一下这段代码吗?