⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 8051中利用时钟控制实现PWM输出的简单模拟程序,用LED灯的亮度来模拟显示脉宽
💻 BAK
字号:
#include <reg52.h>
#include <stdio.h>

#define UCHAR unsigned char
#define UINT unsinged int

sbit IN0 = P3^2;
sbit IN1 = P3^3;
sbit PWM = P3^4;

UCHAR PWMRegH, PWMRegL;

void Delay(UCHAR i);
UCHAR keyscan(void);

void ld_int0 (void) interrupt 0 using 1
{
	EX0 = 0;
	Delay(10);

	PWM = 0;
	TR1 = 1;
	printf("enable");

	while(IN0 == 0)Delay(10);
	EX0 = 1;
}

void Tim0_int(void) interrupt 1 using 1
{
	PWM = 0;
	TR0 = 0;
}

void ld_int1 (void) interrupt 2 using 1
{
	EX1 = 0;
	Delay(10);

	PWM = 1;
	TR1 = 0;
	printf("disable");

	while(IN1 == 0)Delay(10);
	EX1 = 1;
}

void Tim1_int(void) interrupt 3 using 1
{
	PWM = 1;

	TH0 -= PWMRegH;
	TL0 -= PWMRegL;
	TR0 = 1;

	TH1 -= 1200/256;
	TL1 -= 1200%256;

}

main()
{
	UCHAR key, i = 1;
	
	SCON  = 0x50;		        
    TMOD |= 0x11;               
    TH1   -= 1200/256;
	TL1   -= 1200%256;               
	TH0   -= PWMRegH;
	TL0   -= PWMRegL;
    TR1   = 0;                  
	TR0   = 0;
	TI    = 1;                           
	IE    = 0x8F;

	RCAP2H = 0xFF;
	RCAP2L = 0xDB;
	T2CON = 0x34; 

	PWMRegH = 2;
	PWMRegL = 0;

	printf("start");

	for(;;)
	{
		key = keyscan();

		if(key == 0x11)
		{
			if(i <= 8)
			{
				i++;
				PWMRegH = (1200 - 125 * (8 - i))/256;
				PWMRegL = (1200 - 125 * (8 - i))%256;
				P1 = ~(0x01 << (i-1));
			} 
			key = 0;
		}

		if(key == 0x21)
		{
			if(i > 0)
			{
				i--;
				PWMRegH = (1200 - 125 * (8 - i))/256;
				PWMRegL = (1200 - 125 * (8 - i))%256; 
				P1 = ~(0x01 << (i-1));
			}
			key = 0;
		}
	}	
}

void Delay(UCHAR i)
{
	UCHAR j;
	for(i; i > 0; i--)
		for(j = 200; j > 0; j--);
}

UCHAR keyscan(void)
{
	UCHAR sccode,recode;
	P2 = 0xF0;
	if((P2 & 0xF0) != 0xF0)
	{
		Delay(3);
		if((P2 & 0xF0) != 0xF0)
		{
			sccode = 0xFE;
			while((sccode & 0x10) != 0)
			{
				P2 = sccode;
				if((P2 & 0xF0) != 0xF0)
				{
					recode = (P2 & 0xF0) | 0x0F;
					while((P2 & 0xF0) != 0xF0)Delay(3);
					return((~sccode) + (~recode));
				}
				else
					sccode = (sccode << 1) | 0x01;
			}
		}
	}

	return 0;
}

⌨️ 快捷键说明

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