找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2394|回复: 0
打印 上一主题 下一主题
收起左侧

单片机自动售货机Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
源码
#include<reg52.h>
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^2;
int step=1;
int price=0;
int num=1;
int table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; //数码管显示0-9
unsigned char dispbuf[8]={0,0,0,0,0,0,0,};
int table2[]={0xe0,0xc0,0xa0,0x80,0x20};//控制退币
int total_money=0;//所选商品总价格
int back_money=0; //应退金额
int in_money=0;
/*
延时功能
*/
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//?调用时重新初始化??复位函数
void reset()
{
step=1;
price=0;
num=1;
total_money=0;
back_money=0;
in_money=0;
}
/*
选择商品函数?每个按键对应不同的物品价格及数量
*/
void choose()
{
if(key1==0)
{
delay(80);
if(key1==0)
{
num=1;
price=4;
}
}
else if(key2==0)
{
delay(80);
if(key2==0)
{
price=6;
num=1;
}
}
else if(key3==0)
{
delay(80);
if( key3==0)
{
price=10;
num=1;
}
}
}
/*
确定及取消
确定则执行?step加一?取消则执行step減一
*/
void apply()
{
if(key7==0)
{
delay(80);
if(key7==0)
{
step++;
}
}
else if(key8==0)
{
delay(80);
if(key8==0)
{
step--;
}
}
}
/*
计算所选商品所需金额
*/
void totalmoney()
{
total_money=price*num;
}
/*
//累加投入币值
*/
void inmoney()
{
if(key4==0)
{
delay(80);
if(key4==0)
in_money+=1;
}
else if(key5==0)
{
delay(80);
if(key5==0)
in_money+=5;
}
else if(key6==0)
{
delay(80);
if(key6==0)
in_money+=10;
}
}
/*
计算所需退还币值
*/
void backmoney()
{
back_money=in_money -total_money;
}
/*
显示函数?每一步显示不同的内容
*/
void display ()
{
if(step==1)
{
P2=0x04;
totalmoney();
P0 =table1[total_money%10];
delay(80);
P2 = 0x08;
P0 = table1[total_money/10];
delay(80);
}
else if(step==2)
{
P2=0x04;
inmoney();
P0=table1[in_money%10];
delay(80);
P2=0x08;
P0=table1[in_money/10];
delay(80);
}
else if(step==3)
{
P2=0xf0;
backmoney();
if(back_money<0)
{
step--;
P0=table1[in_money];
}
if(back_money>=0)
{
P2=0x04;
backmoney();
P0=table1[back_money%10];
delay(80);
P2=0x08;
P0=table1[back_money/10];
delay(80);
reset();
}
else
P0=table1[1];
}
}
/*
//主函数
*/
void main()
{
while(1)
{
choose();
apply();
display();
}
/*?if(back_money>=10)
{int?s=back_money/10;
for(s;s>0;s--?)
{led2=0;
delay(1000);
led2=1;
back_money-=10;
}
}
if(back_money<10&&back_money>0?)
{
led3=0;
delay(1000);
led3=1;
}
delay(1000);
{
led1=0;
delay(1000);
led1=1;
delay(1000);
led1=0;
delay(1000);
led1=1;
delay(1000);
led1=0;
delay(1000);
led1=1;
delay(1000);
}*/
}

Snipaste_2019-12-25_21-50-50.png (30.17 KB, 下载次数: 79)

Snipaste_2019-12-25_21-50-50.png

自动售货机.zip

38.73 KB, 下载次数: 32, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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