基于单片机无人售货机仿真及源程序

一、系统方案
1、本设计采用51单片机作为主控器。
2、商品选择,购买数量选择,投币,液晶1602显示。
3、电机模拟出货。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
void lcd_1602_init() //LCD1602初始化函数
{
lcd_en=0;
lcd_1602_write_com(0x38);
lcd_1602_write_com(0x0e);
lcd_1602_write_com(0x06);
lcd_1602_write_com(0x01);
}

2、液晶显示程序
void lcd_1602_write_com(uchar com) //写命令
{
rs=0;
rw=0;
P2=com;
lcd_1602_delay(5);
lcd_en=1;
lcd_1602_delay(5);
lcd_en=0;
}

void lcd_1602_write_data(uchar date) //写数据
{
rs=1;
rw=0;
P2=date;
lcd_1602_delay(5);
lcd_en=1;
lcd_1602_delay(5);
lcd_en=0;
}
3、按键程序
unsigned char key(void) //按键响应函数
{
unsigned char key,key1,key2;
P1=0XF0;
if((P1&0XF0)!=0XF0) //ked down
{
delay1(10); //延时去抖动
if((P1&0XF0)!=0XF0) //仍然有键按下
{
key1=P1&0XF0; //读入列线值
P1=0X0F;
key2=P1&0X0F;
key=key1|key2;
switch(key) //按键映射
{
case 0xee: e=0x00;break;
case 0xde: e=0x01;break;
case 0xbe: e=0x02;break;
case 0x7e: e=0x03; break;
case 0xed: e=0x04;break;
case 0xdd: e=0x05;break;
case 0xbd: e=0x06;break;
case 0x7d: e=0x07; break;
case 0xeb: e=0x08;break;
case 0xdb: e=0x09;break;
case 0xbb: e=0x0a;break;
case 0x7b: e=0x0b; break;
case 0xe7: e=0x0c;break;
case 0xd7: e=0x0d;break;
case 0xb7: e=0x0e;break;
case 0x77: e=0x0f; break;
}
while((P1&0X0F)!=0X0F);
delay1(10);
return 1;
}
}
return 0;
}

4、核心算法程序
/******************************************************/
/main
/
void main()
{
unsigned char ok = 0, water_type = -1, water_is_choose = 0;
char water_count = 0;
unsigned int flag = 0, money = 0, need_money;

lcd_1602_init();
again:
ok = 0; water_type = -1; water_count = 0; water_is_choose = 0;
flag = 0; money = 0; need_money = 0;
lcd1602_info_display(WAIT_SALE, 0, 0);
while(!ok) //choose the water and count
{
flag=key();
if(flag)
{
switch(e) //不同的按键进行不同的操作
{
case(0x00):
water_type++;
water_is_choose = 1;
if(water_type == 8)
{
water_type = 0;
}
P0 = water_change(0xff, water_type);
break;
case(0x01):
water_type–;
water_is_choose = 1;
if(water_type == -1 || water_type == -2)
{
water_type = 7;
}
P0 = water_change(0xff, water_type);
break;
case(0x02):
if(water_is_choose == 1)
{
water_count++;
if(water_count > water_total[water_type])
{
water_count = water_total[water_type];
}
}
break;
case(0x03):
if(water_is_choose == 1)
{
water_count–;
if(water_count < 0)
{
water_count = 0;
}
}
break;
case(0x0e): // 返回
goto again;
break;
case(0x0f): // 确认
if(water_is_choose == 1)
{
ok=1;
}
break;
default:
break;
}
lcd_1602_saling(water_type, water_count);
}
}

//choose ok: calculate the money //计算钱的总数
need_money = water_count * water_price[water_type];
lcd_1602_inputing(need_money, money);
ok = 0;
while(!ok) //get money
{
flag=key();
if(flag)
{
switch(e)
{
case(0x04):
money=money+1;
break;
case(0x05):
money=money+5;
break;
case(0x06):
money=money+10;
break;
case(0x07):
money=money+20;
break;
case(0x08):
money=money+50;
break;
case(0x09):
money=money+100;
break;
case(0x0e): //back
lcd1602_info_display(CHANGE, money, CANCLE);
P0 = 0xff;
delay1(10000);

goto again;
break;
default:
break;
}

//show money
lcd_1602_inputing(need_money, money); //投币系统

if(money>0)

{if(money >= need_money)
{
P3=0x7f;
ok=0; //break and show back money
//show back money
lcd1602_info_display(CHANGE, money-need_money, NO_DATA);
// out_water();
delay1(10000);
P0 = 0xff;
P3=0xff;
goto again;

		}
	}
}

}
}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/150535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tracert命令

