|
#include <reg51.h>
#include "delay.h"
sbit PWM=P2^1; //PWM输出
sbit key_s=P3^2;
unsigned char PWM_bz=100; //0-100 改变脉冲宽度
unsigned char PWMFF; //定义变量,计算周期
void Timer0Init(void); //声明定时计数器0
void EX0_Init(void); //声明外部中断0
void main()
{
EX0_Init(); //外部中断0初始化
Timer0Init(); //初始化定时计数器0
EA=1; //中断总开关
while(1)
{
}
}
void EX0_Init(void) //外部中断0设置
{
IT0=1;
EX0=1;
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
ET0=1;
//EA=1; //总中断
TR0 = 1; //定时器0开始计时
}
void EX0_isr(void) interrupt 0 //外部中断0入口
{
static unsigned char PWM_KEY; //定义脉宽调整变量
if(key_s==0) //按键判断
{
delayms(10);
if(key_s==0)
{
PWM_KEY++; //每进入一次中断加一
}while(key_s==0); //松手运行
}
switch(PWM_KEY)
{
case 1:PWM_bz=25;break;
case 2:PWM_bz=50;break;
case 3:PWM_bz=75;break;
case 4:PWM_bz=100;break;
case 5:PWM_bz=0;PWM_KEY=0;break; //清零
default:break;
}
}
void Timer0_isr(void) interrupt 1 //定时1ms
{
TR0 = 0;
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
PWMFF++;
if(PWMFF>=100)
{
PWMFF=0;
}
if(PWMFF<PWM_bz)
PWM=1;
else
PWM=0;
TR0 = 1;
}
|
评分
-
查看全部评分
|