鱼C论坛

 找回密码
 立即注册
查看: 1403|回复: 3

自动售货程序

[复制链接]
发表于 2023-10-2 23:14:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
主要功能: 一款自动售货机设计,能够实现自动售货功能,使用STC89C52RC单片机做控制,LCD1602做显示,按键做货物的选择,步进电机做出货口的控制,直流发电机做报警提示。当选择好货物后,会提示投币付款,付款成功后,蜂鸣器会响一声,并伴随着电机转动,自动出货。
1.使用STC89C52RC单片机做主控制器件。
2.使用LCD1602做显示屏,1602可显示数字、字母等。显示屏显示欢迎界面、货物信息等。
3.使用按键做货物选择、投币、确实、返回等选择。

5.使用蜂鸣器做报警提示,当付款完成后,蜂鸣器会自动响一下,伴随电机转动,自动出货。(可根据自己想法自由开发程序)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-2 23:15:15 | 显示全部楼层
这是一个基于STC89C52RC单片机的自动售货程序。主要功能是实现自动售货功能,使用LCD1602显示器显示信息,按键选择货物,步进电机控制出货口,直流发电机做报警提示。具体实现步骤如下:

1.使用STC89C52RC单片机做主控制器件。STC89C52RC是一款高性能、低功耗的单片机,具有强大的处理能力和丰富的外设资源,非常适合用于控制型应用。

2.使用LCD1602做显示屏。LCD1602是一种常用的液晶显示器,能够显示数字、字母等信息。在本程序中,LCD1602用于显示欢迎界面、货物信息等。

3.使用按键做货物选择、投币、确定、返回等选择。按键是一种常用的输入设备,可以用于控制程序的运行流程。在本程序中,按键用于选择货物、投币、确定购买、返回等操作。

4.使用步进电机控制出货口。步进电机是一种常用的电机,能够精确控制转动角度。在本程序中,步进电机用于控制出货口的开合,实现自动出货功能。

5.使用蜂鸣器做报警提示。蜂鸣器是一种常用的声音输出设备,能够发出警报声。在本程序中,蜂鸣器用于提示付款完成,伴随电机转动,自动出货。

总体来说,这是一个基于STC89C52RC单片机的自动售货程序,能够实现自动售货功能,具有良好的用户体验和稳定性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-2 23:15:16 | 显示全部楼层
这个自动售货程序的设计非常不错,所有的硬件设备都能够很好地协同工作,以实现自动售货机的功能。以下是程序实现方面的一些建议:

1. 使用中断来处理按键输入。这样可以避免在轮询过程中影响程序的响应速度,提高程序的效率。

2. 考虑使用定时器来控制电机的运转时间。这样可以避免电机一直运转,或者因为误操作导致电机长时间停止运转,从而保护电机的寿命。

3. 在程序中加入货物库存管理功能。当某种货物售完时,自动售货机需要提示用户并暂停服务,以便进行补货。同时,在进行销售统计时,也需要考虑货物库存量的变化。

4. 加入退币功能。在用户投币之后,如果出现货物故障或者其他问题,自动售货机需要自动退还投币金额,以保护用户的权益。

5. 在代码中加入异常处理机制。当出现电机故障、传感器故障等情况时,程序需要及时检测并给出相应的提示,以保证自动售货机的正常运行。

