基于51单片机微波炉简易控制仿真设计数码管显示proteus仿真+程序+设计报告+讲解视频)

基于51单片机微波炉简易控制仿真设计数码管显示

  • 1. 主要功能:
  • 2. 讲解视频:
  • 3. 仿真
  • 4. 程序代码
      • 延时函数
      • 定时器初始化
      • 定时器中断产生PWM
      • 显示函数
  • 5. 设计报告
  • 6. 设计资料内容清单&&下载链接
    • 资料下载链接:

基于51单片机微波炉简易控制仿真设计数码管显示( proteus仿真+程序+设计报告+讲解视频)

仿真图proteus7.8以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0071

1. 主要功能:

基于51单片机的微波炉控制proteus仿真设计

1.数码管显示微波炉火候级别和加热时间,通过PWM控制继电器完成火候控制;

2.可以通过按键控制火候级别,加热时间,开始和暂停加热;

3.加热倒计时结束后蜂鸣器提醒;

4.具有关门检测,没有关上门会数码管全亮,按键不能控制。加热过程打开门停止加热。

img

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

以下为本设计资料展示图:

2. 讲解视频:

讲解视频包含仿真运行讲解和代码讲解

3. 仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后数码管显示当前定时时间0,火候级别1,PWM脉宽没有输出。

img

通过按键设置加热时间,再点击开始按键即可计入加热倒计时,继电器受PWM控制吸合和打开。

img

门打开停止加热,按键控制失效,数码管全亮。

img

脉宽控制火候,四档脉宽输出如下图所示:

img

4. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

img

完整代码见资料下载链接

延时函数

/*--------------------
  延时函数,大致延时一毫秒
-------------------*/
void delay_ms(uint t)
{uint i;
	while(t--)	 
	{
		i=260;
		while(--i);		
	}	
}

定时器初始化

需要在定时器中断产生PWM和判断门打开了多久

	/*------------------------
   定时器初始化
--------------------------*/
void t_clr()
{
	EA=1;            //CPU开中断
	ET0=1;
	ET1=1;           //定时器 中断允许
	TMOD|=0X11;       //定时器T1、T0 定时   方式一

                    //12M 晶振,65536-15536=50000,50000us*20=1000000us=1s
	TH1=(65536-5000)/256;    //给定时器赋初值,定时50ms
	TL1=(65536-5000)%256;    
	TH0=(65536-50000)/256;    //给定时器赋初值,定时5ms
	TL0=(65536-50000)%256;    
}

定时器中断产生PWM

计数器内设置count定时自增,当count<pv_pwm时将P2.2口(Motor)置0,反之置1使其停止运行。当这一过程执行的速度很快,就会产生pwm方波。

img

/*------------------------
   定时器T0中断
--------------------------*/
void t0() interrupt 1
{	

	TH0=(65536-50000)/256;    //给定时器赋初值,定时50ms
	TL0=(65536-50000)%256;   
	if(P24){
		return;//门打开,停止倒计时
	}
    cyc0--;
	if (cyc0==0){
		cyc0=20;
		count_s--;  //时间-1S
		if(count_s==1){//蜂鸣器响1秒
			P23=1;//
		}
        if (count_s==0) { //如果定时已到
			 P22=1;      //停止加热,定时器终止
             TR0=0;
             TR1=0;
             P23=0;
        }else{
			 TR0=1;        
		}//继续定时
	}
    else
        TR0=1;
   	
}
/*------------------------
    定时器T1中断
--------------------------*/
void t1() interrupt 3
{
	TH1=(65536-5000)/256;    //给定时器赋初值,定时5ms
	TL1=(65536-5000)%256;
	if(P24){
		P22=1;
		return;//门打开,停止倒计时
	}
	timer1++;  
	if(timer1>100){ //PWM周期为100*0.5ms
		timer1=0;
	}
	if(timer1 < pv_pwm)	//改变pv_pwm这个值可以改变
	{
			P22=0;
	}else{
			P22=1;
	}
}

按键扫描部分代码