前言&#xff1a;今天在阅读“Web性能权威指南”这本书的时候&#xff0c;发现 tracert 这个命令挺有意思的&#xff0c;在分析网络性能瓶颈的时候也能使用的到&#xff0c;在此就小记一笔以备后用。 1&#xff1a;作用 tracert 是一个简单的网络诊断工具&#xff0c;可以列出…

GPT 5也要来了?看看​OpenAI CEO Sam Altman最近的采访

OpenAI CEO Sam Altman 在接受金融时报采访中&#xff0c;透露了更多OpenAI的计划&#xff1a;他们正在寻求从微软获得更多资金支持&#xff0c;以构建真正的通用人工智能&#xff08;AGI&#xff09;。同时还透露了关于GPT 5的一些信息和公司AGI愿景目标&#xff01;他认为&am…

【MATLAB源码-第77期】基于matlab的OCDM系统在AWGN信道下理论误码率和实际误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 正交线性调频分频复用&#xff08;OCDM&#xff0c;Orthogonal Chirp Division Multiplexing&#xff09;是一种无线通信技术&#xff0c;它基于啁啾信号的原理。啁啾信号是一种频率随时间变化的信号&#xff0c;通常频率是线…

在线聊天系统,即时通讯系统

在线聊天&#xff0c;即时通讯系统 可以添加好友&#xff0c;在线聊天&#xff0c;添加群聊&#xff0c;群聊&#xff0c;发送各种类型的文件&#xff0c;文字&#xff0c;图片&#xff0c; 还有各种表情包&#xff0c;系统基于springboot和websocket网络通讯&#xff0c;类似于…

电脑桌面任务提醒便签选择哪一个好用?

伴随着科技现代化的发展&#xff0c;电脑成为大家日常办公及生活中必不可少的工具&#xff0c;如在日常办公中大家可以借助电脑上的任务提醒便签来合理规划自己的工作时间&#xff0c;督促任务的完成&#xff0c;提高工作的效率。 当前&#xff0c;支持在电脑上安装的任务提醒…

Centos8配置Zabbix5.0中文汉化

1.点击【Sign in】按钮&#xff0c;输入用户名和密码进入Zabbix的首页&#xff0c;结果如图。 2.点击左边导航栏的【User settings】链接&#xff0c;进入用户个性化设置界面&#xff0c;结果如图。 3.在搭建Zabbix的虚拟机上使用yum命令下载中文包。 yum install glibc-langpa…

自己动手写编译器:实现编译器工具链中的词法解析工具 Flex

我们在上一节以手动的方式实现了一个词法解析器的 c 语言源码。它主要包含若干部分&#xff0c;第一部分就是输入缓存系统&#xff0c;用于从磁盘文件或者控制台上获取要解析的字符串。第二部分是数据读入逻辑&#xff0c;它主要通过调用输入系统的接口获得要解析的字符串&…

时间序列预测-Transformer,Informer,Autoformer,FEDformer复现结果

实验环境硬件规格或软件版本号CPUInter Xeon E5-2678 v3 2.50GHzGPUNVIDIA TITAN X (Pascal)内存32.0GBPython3.7.3Pytorch1.2.0CUDA11.6 实验结果 可视化实验结果 见资源

邮件钓鱼-邮件来源伪造-SPF绕过-setoolkitgohishswaks钓鱼

