stm32毕设 自动售货机设计与实现(源码+硬件+论文)

文章目录

  • 0 前言
  • 1 主要功能
  • 2 硬件设计(原理图)
  • 3 核心软件设计
  • 4 实现效果
  • 5 最后


0 前言


这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

毕业设计 单片机的自动售货机设计与实现(源码+硬件+论文)

学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

项目分享:

https://gitee.com/sinonfin/sharing

在这里插入图片描述

1 主要功能

主要功能: 一款自动售货机设计,能够实现自动售货功能,使用STC89C52RC单片机做控制,LCD12864做显示,按键做货物的选择,步进电机做出货口的控制,蜂鸣器做报警提示。当选择好货物后,会提示投币付款,付款成功后,蜂鸣器会响一声,并伴随着电机转动,自动出货。

  • 1.使用STC89C52RC单片机做主控制器件。

  • 2.使用LCD12864做显示屏,12864可显示汉字、数字、字母等。显示屏显示欢迎界面、货物信息等。

  • 3.使用按键做货物选择、投币、确实、返回等选择。

  • 4.使用步进电机做出货口的控制,出货完成后,步进电机自动归位。

  • 5.使用蜂鸣器做报警提示,当付款完成后,蜂鸣器会自动响一下,伴随电机转动,自动出货。

在这里插入图片描述

2 硬件设计(原理图)

在这里插入图片描述

PCB图

在这里插入图片描述

仿真效果

在这里插入图片描述

3 核心软件设计

在程序层次结构方面,当系统上电之后,应先对其进行相关初始化(如对每种饮料价格的设定和商品原始库存数量的设定等)。然后程序应当进入无限循环,再根据相应的触发条件进入相应的子程序,完成相应的状态下的工作。由于系统在多个状态间跳转切换,所以在程序编写时比较适合应用循环结构实现。自动售货机工作的整个流程图如图

在这里插入图片描述

关键代码

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%1000/100+'0';
            Time[0]=m/10+'0';
            Time[1]=m%10+'0';
            Time[2]='\0';
					 Time[3]='\0';
        }
        if(n==1)
        {
					if(money<=900)
					{Time[0]=money/100+'0';
            Time[1]=money%100/10+'0';
            Time[2]='.';
            Time[3]=money%10+'0';
					}
					else {money=900;
						Time[0]=money/100+'0';
            Time[1]=money%100/10+'0';
            Time[2]='.';
            Time[3]=money%10+'0';
					}
        }
		 Time[4]='\0';	
				Time[5]='\0';
        count=0;
        //if(m==0)m=30;
        n++;
        if(n==2 && m > 0)
        {
            if(m==6)beep=0;
            if(m==5)beep=1;
            m--;
            n=0;
        }
        nn++;
        if(nn==20)
        {
            nn=0;
        }
    }
}
4、液晶显示主程序模块
void show()
{
    if(nn<10)
    {
        gotoxy(1,0);
        print("按键选择货物:");
        mdelay(10);
        gotoxy(2,0);
        print("①矿泉水(1.5元)");
        mdelay(10);                 //扫描延时
        gotoxy(3,0);
        print("②红茶(3元)    ");
        mdelay(10); 	//扫描延时
        gotoxy(4,0);
        print("③绿茶(4元)");
        mdelay(10);                 //扫描延时
    }
    if(nn==10)clrram_lcd ();
    if(nn>=11)
    {
        gotoxy(1,0);
        print("④啤酒(5元)");
        mdelay(10) ;
        gotoxy(2,0);
        print("⑤红牛(6元)");
        mdelay(10);                 //扫描延时
        gotoxy(3,0);
        print("选定后投入硬币");
        mdelay(10); 	//扫描延时
    }
}

4 实现效果

在这里插入图片描述

在这里插入图片描述

5 最后

包含内容

在这里插入图片描述

项目分享:

https://gitee.com/sinonfin/sharing

你可能感兴趣的:(单片机)