/*------------------------
    键盘扫描函数
--------------------------*/
void key_scan()
{
	if(!P10)
	{
	 delay_ms(70);
		if(!P10)
		count_s+=30;      //时间 +30秒
        if (count_s>=6000)
            count_s=0;
	}
	
    if(!P11)
	{
	 delay_ms(70);
		if(!P11)
		count_s+=60;       //时间 +1 分
        if (count_s>=6000)
            count_s=0;
	}

	if(!P12)
	{
	 delay_ms(70);
		if(!P12)
		count_s+=300;      //时间+5分
        if (count_s>=6000)
            count_s=0;
	}

	if(!P13)
	{
	 delay_ms(70);
		if(!P13)
		count_s=0;         //时间清零

	}

	if(!P14)
	{
	 delay_ms(80);
		if(!P14)
		{
		if (pv<3){
		 pv++;               //档位+1
		 if(pv==0)pv_pwm=10;
		 if(pv==1)pv_pwm=30;
		 if(pv==2)pv_pwm=60;
		 if(pv==3)pv_pwm=100;
		}

		}

	}

	if(!P15)
	{
	 delay_ms(80);
		if(!P15)
		{if (pv>0)
		 pv--;               //档位-1
		 if(pv==0)pv_pwm=10;
		 if(pv==1)pv_pwm=30;
		 if(pv==2)pv_pwm=60;
		 if(pv==3)pv_pwm=100;
		}

	}

	if(!P16)
	{
	 delay_ms(70);
		if(!P16)
		{
		 P22=1;
         if(count_s==0)          //如果没有设定时间,不加热,定时器不工作 
            {TR0=0;
            TR1=0;}
         else                    //如果已经设定时间,则开始计时,开始加热
		    {                   
            t_clr();
            TR0=1;
		    TR1=1;
            P22=0;}
		}

	}

	if(!P17)               //停止加热,终止定时器
	{
	 delay_ms(70);
		if(!P17)
		{P22=1;
		 P23=0;
		 TR0=0;
		 TR1=0;
		}
	}
}

显示函数

*------------------------
    时间变换为每个显示位
--------------------------*/
void time_converter()
{
	dis[0]=count_s/600;             //取分的十位
	dis[1]=(count_s/60)%10;         //取分的个位
                                 
	dis[2]=(count_s%60)/10;         //取秒的十位
	dis[3]=(count_s%60)%10;  		//取秒的个位
}
/*------------------------
   显示函数
--------------------------*/
void display()
{  
    
    uchar t;
	uchar k;
	for(k=0;k<4;k++)				//LED显示
	{
	 wei=1;
	 P0=codecho[k];
	 wei=0;		
     P0=0xff;
     delay_ms(1);
	 duan=1; 
     P0=codevalue[dis[k]];
	 duan=0;
     P0=0xff;
     delay_ms(1);     

	 }
	P3=codevalue[pv];                 //显示档位 */
	while(P24)					  //按键测试
	{
	for(t=0;t<4;t++)
	{
	wei=1;
	P0=codecho[t];
	wei=0;
    P0=0xff;
    delay_ms(1);
	duan=1;
    P0=codevalue[10];	
	duan=0;
    P0=0xff;
    delay_ms(1);
	P3=codevalue[10];
	}     
  }
} 

最终的主函数:

/*------------------------
     主函数
--------------------------*/
void main()
{	    
    uchar n=200;
    P23=0;
	t_clr();        //初始化	
	while(1)
	{
		key_scan();   //键盘扫描
		time_converter();//数值转换
		display();     //显示
	}
}

5. 设计报告

5977字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

img

随着科技的飞速进步,智能化家电已经深入到我们的日常生活中,极大地改变了我们的生活方式。智能化家电以其高效、便捷、人性化的特点,成为了现代家庭不可或缺的一部分。微波炉,作为家庭中常用的电器之一,其智能化控制具有广泛的应用前景和实际价值。

