|
- /*
- *出租車計價器
- *功能:1、初始化計價 10元
- 2、數碼管按鍵切換顯示價格和里程
- 3、速度300m/s
- 4、可以通過撥碼開關進行清零和保持當前價格和里程
- 5、當里程十位無數據時,不顯示
- 6、數碼管最高位分別顯示當前顯示的內容字母,d顯示距離,C顯示價格
- *勻速狀態
- *By:魚芯工作室
- */
- module taxi_prj(clkin,rstn,led,dataout,dot,en,Key);
- input clkin,rstn;
- input [2:0] Key;
- output led;
- output[7:1] dataout;
- output dot;
- output[3:0] en;//COM使能輸出
- reg led;
- reg [10:0] cnt;
- reg[7:1] dataout;//各段數據輸出
- reg dot;//各段數據輸出.
- reg[3:0] en;
- reg[1:0] cnt_scan;//掃描頻率計數器
- reg[3:0] dataout_buf;
- reg [4:0] data_ten,data_ge,data_dot,init_cost;
- reg [16:0] distance;
- reg [16:0] cost;
- gen_div U1(.clkin(clkin),.rstn(rstn),.clkout(clkout));//1ms
- always@(posedge clkout or negedge rstn)
- begin
- if(!rstn)
- begin
- cnt <= 0;
- distance <= 0;
- data_ten<=0;
- data_ge<=0;
- data_dot<=0;
- init_cost <= 10;
- cost<=0;
- end
- else if(cnt == 2000)
- begin
- cnt <= 0;
- led <= ~led;
- if(Key[2]==1 || Key[1] == 1)
- begin
- if(Key[1] == 1)
- begin
- distance <= 0;
- data_ten<=0;
- data_ge<=0;
- data_dot<=0;
- init_cost <= 10;
- cost<=0;
- end
- else
- begin
- distance <= distance ;
- data_ten<=data_ten;
- data_ge<=data_ge;
- data_dot<=data_dot;
- cost<=cost;
- end
- end
- else
- begin
- distance <= distance+300;
- data_ten<=distance/10000%10;
- data_ge<=distance/1000%10;
- data_dot<=distance/100%10;
- if(distance<=3000 && distance >0)
- begin
- init_cost <= 10;
- cost = init_cost *10;
- end
- else
- cost <=init_cost *10+2*(distance-3000)/100;
- end
- end
- else cnt <= cnt + 1;
- end
- //segment
- always@(posedge clkout or negedge rstn)
- begin
- if(!rstn)
- begin //低電平復位
- cnt_scan<=0;
- end
- else
- begin
- cnt_scan<=cnt_scan+1;
- end
- end
- always @(cnt_scan)//段碼掃描頻率
- begin
- case(cnt_scan[1:0])
- 2'b00 :
- en = 4'b1110;
- 2'b01 :
- en = 4'b1101;
- 2'b10 :
- en = 4'b1011;
- 2'b11 :
- en = 4'b0111;
- default :
- en = 4'b1110;
- endcase
- end
- always @ (Key[0],en) //對應COM信號給出各段數據,段碼
- case(Key[0])
- 1'b0:
- begin
- case(en)
- 4'b1110:
- begin
- dataout_buf<= 13;//輸入將要顯示的數字
- dot <= 1;
- end
- 4'b1101:
- begin
- if(data_ten!==0)
- begin
- dataout_buf<=data_ten;
- dot <= 1;
- end
- else
- begin
- dataout_buf<=7'b1111_111;
- dot <= 1;
- end
- end
- 4'b1011:
- begin
- dataout_buf <= data_ge;
- dot <= 0;
- end
- 4'b0111:
- begin
- dataout_buf<=data_dot;
- dot <= 1;
- end
- default:
- dataout_buf=1;
- endcase
- end
- 1'b1:
- begin
- case(en)
- 4'b1110:
- begin
- dataout_buf<= 12;//輸入將要顯示的數字
- dot <= 1;
- end
- 4'b1101:
- begin
- dataout_buf<=cost/100;
- dot <= 1;
- end
- 4'b1011:
- begin
- dataout_buf <= cost/10%10;
- dot <= 0;
- end
- 4'b0111:
- begin
- dataout_buf<=cost%10;
- dot <= 1;
- end
- default:
- dataout_buf=1;
- endcase
- end
- default:dataout_buf=0;
- endcase
- always@(dataout_buf)
- begin
- case(dataout_buf) //將要顯示的數字譯成段碼
- 4'b0000://0
- dataout=7'b0000_001;
- 4'b0001://1
- dataout=7'b1001_111;
- 4'b0010://2
- dataout=7'b0010_010;
- 4'b0011://3
- dataout=7'b0000_110;
- 4'b0100://4
- dataout=7'b1001_100;
- 4'b0101://5
- dataout=7'b0100_100;
- 4'b0110://6
- dataout=7'b0100_000;
- 4'b0111://7
- dataout=7'b0001_111;
- 4'b1000://8
- dataout=7'b0000_000;
- 4'b1001://9
- dataout=7'b0000_100;
- 4'b1010://A
- dataout=7'b0001_000;
- 4'b1011://B
- dataout=7'b1100_000;
- 4'b1100://C
- dataout=7'b0110_001;
- 4'b1101://D
- dataout=7'b1000_010;
- 4'b1110://E
- dataout=7'b0010_000;
- default://這里僅編譯了0-9這幾個數字
- dataout=7'b1111_111;//全滅
- endcase
- end
- endmodule
復制代碼
51hei.png (7.57 KB, 下載次數: 66)
下載附件
2021-6-25 15:16 上傳
全部代碼51hei下載地址:
taxi_prj.zip
(3.12 MB, 下載次數: 20)
2021-6-25 15:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|