📄 main.c
字号:
#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);
UCHAR key, i = 1;
void ld_int0 (void) interrupt 0 using 1 //外部中断0响应函数
{
EX0 = 0;
Delay(10);
PWM = 0; //使能PWM
TR1 = 1;
printf("enable");
i = 1;
PWMRegH = (800 - 25 * 8 )/256;
PWMRegL = (800 - 25 * 8 )%256;
P1 = ~0x01;
while(IN0 == 0)Delay(10);
EX0 = 1;
}
void Tim0_int(void) interrupt 1 using 1 //定时器0响应函数
{
PWM = 0; //输出低电平
TR0 = 0; //定时器停止计数
}
void ld_int1 (void) interrupt 2 using 1 //外部中断1响应函数
{
EX1 = 0;
Delay(10);
PWM = 1; //关闭PWM
TR1 = 0;
printf("disable");
while(IN1 == 0)Delay(10);
EX1 = 1;
}
void Tim1_int(void) interrupt 3 using 1
{
PWM = 1; //PWM输出高电平
TH0 -= PWMRegH; //设定占空比
TL0 -= PWMRegL;
TR0 = 1;
TH1 -= 800/256;
TL1 -= 800%256;
}
main()
{
SCON = 0x50; //初始化寄存器
TMOD |= 0x11;
TH1 -= 800/256;
TL1 -= 800%256;
TH0 -= PWMRegH;
TL0 -= PWMRegL;
TR1 = 0;
TR0 = 0;
TI = 1;
IE = 0x8F;
RCAP2H = 0xFF; //设置串口波特率
RCAP2L = 0xDB; //9600 @ 11.0592
T2CON = 0x34;
PWMRegH = (800 - 25 * 8)/256;
PWMRegL = (800 - 25 * 8)%256;
printf("start");
for(;;)
{
key = keyscan(); //键扫描
if(key == 0x11) //根据键值调整占空比
{
if(i <= 8)
{
i++;
PWMRegH = (800 - 25 * (8 - i))/256;
PWMRegL = (800 - 25 * (8 - i))%256;
P1 = ~(0x01 << (i-1));
}
key = 0;
}
if(key == 0x21)
{
if(i > 0)
{
i--;
PWMRegH = (800 - 25 * (8 - i))/256;
PWMRegL = (800 - 25 * (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 + -