基于单片机的加油站加油机显示控制系统设计

  1. 基于单片机的加油站加油机显示控制系统设计
    点击链接下载设计资料:https://download.csdn.net/download/m0_51061483/91956680

  2. 系统功能概述

    现代加油站为了实现更高的自动化水平,需要具备精准的加油计量、实时的油号价格显示、便捷的人机交互以及完善的加油完成指示功能。本系统基于单片机设计,实现对加油站三种不同油号(92、95、98)的单价显示、实时加油量控制、费用计算、LED 加油完成提醒以及多功能按键输入操作。系统采用定时控制加油流速(0.1L/s),并根据油价自动计算加油费用,适用于中小型加油站终端控制设备的开发教学与产品原型验证。

    整套系统功能逻辑清晰,包含加油总量设定、油号选择、实时加油数据展示、费用累计、加油完成提醒与清零复位等功能。系统硬件采用单片机作为核心,通过 LCD 显示屏对各种参数进行呈现,通过按键进行输入控制,并通过 LED 灯提示加油完成,整体结构紧凑、使用便捷,可扩展性强。


  1. 系统功能详细说明

    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 操作逻辑简洁

    用户只需简单的按键操作即可完成加油设置与执行:

    复制代码
    输入加油量 → 选择油号 → 启动加油 → 等待完成 → 清零或复位

    智能控制让操作流程符合加油站工作人员的使用习惯。


  1. 电路设计

    智能加油机系统硬件主要由单片机核心电路、按键输入模块、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。


  1. 程序设计

    程序设计采用模块化结构,逻辑分明,包括初始化模块、按键处理模块、油号选择模块、加油流程模块、价格计算模块、LED 提示模块与显示刷新模块等。

    5.1 主程序结构

    c 复制代码
    void main() {
        System_Init();
        while(1) {
            Key_Scan();
            Fuel_Process();
            LED_Control();
            Display_Update();
        }
    }

    主循环不断调用各功能模块保持系统实时运行。

    5.2 按键扫描模块

    c 复制代码
    void 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 加油处理模块(核心)

    c 复制代码
    void 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)

    c 复制代码
    void Timer_ISR() interrupt 1 {
        timer_cnt++;
        if(timer_cnt >= 10) {   // 如每100ms加一次
            timer_cnt = 0;
            timer_tick = 1;
        }
    }

    可根据演示需求修改周期。

    5.5 LED 控制模块

    c 复制代码
    void LED_Control() {
        if(finish_flag) {
            LED = ~LED;  // 闪烁
        } else {
            LED = 0;
        }
    }

    加油未完成 LED 熄灭,加油完成时闪烁。

    5.6 LCD 显示模块

    c 复制代码
    void 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);
    }

  1. 总结

    本设计完成了一套基于单片机的加油站加油机显示控制系统,包含油号价格显示、加油量设定、定时加油、实时费用计算、LED 完成提醒及复位/清零功能。系统采用状态机控制流程,逻辑清晰、操作方便,并能够通过修改定时器周期实现演示加速。

    系统可进一步扩展为实际加油机的控制终端,通过加入流量计、油泵驱动、通讯单元等模块,实现真实商业用途,也适合作为嵌入式课程设计与工程研发的典型实践案例。

相关推荐
m0_690780521 小时前
串口通信,嵌入式系统
单片机·嵌入式硬件
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue在线考试管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
沧海一条狗2 小时前
SOEM与ESC无法通讯问题解决方案
单片机
霸王大陆2 小时前
《零基础学 PHP:从入门到实战》模块十一:成为 PHP 侦探,精通错误处理与调试实战大全-1
开发语言·笔记·php·课程设计
雾削木2 小时前
STM32 HAL 软件SPI任意GPIO控制st7735
stm32·单片机·嵌入式硬件
田甲2 小时前
【STM32】SHT30温湿度芯片驱动
stm32·单片机·嵌入式硬件
Molesidy2 小时前
【Embedded Development】对于MCU的片内内存里的分布区域结构详解
单片机·嵌入式硬件
计算机毕设MTU77572 小时前
999+套计算机毕业设计——基于HTML5+CSS的图书馆借阅管理系统的设计与实现(含源码+部署教程+数据库)
数据库·spring boot·课程设计·借阅管理系统·图书馆
国科安芯3 小时前
AS32A601型MCU芯片flash模块的擦除和编程
java·linux·前端·单片机·嵌入式硬件·fpga开发·安全性测试