希望这些建议能对您的自动售货机设计有所帮助。祝您的设计能够成功实现!
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-2 23:16:21 | 显示全部楼层
这是一个很有趣的自动售货程序设计!以下是一个简单的C语言程序框架,可以供你参考:
#include <reg52.h> //STC89C52RC专用头文件#define uchar unsigned char#define uint unsigned intsbit motor = P1^0; //定义步进电机控制引脚sbit buzzer = P1^1; //定义蜂鸣器控制引脚sbit coin_slot = P2^0; //定义投币口输入引脚sbit confirm_btn = P2^1; //定义确认按钮输入引脚sbit cancel_btn = P2^2; //定义取消按钮输入引脚sbit return_btn = P2^3; //定义返回按钮输入引脚sbit lcd_rs = P3^0; //定义LCD数据/命令选择引脚sbit lcd_rw = P3^1; //定义LCD读/写选择引脚sbit lcd_e = P3^2; //定义LCD使能引脚void delay(uint x); //延时函数void init_lcd(); //LCD初始化函数void display_string(uchar row, uchar col, uchar *str); //在指定位置显示字符串函数uchar read_keypad(); //读取按键函数void main(){    init_lcd();    display_string(0, 0, "Welcome!"); //欢迎界面    //货物信息数组    uchar goods[4][16] = {        "1. Coke $1 ",        "2. Pepsi $1",        "3. Sprite $1",        "4. Water $0.5"    };    //货物价格数组    float prices[4] = {1.0, 1.0, 1.0, 0.5};    uchar selected_good = 0; //选中的货物编号    float payment = 0.0; //已付款金额    float price = 0.0; //选中货物的价格    while (1)    {        //选择货物        display_string(0, 0, goods[selected_good]); //显示当前选中的货物信息        display_string(1, 0, "Insert coin: $"); //提示投币        while (1)        {            uchar key = read_keypad(); //读取按键            if (key == 'C') //按下取消按钮,退出选择            {                payment = 0.0;                break;            }            else if (key == 'R') //按下返回按钮,返回上一级            {                if (selected_good > 0)                    selected_good--;            }            else if (key == 'E') //按下确认按钮,进入付款环节            {                price = prices[selected_good]; //获取选中货物的价格                break;            }            else if (key >= '1' && key <= '4') //按下数字键,选择对应货物            {                selected_good = key - '1';            }        }        //付款        if (price > 0)        {            display_string(1, 14, " "); //清空原来的付款金额            while (payment < price) //如果没有达到商品价格,一直提示付款            {                uchar key = read_keypad();                if (key == 'C') //按下取消按钮,退出付款                {                    payment = 0.0;                    break;                }                else if (key >= '0' && key <= '9') //按下数字键,增加付款金额                {                    payment += key - '0';                    display_string(1, 14, "%2.1f", payment); //显示当前已付款金额                }            }            //付款成功,出货            if (payment >= price)            {                payment -= price; //计算找零金额                display_string(1, 14, "OK"); //显示付款成功                buzzer = 1; //发出报警提示音                motor = 1; //转动步进电机,开启出货口                delay(10000); //等待一段时间,让电机转动                motor = 0; //关闭出货口                buzzer = 0; //关闭报警提示音            }        }    }}//延时函数,以10us为单位void delay(uint x){    while (x--);}//LCD初始化函数void init_lcd(){        lcd_rw = 0; //切换到写入模式    lcd_e = 0; //置低使能引脚    delay(2000); //等待超过40ms    lcd_rs = 0; //选择命令寄存器    P0 = 0x38; //8位数据总线,2行显示,5x7点阵字符    lcd_e = 1; //置高使能引脚,上升沿时才有效    delay(5); //延时至少1us    lcd_e = 0; //置低使能引脚,下降沿时写入数据    delay(2000); //等待超过100us    P0 = 0x0c; //显示开,光标关,光标闪烁关    lcd_e = 1;    delay(5);    lcd_e = 0;    delay(2000);    P0 = 0x01; //清屏,且光标复位到起始位置    lcd_e = 1;    delay(5);    lcd_e = 0;    delay(2000);    P0 = 0x06; //设定文字加法,文字移动不移动屏幕    lcd_e = 1;    delay(5);    lcd_e = 0;    delay(2000);}//在指定位置显示字符串函数void display_string(uchar row, uchar col, uchar *str){    uchar address;    if (row == 0)        address = 0x80 + col;    else if (row == 1)        address = 0xc0 + col;    else        return;    lcd_rs = 0; //选择命令寄存器    lcd_rw = 0; //切换到写入模式    lcd_e = 0; //置低使能引脚    delay(1); //等待    P0 = address; //写入地址    lcd_e = 1;    delay(5);    lcd_e = 0;    delay(1);    lcd_rs = 1; //选择数据寄存器    lcd_rw = 0;    while (*str)    {        P0 = *str++;        lcd_e = 1;        delay(5);        lcd_e = 0;        delay(1);    }}//读取按键函数uchar read_keypad(){    uchar key = ' '; //默认返回空格    if (coin_slot == 0) //检测投币口输入引脚    {        delay(1000); //去抖        if (coin_slot == 0)            key = 'I'; //插入硬币    }    else if (confirm_btn == 0) //检测确认按钮输入引脚    {        delay(1000); //去抖        if (confirm_btn == 0)            key = 'E'; //确认    }    else if (cancel_btn == 0) //检测取消按钮输入引脚    {        delay(1000); //去抖        if (cancel_btn == 0)            key = 'C'; //取消    }    else if (return_btn == 0) //检测返回按钮输入引脚    {        delay(1000); //去抖        if (return_btn == 0)            key = 'R'; //返回    }    else //按键未被按下    {        key = ' '; //返回空格    }    return key;}
注意:以上代码是一个简化的程序框架,具体实现可能需要进行更多的优化和修改。另外,程序中用到了很多简单的IO控制、LCD显示和延时等操作,如果对这些操作不熟悉,建议先学习相关知识。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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