always @(posedge clk)
begin
if(count==24'h00ffff) //除頻
begin
count<=0;
divclk<=~divclk;
end
else
count<=count+1;
end
always@(posedge divclk)
begin
case(state) //state0,1,2會在按下數字鍵時觸發,數字鍵未按下時12個鍵盤皆為高電位'1',當按下數字鍵時, 該數字鍵為接地'0'
0: //state0,1,2因判斷皆相同,會不停執行
if(kb_in==4'b1111) //當按下數字鍵(例如'9')時,kb_in=1101,kb_out=011,此時case0,1,2皆不滿足條件,利用在'if'的條件下,
begin //系統會將{kb_in,kb_out}1101011存起來.
state<=1;
kb_out=3'b110;
end
1:
if(kb_in==4'b1111)
begin
state<=2;
kb_out=3'b101;
end
2:
if(kb_in==4'b1111)
begin
state<=0;
kb_out=3'b011;
end
default:;
endcase
end
always@(posedge clk) //當clk正緣觸發時,會將存起來的{kb_in,kb_out}依照數值顯示至七段顯示器
begin
case({kb_in,kb_out})
//左邊為{kb_in,kb_out}目前數值,右邊則是輸出七段顯示之數字
7'b0111110:a=a*10+1;//1
7'b0111101:a=a*10+2;//2
7'b0111011:a=a*10+3;//3
7'b1011110:a=a*10+4;//4
7'b1011101:a=a*10+5;//5
7'b1011011:a=a*10+6;//6
7'b1101110:a=a*10+7;//7
7'b1101101:a=a*10+8;//8
7'b1101011:a=a*10+9;//9
7'b1110110:begin //+
r=r+a;
a=a*0;
end
7'b1110101:a=a*10;//0
7'b1110011:begin//-
r=r-a;
a=a*0;
end