基于单片机PWM信号发生器系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:

通过网盘分享的文件:资料分享
链接: 百度网盘 请输入提取码 提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

两路输出PWM信号;
通过按钮调整频率、占空比和相位差
使用LCD1602显示频率、占空比和相位差


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

元件型号数量
单片机AT89C511
电容10uf1
电容30pf2
晶振12MHZ1
电阻10k1
按钮7
显示器LCD16021
排阻10k1

五、Keil c语言程序源代码(部分)

#include "reg51.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
sbit out1=P2^6;//输出
sbit out2=P2^7;
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
uint freq=10;//频率
uchar pwm=50,time=0;//占空比
uchar set0=0,set1=0;
uchar cha0=0,cha1=0;//相位差控制
uchar xiang=0;//相位差0-180
uchar disp1[]="f:0000Hz pwm:00%";
uchar disp2[]=" :000 "; //e0

//显示函数
void xian()
{
	disp1[2]=freq/1000+0x30;
	disp1[3]=freq%1000/100+0x30;
	disp1[4]=freq%100/10+0x30;
	disp1[5]=freq%10+0x30;
	disp1[13]=pwm/10+0x30;
	disp1[14]=pwm%10+0x30;
	disp2[2]=xiang/100+0x30;
	disp2[3]=xiang%100/10+0x30;
	disp2[4]=xiang%10+0x30;
	write_string(1,0,disp1);
	write_string(2,0,disp2);
}
//计算
void zhou()
{
	unsigned long i;
	i=1000000;
	i=i/freq;//计算周期
	i=i/100;//周期分成100份
	set0=(65536-i)/256;
	set1=(65536-i)%256;
	//计算相位差
	i=xiang;
	i=i*100/360;
	cha0=i;
	if(cha0+pwm>99)
	{
		cha1=cha0+pwm-99;
	}
	else
		cha1=cha0+pwm;
}

//主函数
void main()
{
	disp2[0]=0xe0;
	disp2[5]=0xdf;
	zhou();
	init_1602();//初始化
	xian();
	TMOD|=0X11;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		if(!k1)//频率加
		{
			if(freq<9999)
				freq++;
			zhou();
			xian();
			while(!k1);
		} 
		if(!k2)//频率减
		{
			if(freq>1)
				freq--;
			zhou();
			xian();
			while(!k2);
		}
		if(!k3)//占空比加
		{
			if(pwm<99)
				pwm++;
			zhou();
			xian();
			while(!k3);
		} 
		if(!k4)//占空比减
		{
			if(pwm>0)
				pwm--;
			zhou();
			xian();
			while(!k4);
		}
		if(!k5)//相位差加
		{
			if(xiang<180)
				xiang++;
			zhou();
			xian();
			while(!k5);
		} 
		if(!k6)//相位差减
		{
			if(xiang>0)
				xiang--;
			zhou();
			xian();
			while(!k6);
		}
	}
}
//定时器0中断
void Timer0() interrupt 1
{
	if(time<99)
		time++;
	else
		time=0;
	if(time<pwm)//通道1输出
		out1=1;
	else
		out1=0;
	if(time==cha0)//通道2输出
		out2=1;
	if(time==cha1)
		out2=0;
	TH0=set0;
	TL0=set1;
}

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值