基于51单片机自动售货机设计

一.硬件方案

本设计由STC系列单片机+12864显示+电源模块+按键模块+蜂鸣器报警模块等元件组成。
使用STC89C52(STC89C52数据手册)单片机设计,设有8个按键,3个按键模拟硬币(5元、1元、5角),另外5个按键模拟货物选择,一块12864显示屏;

二.设计功能

(1)开机启动显示货物价格列表,自动切换列表。
(2)可以选择①—⑤种货物(或更多)。
(3)按对应按键可选择该货物。
(4)选择后,提示要投进的金额,并显示投币有效时间30秒(可修改)。
(5)按键模拟投币,有5元、1元、5角。
(6)投币金额等于或大于所选货物的金额则购物成功。
(7)若投币不足,则30秒后自动退回。

三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:
在这里插入图片描述

(2)PCB图如下:
在这里插入图片描述

四.软件设计

主程序源码

//************************************
//主程序
//*************************************
main()
{
     TMOD=0x01;					//T0 工作在方式1 16位计数器
     TH0=(65536-50000)/256; 	//预先 设定定时器 初值,50毫秒
     TL0=(65536-50000)%256;
     EA=1;						//开启 总中断
     ET0=1;						//开启定时器 0 中断
     TR0=1;						//定时器 0 启动计数
	
	init_lcd();
	clrram_lcd();
	
	while(1)
	{   
     
      show();     //显示处理
	 key();       //输入处理
	}
}


void time0(void)  interrupt 1
{  
	TH0=(65536-50000)/256;		//重新设置定时器 初值,产生50MS定时中断
	TL0=(65536-50000)%256; 
	count++;					//50ms太短,闪烁频率太快
	 
	if(count==10)
	{ 
		if(n==0)
		{
			Time[0]=m/10+'0';
			
	    Time[1]=m%10+'0';
			Time[2]='\0';
    }
		if(n==1)
		{
			Time[0]=money/10+'0';
			Time[1]='.';
			Time[2]=money%10+'0';
			
		}
	  
		Time[3]='\0';
		Time[4]='\0';
	  
		count=0;
	 
	  if(m==0)m=30;	
		n++;
		if(n==2){m--;n=0;}
		
		nn++;
		if(nn==20){nn=0;}
	}

}

资料链接:https://pan.baidu.com/s/1uCF7vev3EMzO8WP691iWkA?pwd=krjl

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值