基于51单片机的简易电磁炉仿真

仿真图:

在这里插入图片描述

芯片/模块的特点:

AT89C52简介:
AT89C52是一款经典的8位单片机,是意法半导体(STMicroelectronics)公司生产的一系列单片机之一。它基于8051内核,并具有许多与其兼容的特性。

AT89C52的主要特点如下:

内部存储器:AT89C52具有8KB的闪存(Flash)存储器,可用于存储用户程序和数据。这些存储器的内容可以通过编程器进行编程和擦除。

RAM存储器:AT89C52配备了256字节的随机存取存储器(RAM),用于暂存数据和程序的变量。

外部扩展性:AT89C52支持多种外部扩展设备的连接,包括外部存储器(如RAM、EEPROM)和外设(如ADC、LCD、UART等),通过外部硬件连接,可以扩展单片机的功能和应用。

通用I/O引脚:AT89C52拥有32个可编程的通用输入/输出引脚,可用于连接外部设备和与其他芯片进行通信。

定时器/计数器:AT89C52内置了3个16位定时器/计数器和一个可编程的串行定时器/计数器。这些计时器/计数器可用于实现定时功能、生成脉冲信号、测量时间间隔等。0

串行通信:AT89C52支持串行通信接口,包括UART(串行异步通信)和SPI(串行外设接口),便于与其他设备进行数据通信和交互。

低功耗模式:AT89C52具有多种低功耗模式,如空闲模式和电源下模式,在不需要执行任务的时候可以将CPU进入低功耗状态以节省能量。

宽电源电压范围:AT89C52的工作电压范围通常为4.0V至5.5V,可以满足大多数应用需求。

主程序:


#include <REGX52.H>

#define u8 unsigned char //全局变量u8的值在<0-255>
#define u16 unsigned int //全局变量u16的值在<0-65535>

//定义IO口
sbit pwm=P3^6;  //声明一个输出口,用于控制线圈的打开和关断
sbit P_dec=P1^5;   //功率-
sbit P_inc=P1^6;   //功率+
sbit STOP=P1^7;//暂停


//数码管段选
u8 code ab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x08,0x80,0x90};
//数码管位选
u8 code ac[]={0x08,0x04,0x02,0x01,0x0f};

u8 statu=0;//工作状态 statu=0:正常工作;statu=1,暂停状态
u8 a,n,x;//a:用于定时,n:档位,x:占空比

//毫秒延时函数
void delay_ms(u16 nms)
{
  u8 i=0;
  while(nms--)
  for(;i<112;i++);  
}

//数码管显示4位数字
void Display(u16 num)
{
 u8 i=0,d=0;
 for(i=0;i<4;i++)
 {
  d=num%10;
  num-=d;
  num/=10;
  P2=ac[i];//位选
  P0=ab[d];//短选
 }
}
//主函数
void main() 
{
  
  TMOD=0x01;//选择定时器模式。
  TH0=(65536-100)/256;//给定时器高8位给个初值。
  TL0=(65536-100)%256;//给低8位个初值。
  EA=1;//开总中断。
  ET0=1;//开定时器0中断。
  TR0=1;//启动定时器0。  
  n=1;//初始化档位。
  Display(8888);//初始显示。
  delay_ms(1000);

  while(1)
  {

	//是否暂停
  		if(STOP==0)//有按键按下
  		{
  		 delay_ms(10);//消抖延时
  		 if(STOP==0)
		 while(!STOP);//等待松开按键
		 statu=!statu;//状态切换
		}

  	 //档位选择
 	 if(statu==0)//正常运行状态
 	 {
 	 	if(P_dec==0||P_inc==0)//有按键按下
 	 	{
 	 	 delay_ms(10);//消抖延时
 	 	 if(P_dec==0)	 
		    {
			 while(!P_dec);//等待松开按键
			 if(n>1)
			 n--;//档位减
			}
  		 else if(P_inc==0)	 
		    {
			 while(!P_inc);
			 if(n<5)
			 n++;//档位加
			}
  		}

		//输出控制及显示
		switch(n)
		{
		 case 0:{x=0;Display(8888);}break;
		 case 1:{x=20;Display(300);}break;
		 case 2:{x=40;Display(600);}break;
		 case 3:{x=60;Display(1200);}break;
		 case 4:{x=80;Display(1500);}break;
		 case 5:{x=100;Display(1800);}break;
		 default:break;	
		}
 	}
 	else//暂停状态
	  Display(8888);
  }
}

void timer0() interrupt 1  //定时器中断服务
{
  TH0=(65536-100)/256; //重新初值
  TL0=(65536-100)%256;
  a++;
  if(a>=100)
  a=0;

}

设计文件:

链接:https://pan.baidu.com/s/1A0kwA72cz5nQzjlHd-W2Pw?pwd=bbyk

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值