0x00 SPF简介 SPF即发送方策略框架&#xff0c;某种邮件服务器会有自己的SPF策略设定&#xff0c;可以设定SPF为只允许某些主机发送邮件等&#xff0c;当设定后第三方就无法伪造成邮件服务器的管理员对用户下发邮件。 是否存在SPF的验证&#xff1a; linux下&#xff1a;dig…

沉浸式航天vr科普馆VR太空主题馆展示

科普教育从小做起&#xff0c;现在我们的很多地方小孩子游乐体验不单单只有草坪玩耍体验&#xff0c;还有很多科普知识的体验馆和游玩馆。虽然现在我们还不能真实的上太空或者潜入海底&#xff0c;但是这些现在已经可以逼真的展示在我们面前。通过一种虚拟现实技术手段。人们带…

MySQL是如何进行排序的,ORDER BY是如何执行的

MySQL 会给每个线程分配一块内存用于排序&#xff0c;称为 sort_buffer。 假设找出在杭州居住的人&#xff0c;按名字排序前1000个人&#xff08;假设city有索引&#xff0c;那么非常舒服&#xff0c;不用全表扫描&#xff09; select city,name,age from t where city杭州 or…

测试问题---APP闪退

APP闪退的原因有以下几种&#xff1a; APP本身的程序错误或bug&#xff0c;导致在运行过程中出现异常或崩溃&#xff0c;例如内存泄漏、空指针、死循环等。这种情况下&#xff0c;需要开发者对APP进行调试和修复&#xff0c;或者用户更新到最新版本的APP。 APP与系统或其他APP…

U盘变成了.lnk,怎么处理

没曾想客户电脑是是不是有个病毒啥的&#xff0c;把我的U盘直接干成了只有一个.lnk的一个快捷方式&#xff0c;后面百度找了很多方法&#xff0c;最后找到了一个非常实用的方法&#xff0c;后整理了一下交给大家 方法如下&#xff1a; 1.找到电脑U盘文件 2.搜索框中输入你之…

解决yum源无法安装nginx问题以及简单部署nginx

问题&#xff1a; 我们在使用centos7时&#xff0c;软件安装nginx时大概都会出现无法获取包的情况。 解决办法&#xff1a; 添加nginx的下载源到yum源中 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm如上图所示&a…

[SIGGRAPH2023-best]3D Gaussian Splatting for Real-Time Radiance Field Rendering

标题&#xff1a;3D Gaussian Splatting for Real-Time Radiance Field Rendering 链接&#xff1a;https://arxiv.org/pdf/2308.04079.pdf 本文提出了一种基于3D高斯体进行场景重建的方案&#xff0c;并提供了高效的渲染器实现。其重建精度&#xff0c;训练速度和推理速度均…

11111

#include <iostream> #include <vector> #include <queue> #include <algorithm>using namespace std;// 边的结构体 struct Edge {int src, dest, weight;// 按照权重进行排序bool operator<(const Edge& other) const {return weight < ot…

SDL2 播放音频(MP4)

1.简介 这里引入FFmpeg库&#xff0c;获取音频流数据&#xff0c;然后通过FFmpeg将视频流解码成pcm原始数据&#xff0c;再将pcm数据送入到SDL库中实现音频播放。 2.FFmpeg的操作流程 注册API&#xff1a;av_register_all()构建输入AVFormatContext上下文&#xff1a;avform…

在docker下安装suiteCRM

安装方法&#xff1a; docker-hub来源&#xff1a;https://hub.docker.com/r/bitnami/suitecrm curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/suitecrm/docker-compose.yml > docker-compose.yml//然后可以在docker-compose.yml文件里修…

人工智能赋能职业教育:技术融合引领教育变革

人工智能赋能职业教育&#xff1a;技术融合引领教育变革 摘要&#xff1a;本文探讨了人工智能技术在职业教育领域的应用及其带来的变革。通过分析人工智能在个性化教学、智能评估和教学资源优化等方面的技术优势&#xff0c;结合职业教育的现状和发展需求&#xff0c;提出了人…

Python爬虫进阶:提升爬虫效率

文章目录 一、单线程多任务异步协程二、线程池requests模块三、两个方法提升爬虫效率总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试…