微波炉的智能化控制可以实现多种功能,如自动识别食物种类、自动设定烹饪时间、自动调节功率等,这些功能能够极大地提高烹饪的效率和便捷性。同时,通过智能化控制,微波炉还可以实现远程控制、语音控制等新颖的控制方式,让人们的生活更加智能化、现代化。

基于以上背景,本研究旨在设计一个基于51单片机的微波炉控制仿真系统。该系统将利用51单片机的高度集成性和可编程性,实现对微波炉的智能化控制。通过Proteus软件进行模拟测试,可以验证设计的可行性和正确性,从而缩短开发周期、降低开发成本。我们希望能够掌握相关的硬件和软件设计方法,为今后的学习和工作打下坚实的基础。同时,我们也希望能够通过这次设计,培养我们的团队协作能力和创新精神。

6. 设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

img

0、常见使用问题及解决方法–必读!!!!

1、程序

2、proteus仿真

3、功能要求

4、软硬件流程图

5、开题报告

6、设计报告

7、讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

资料下载链接:

https://docs.qq.com/doc/DS21na1J0dXRVUEVE

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

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

相关文章

xfce任务栏图标挤到一起了

分隔符&#xff0c;扩展&#xff0c;撑开任务栏

2024东南大学553复试真题及笔记

2023年真题知识点 引用指针 题目为 传递一个指针的引用做修改&#xff0c;输出指针指向的结果&#xff0c;但是指针被修改&#xff0c;结果就不一样了。 static 静态变量 类里面的静态成员变量&#xff0c;很简单的题目 for循环 看循环的内容输出字符串 try try catch捕…

Launch学习

参考博客&#xff1a; (1) 史上最全的launch的解析来啦&#xff0c;木有之一欧 1 ROS工作空间简介 2 元功能包 src目录下可以包含多个功能包&#xff0c;假设需要使用机器人导航模块&#xff0c;但是这个模块中包含着地图、定位、路径规划等不同的功能包&#xff0c;它们的逻…

Vue3和ElementPlus封装table组件

最近学习vue3.2并自己在写一个项目&#xff0c;然后发现好几个页面都是列表页&#xff0c;重复写table和column也是觉得累&#xff0c;学习的项目列表页不算多&#xff0c;要是公司项目就不一样了&#xff0c;所以就想着自己封装一个table组件&#xff0c;免去大量重复工作和co…

Acwing---1497. 树的遍历

树的遍历 1.题目2.基本思想3.代码实现 1.题目 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历&#xff0c;请你输出它的层序遍历。 输入格式 第一行包含整数 N&#xff0c;表示二叉树的节点数。 第二行包含 N个整数&#xff0c;表示二…

Javase-类与对象

文章目录 一 . 面向过程的初步认知二 . 如何创建一个类三 . 如何创建一个对象四 . this引用五 . 构造方法六 . 初始化 一 . 面向过程的初步认知 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对…

使用Android Native Hook技术解决VLC播放器闪退的问题

文章目录 1.概述2.问题描述3.问题分析4.问题解决5.总结 1.概述 在做公司的一个TOB的需求时&#xff0c;发现调起Unity提供的3D播放器播放网络在线视频时闪退了&#xff0c;然后就拉着相关部门的人一起分析问题&#xff0c;最后定位到是VLC里面用到的系统日志打印函数在部分的系…

Flask入门二(Flask的CBV、模版语法、请求和响应、session执行流程分析、Flask闪现、请求拓展、g对象)

文章目录 一、Flask的CBV1.CBV的写法2.CBV的执行流程3.endpoint 的使用4.CBV中得methods作用5.CBV加装饰器 二、模版语法1.渲染变量2.变量的循环3.逻辑判断 三、请求和响应四、session执行流程分析1.基本使用2.执行流程3.Django中session的执行流程 五、Flask闪现1.作用2.案例3…

【Unity】Node.js安装与配置环境

