ex.c

来自「对直流电机的控制设计」· C语言 代码 · 共 90 行

C
90
字号
#include "reg52.h"

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;

unsigned char PWMH;			//高电平脉冲的个数
unsigned char PWM;				//PWM周期
unsigned char COUNTER;	

void K1CHECK();
void K2CHECK();

void INTTO() interrupt 1 
{
	COUNTER++;				//计数值加1
	if((COUNTER!=PWMH)&&(COUNTER==PWM))		//如果等于高电平脉冲数
	{
		COUNTER=1;			//计数器复位
		P1_0=1;				//P1.0为高电平
	}
	else if(COUNTER==PWMH)
		P1_0=0;				//P1.0变为低电平
}

main()
{
	PWMH=0x02;	
	COUNTER=0x01;
	PWM=0x15;
	TMOD=0x02;			//定时器0在模式2下工作
	TL0=0x38;			//定时器每200us产生一次溢出
	TH0=0x38;			//自动重装的值
	ET0=1;				//使能定时器0中断
	EA=1;				//使能总中断
	TR0=1;				//开始计时

	while(1)
	{
		if(P1_1==0) 
			K1CHECK();//扫描KEY1,
		if(P1_2==0)
			K2CHECK();//扫描KEY2,如果按下KEY2,跳转到KEY2处理程序
	}				
}
void K1CHECK()
{
	while(P1_1==0);
	if(PWMH!=PWM)
	{
		PWMH++;
		if(PWMH==PWM)
		{
			TR0=0;
			P1_0=1;	
		}
		else
		{
			if(PWMH==0x02)
			{
				TR0=1;	
			}
		}
	}
}
void K2CHECK()
{
unsigned char TEMP;
	while(P1_2==0);
	if(PWMH!=0x01)
	{
		PWMH--;
		TEMP=PWM;
		TEMP--;
		if(PWMH==0x01)
		{
			TR0=0;
			P1_0=0;	
		}
		else
		{
			if(PWMH==TEMP)
			{
				TR0=1;	
			}
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?