-
基于单片机的加油站加油机显示控制系统设计
点击链接下载设计资料:https://download.csdn.net/download/m0_51061483/91956680 -
系统功能概述
现代加油站为了实现更高的自动化水平,需要具备精准的加油计量、实时的油号价格显示、便捷的人机交互以及完善的加油完成指示功能。本系统基于单片机设计,实现对加油站三种不同油号(92、95、98)的单价显示、实时加油量控制、费用计算、LED 加油完成提醒以及多功能按键输入操作。系统采用定时控制加油流速(0.1L/s),并根据油价自动计算加油费用,适用于中小型加油站终端控制设备的开发教学与产品原型验证。
整套系统功能逻辑清晰,包含加油总量设定、油号选择、实时加油数据展示、费用累计、加油完成提醒与清零复位等功能。系统硬件采用单片机作为核心,通过 LCD 显示屏对各种参数进行呈现,通过按键进行输入控制,并通过 LED 灯提示加油完成,整体结构紧凑、使用便捷,可扩展性强。
-
系统功能详细说明
3.1 油号价格显示功能
系统启动后,显示屏实时显示三种油号(92/95/98)的单价,如:
- 92号:7.3 元/L
- 95号:8.0 元/L
- 98号:8.9 元/L
油价可以写入程序或通过按键设定,便于系统更新油价策略。
3.2 加油总量设定功能(最大 500L)
用户可通过按键设定本次加油量,例如输入 45L。系统校验输入是否超出上限(500L),若超量则提示错误。设定完成后用户选择油号,随后可启动加油过程。
3.3 固定速率加油(0.1L/s)
系统通过定时器模拟加油过程,以每秒增加 0.1L 的速率累积加油量,并实时刷新:
- 已加油量(单位 L)
- 当前费用(= 单价 × 已加油量)
加油过程的真实感增强,同时加油速率可根据程序预设进行调整(例如演示时加速)。
3.4 加油完成 LED 闪烁提醒功能
当累计加油量达到设定总量时:
- 系统自动停止加油
- LED 指示灯开始闪烁
- 显示屏提示"加油完成"信息
提醒用户及时结束加油动作,避免操作延误。
3.5 系统复位/清零功能
系统含两个重要按键:
- 清零键:清除当前加油量与费用,不影响油号与价格设置
- 复位键:将系统恢复至初始状态(油量、价格、选择全部恢复默认)
此功能使设备能快速进入下一轮加油流程,减少等待时间。
3.6 操作逻辑简洁
用户只需简单的按键操作即可完成加油设置与执行:
输入加油量 → 选择油号 → 启动加油 → 等待完成 → 清零或复位智能控制让操作流程符合加油站工作人员的使用习惯。
-
电路设计
智能加油机系统硬件主要由单片机核心电路、按键输入模块、LCD 显示模块、LED 提示模块和定时加油控制模块组成。
4.1 单片机最小系统模块
单片机作为系统的核心处理器,负责:
- 加油量定时累加
- 油号价格读取与计算
- 显示屏数据刷新
- 按键输入判断
- LED 控制
系统使用定时器作为模拟加油的核心,通过每 1 秒进入中断累加 0.1L 实现加油逻辑。
4.2 按键输入模块
按键包括:
- 加油量增加/减少键
- 油号选择键
- 启动加油键
- 清零键
- 复位键
按键采用常规独立按键结构,由上拉电阻与 MCU 端口组成,软件进行消抖。
4.3 显示模块(LCD1602 或 OLED)
用于实时显示:
- 油号价格(92 / 95 / 98)
- 已加油数量
- 已产生费用
- 已设定加油总量
显示器采用 4 位并口或 I2C 通信连接,刷新数据延迟低、显示清晰。
4.4 LED 加油完成提示模块
一个 LED 指示加油完成状态:
- 平时关闭
- 加油完成后闪烁
控制方式:定时闪烁(如 200ms 周期闪烁)可通过定时器实现。
4.5 定时模拟加油模块
使用定时器(如 TIMER0)每 1 秒进入一次中断,加油量加 0.1L。
为演示方便,可将频率提高,如每 100ms 累加 0.1L。
-
程序设计
程序设计采用模块化结构,逻辑分明,包括初始化模块、按键处理模块、油号选择模块、加油流程模块、价格计算模块、LED 提示模块与显示刷新模块等。
5.1 主程序结构
cvoid main() { System_Init(); while(1) { Key_Scan(); Fuel_Process(); LED_Control(); Display_Update(); } }主循环不断调用各功能模块保持系统实时运行。
5.2 按键扫描模块
cvoid Key_Scan() { if(Key_AddPressed()) setVolume += 1; if(Key_SubPressed()) setVolume -= 1; if(setVolume > 500) setVolume = 500; if(setVolume < 0) setVolume = 0; if(Key_SelectOil()) { oilType++; if(oilType > 3) oilType = 1; } if(Key_Start()) start_flag = 1; if(Key_Clear()) clear_flag = 1; if(Key_Reset()) reset_flag = 1; }按键输入用于设置加油量与油号操作。
5.3 加油处理模块(核心)
cvoid Fuel_Process() { if(reset_flag) { totalFuel = 0; totalPrice = 0; setVolume = 0; start_flag = 0; reset_flag = 0; return; } if(clear_flag) { totalFuel = 0; totalPrice = 0; clear_flag = 0; } if(start_flag && totalFuel < setVolume) { if(timer_tick) { totalFuel += 0.1; totalPrice = totalFuel * oilPrice[oilType]; timer_tick = 0; } } if(totalFuel >= setVolume) { finish_flag = 1; } }通过 timer_tick 实现加油定时累加。
5.4 定时器中断模块(每秒加 0.1L)
cvoid Timer_ISR() interrupt 1 { timer_cnt++; if(timer_cnt >= 10) { // 如每100ms加一次 timer_cnt = 0; timer_tick = 1; } }可根据演示需求修改周期。
5.5 LED 控制模块
cvoid LED_Control() { if(finish_flag) { LED = ~LED; // 闪烁 } else { LED = 0; } }加油未完成 LED 熄灭,加油完成时闪烁。
5.6 LCD 显示模块
cvoid Display_Update() { LCD_Clear(); LCD_Print("92:"); LCD_PrintNum(oilPrice[1]); LCD_Print(" 95:"); LCD_PrintNum(oilPrice[2]); LCD_Print(" 98:"); LCD_PrintNum(oilPrice[3]); LCD_SetCursor(1,0); LCD_Print("Set:"); LCD_PrintNum(setVolume); LCD_Print(" L"); LCD_SetCursor(2,0); LCD_Print("Fuel:"); LCD_PrintFloat(totalFuel); LCD_SetCursor(3,0); LCD_Print("Price:"); LCD_PrintFloat(totalPrice); }
-
总结
本设计完成了一套基于单片机的加油站加油机显示控制系统,包含油号价格显示、加油量设定、定时加油、实时费用计算、LED 完成提醒及复位/清零功能。系统采用状态机控制流程,逻辑清晰、操作方便,并能够通过修改定时器周期实现演示加速。
系统可进一步扩展为实际加油机的控制终端,通过加入流量计、油泵驱动、通讯单元等模块,实现真实商业用途,也适合作为嵌入式课程设计与工程研发的典型实践案例。