引言 我们在使用unity开发的时候&#xff0c;有时候会使用一些辅助工具。 Node.js就是开发中&#xff0c;经常会遇到的一款软件。 1.下载Node.js 下载地址&#xff1a;https://nodejs.org/en 2.安装Node.js ①点击直接点击Next下一步 ②把协议勾上&#xff0c;继续点击…

【论文精读】I-JEPA

摘要 计算机视觉中&#xff0c;常采用基于不变性和基于生成的方法进行自监督学习。对比学习&#xff08;CL&#xff09;是典型的基于不变性的方法&#xff0c;通过预训练方法优化编码器&#xff0c;使其能生成同一图像的两个或多个视图的相似嵌入&#xff0c;其中图像视图通常由…

格两例12345

osu/Lucky Roll gaming 周末osu有道题&#xff1a;lcg已知低位 def lcg(s, a, b, p):return (a * s b) % pp getPrime(floor(72.7)) a randrange(0, p) b randrange(0, p) seed randrange(0, p) print(f"{p }") print(f"{a }") print(f"{b …

关于python函数参数传递

参数传递 在 python 中&#xff0c;类型属于对象&#xff0c;对象有不同类型的区分&#xff0c;变量是没有类型的&#xff1a; 在下面的代码示例重&#xff0c;[1,2,3] 是 List 类型&#xff0c;“qayrup” 是 String 类型&#xff0c;而变量 a 是没有类型&#xff0c;它仅仅…

java找工作之Mybatis(入门及xml配置相关)

Mybatis 学习Mybatis就要学会查看官网&#xff0c;官网地址如下&#xff1a;<MyBatis中文网 > 1、简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取…

图形系统开发实战课程:进阶篇(上)——9.空间算法(一)

图形开发学院&#xff5c;GraphAnyWhere 课程名称&#xff1a;图形系统开发实战课程&#xff1a;进阶篇(上)课程章节&#xff1a;“图形样式”原文地址&#xff1a;https://www.graphanywhere.com/graph/advanced/2-9.html 第九章 空间算法&#xff08;一&#xff09; \quad 在…

计算机专业必看的十部电影

计算机专业必看的十部电影 1. 人工智能2. 黑客帝国3. 盗梦空间4. 社交网络5. Her6. 模仿游戏7. 斯诺登8. 头号玩家9. 暗网10. 网络迷踪 计算机专业必看的十部电影&#xff0c;就像一场精彩盛宴&#xff01; 《黑客帝国》让你穿越虚拟世界&#xff0c;感受高科技的魅力《模仿游戏…

小红关鸡(双指针)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 有nnn个鸡窝排成一排&a…

#WEB前端(CCS常用属性,补充span、div)

1.实验&#xff1a; 复合元素、行内元素、块内元素、行内块元素 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; span为行内元素&#xff1a;不可设置宽高&#xff0c;实际占用控件决定分布空间。 div为块内元素&#xff1a;占满整行&#xff0c;可以设置宽高 img为行内块元…

Windows 2012 设置 nginx 开机自启动(适用于windows2012/10)

Windows 2012 设置 nginx 开机自启动&#xff08;适用于windows2012/10&#xff09;https://www.cnblogs.com/xuegqcto/articles/7521483.html 在windows server 2012上安装nginx&#xff0c;同时配置开机自启动服务&#xff08;推荐使用“Windows Service Wrapper”工具&…

前后端分离项目服务器部署

文章目录 前言准备工作安装jdk1.8安装nginx安装库解压、编译nginx并安装nginx 命令测试nginx 安装mysql卸载mariadb用root用户登录系统&#xff0c;增加mysql用户和组准备数据目录初始化MySQL将mysql加入到服务中编辑配置文件&#xff0c;保存退出启动mysql配置环境变量设置开机…

20 个不同的 Python 函数实例

Python 是一种广泛使用的高级编程语言&#xff0c;其函数是 Python 编程中至关重要的概念之一。函数是一段可以重复使用的代码块&#xff0c;可以接收输入参数并返回输出结果。使用函数能够提高代码的可读性、可维护性和重用性。 基础知识 在 Python 中&#xff0c;函数使用关…
最新文章