找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1309|回复: 0
收起左侧

Verilog HDL语言在QuartusⅡ13.5软件中将出租车计费器基本结构分成5个...

[复制链接]
ID:522536 发表于 2022-3-12 11:54 | 显示全部楼层 |阅读模式
以CPLD/FPGA为主体,设计并制作一台出租车计费系统。
基本要求:1、里程显示,显示方式为XXX.X,单位为km精确到0.1km
2、里程单价显示,显示方式为X.XX,单位为元/km,根据每天不同的时间段有两种情况:当时间段为06:00~23:00时单价为1.40元/km,其他时间段单价为1.80元/km;
3、费用的计算及显示,出租车的起价为5.00元,当里程小于2km时,按起价计算费用;当里程大于2km时,按下式计算费用:
   费用=里程×里程单价+等候时间×等候单价
    费用显示方式为XXX:XX,单位为元;
4、当出租车在正常运行状态下,应能显示当前的时间;在熄火的情况下,时钟必须正常运行,但是可以不显示时钟;

源程序如下:
  1. module control(clk,                  //50MHz
  2.                                 reset,               //复位
  3.                                 set,                 //状态切换
  4.                                 start,               //计费启动开关
  5.                                 run,                 //出租车运行状态开关
  6.                                 price_day_short,     //白天近程单价
  7.                                 price_day_long,      //白天远程单价
  8.                                 price_night_short,   //晚上近程单价
  9.                                 price_night_long,    //晚上远程单价
  10.                                 price_wait_time,     //等待时间每分钟价格
  11.                                 one_price_day,       //白天起步价
  12.                                 one_price_night,     //晚上起步价
  13.                                 short_distance,      //起步价可行最大里程数
  14.                                 long_distance,       //最大近程里程数
  15.                                 day_time,            //白天开始时间
  16.                                 night_time,          //晚上开始时间
  17.                                 start_out,
  18.                                 run_out,
  19.                                 state,
  20.                                 password            //更改信息的密码
  21.                                 );
  22.         input clk,reset,set,start,run;
  23.         input [5:0] password;
  24.         output [7:0] price_day_short,price_day_long,price_night_short,price_night_long,price_wait_time;
  25.         output [11:0] one_price_day,one_price_night;
  26.         output [7:0] short_distance,long_distance;
  27.         output [7:0] day_time,night_time;
  28.         output [3:0] state,start_out;
  29.         output run_out;
  30.         reg [7:0] price_day_short,price_day_long,price_night_short,price_night_long,price_wait_time;
  31.         reg [11:0] one_price_day,one_price_night;
  32.         reg [7:0] short_distance,long_distance;
  33.         reg [7:0] day_time,night_time;
  34.         reg [3:0] state,start_out;
  35.         reg run_out,add,sub;
  36.        
  37.         initial   //为了处理小数点,把实际价格扩大十倍
  38.         begin
  39.                 day_time=5;           //白天开始时间
  40.                 night_time=23;        //晚上开始时间
  41.                 short_distance=3;     //起步价可行最大里程数
  42.                 long_distance=10;     //最大近程里程数
  43.                 price_day_short=24;   //实际价格2.4元
  44.                 price_day_long=36;    //实际价格3.6元
  45.                 price_night_short=31; //实际价格3.1元
  46.                 price_night_long=47;  //实际价格4.7元
  47.                 one_price_day=140;    //实际价格14元
  48.                 one_price_night=180;  //实际价格18元
  49.                 price_wait_time=10;   //实际价格1元
  50.         end
  51.        
  52.         initial
  53.         begin
  54.                 state<=4'd0;
  55.         end
  56.        
  57.         always@(posedge clk)
  58.         begin         
  59.                 if(reset==1)                               //复位键       
  60.                         state<=4'd0;                  

  61.                 if(set==1)                                 //总状态设置
  62.                         if(state>=4'd14)
  63.                                 state<=4'd1;              
  64.                         else
  65.                                 state<=state+4'd1;       
  66.                                        
  67. //      start/run第一功能区               
  68.        
  69.                 if(start==1&&state==0)                     //state=0,该功能可用   //计费启动键,每按一次取反一次。
  70.                         if(start_out>=4'd2) start_out<=4'd0;   //总状态设置
  71.                         else start_out<=start_out+4'd1;
  72.                        
  73.                 if(start_out==0) run_out=1;                       
  74.                
  75.                 if(start_out==1&&run==1&&state==0)         //出租车行驶状态键,没按一次取反一次。
  76.                 begin
  77.                         run_out=~run_out;
  78.                 end
  79.                        
  80. //      start/run第二功能区       
  81.                
  82.                 add=start;                                 //加,第二功能
  83.                 sub=run;                                   //减,第二功能
  84.                 if(password==6'b010101)                    //密码正确才能更改价格和参数                                
  85.                 case(state)
  86.                         4'd0:;
  87.                         4'd1:;
  88.                         4'd2:;
  89.                         4'd3:
  90.                                 begin                                       
  91.                                         if(add==1)                         //白天近程单价设置                                             
  92.                                                 if(price_day_short>=8'd99) price_day_short<=8'd0;
  93.                                                 else price_day_short<=price_day_short+8'd1;
  94.                                         if(sub==1)
  95.                                                 if(price_day_short<=8'd0) price_day_short<=8'd99;
  96.                                                 else price_day_short<=price_day_short-8'd1;
  97.                                 end
  98.                         4'd4:                                      //白天远程单价设置  
  99.                                 begin
  100.                                         if(add==1)                                                     
  101.                                                 if(price_day_long>=8'd99) price_day_long<=8'd0;
  102.                                                 else price_day_long<=price_day_long+8'd1;
  103.                                         if(sub==1)
  104.                                                 if(price_day_long<=8'd0) price_day_long<=8'd99;
  105.                                                 else price_day_long<=price_day_long-8'd1;       
  106.                                 end               
  107.                 endcase
  108.         end
  109. endmodule
复制代码
51hei.png

代码下载: czc.7z (7.27 MB, 下载次数: 8)

评分

参与人数 2黑币 +39 收起 理由
外星人11111 + 9
admin + 30 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表