本文主要是介绍基于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
这篇关于基于51单片机的简易电磁炉仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!