oid main() {
 unsigned char ok = 0, watertype = -1, waterischoose = 0, watersit = -1;
 unsigned char add = 0, minus = 0;
 char watercount = 0;
 unsigned int flag = 0, money = 0, needmoney, starttime = 0; //添加 starttime 变量
 lcd1602init(); // LCD初始化

 again: ok = 0; watertype = -1; watercount = 0; waterischoose = -1; watersit = -1; add = 0; minus = 0; flag = 0; money = 0; needmoney = 0; starttime = 0; //初始化 starttime

 lcd1602_info_display(WAIT_SALE, 0, 0); // LCD显示 

 while(!ok) //choose the water and count 
{
    flag = key(); 
    if(flag) 
    {
        switch(e) //不同的按键进行不同的操作 
        {
            case(0x00): 
                water_type++; // 类型变量+1 
                water_is_choose = 1; 
                if(water_type == 8) // 如果类型变量等于8 
                {
                    water_type = 0; // 类型变量变为0 
                }
                P3 = water_change(0xff, water_type); // 显示价格指示 
                break; 
            case(0x04): 
                water_type--; 
                water_is_choose = 1; 
                if(water_type == -1 || water_type == -2) 
                {
                    water_type = 7; 
                }
                P3 = water_change(0xff, water_type);// 显示价格指示 
                break; 
            case(0x01): 
                if (!ok) 
                {
                    type1++; // 类型变量+1 
                    if(type1 == 4) // 如果类型变量等于4  继续下面的内容内容://省略部分代码

                    case(0x02): 
                    if (!ok) 
                    {
                        type1--; 
                        if(type1 == -1) 
                        {
                            type1 = 3; 
                        }
                        lcd1602_info_display(WAIT_SALE, type1, watercount); 
                    }
                    break; 

                    //省略部分代码

                }
                break; 
            case(0x03): 
                if (!ok) 
                {
                    watercount++; // 数量+1 
                    if(watercount == 10) // 如果数量等于10 
                    {
                        watercount = 0; // 数量变为0 
                    }
                    lcd1602_info_display(WAIT_SALE, type1, watercount); 
                }
                break; 
            case(0x05): 
                if (!ok) 
                {
                    watercount--; // 数量-1 
                    if(watercount == -1) // 如果数量小于0 
                    {
                        watercount = 9; // 数量变为9 
                    }
                    lcd1602_info_display(WAIT_SALE, type1, watercount); 
                }
                break; 
            case(0x06): 
                if(water_is_choose && watersit != -1) 
                {
                    ok = 1; // 开始售卖 
                    needmoney = water_price[water_type] * watercount; // 计算需支付金额 
                    lcd1602_info_display(NEED_MONEY, 0, needmoney); // LCD显示需支付金额 
                    starttime = get_time(); // 获取开始时间 
                }
                else 
                {
                    lcd1602_info_display(CHOOSE_WATER, 0, 0); // LCD显示请选择饮料 
                }
                break; 
            case(0x07): 
                if(water_is_choose && watersit != -1) 
                {
                    ok = 1; // 开始售卖 
                    needmoney = water_price[water_type] * watercount; // 计算需支付金额 
                    lcd1602_info_display(NEED_MONEY, 0, needmoney); // LCD显示需支付金额 
                    starttime = get_time(); // 获取开始时间 
                }
                else 
                {
                    lcd1602_info_display(CHOOSE_WATER, 0, 0); // LCD显示请选择饮料 
                }
                break; 
        }
        flag = 0; 
    }
}

//省略部分代码

代码功能解析

该代码实现了一个自动售货机的基本功能,包含以下步骤:

  1. 初始化:
    • 初始化LCD显示屏
    • 初始化变量,例如饮料类型、数量、支付金额等
  2. 选择饮料和数量:
    • 使用按键输入选择饮料类型
    • 使用按键输入选择饮料数量
    • LCD显示当前选择的饮料类型和数量
  3. 计算支付金额:
    • 根据饮料类型和数量计算总支付金额
    • LCD显示需要支付的金额
  4. 开始售卖:
    • 当用户支付了足够的金额后,自动售货机开始售卖饮料
    • 记录售卖时间

代码特点

  • 使用了C语言编写
  • 结合了LCD显示和按键输入功能
  • 实现了简单的自动售货机售卖流程

代码优化

  • 可以添加错误处理机制,例如当用户输入无效数据时
  • 可以添加更多功能,例如支付方式、售卖记录等
  • 可以优化代码结构,使其更加清晰易读

代码应用

  • 可以应用于小型自动售货机
  • 可以作为学习嵌入式编程的示例代码

总结

本代码是一个简单的自动售货机功能实现,可以作为学习嵌入式编程的入门示例。通过对该代码的学习,可以掌握C语言的基本语法、LCD显示、按键输入等知识。同时,也可以了解简单的自动售货机工作原理,为后续开发更复杂的自动售货机系统打下基础。

C语言自动售货机代码解析:选择饮料、数量、支付流程

原文地址: https://www.cveoy.top/t/topic/n61k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录