#include <reg52.h> //头文件
unsigned int scale;//占空比控制变量
sbit out1=P3^3;
sbit key1=P3^5;
sbit key2=P3^4;
unsigned int n=50,key2f=0;//延时循环变量
unsigned int kf0=1;//按键用的标志位
unsigned int kt0=0;//按键用的标志位
unsigned int num=0;
void main(void){
TMOD=0x02;//定时器0,工作模式2(0000,0010),8位定时模式
TL0 = 0xF6; //设置定时初值 10微妙
TH0 = 0xF6; //设置定时重载值
TR0=1;//启动定时器
ET0=1;//允许定时器0中断
EA=1;//允许总中断
while(1){
if(key2==0){
num=0;
scale=50;
}
if(key1==0){//当按键1按下
if(kf0){//当标志位kf0=1的时候进行
kf0=0;//标志位kf0=0
kt0=1;//标志位kt0=0
num++;
}
}else{//当按键松开
if(kt0){//当标志位kt0=1的时候进行
kf0=1;//标志位kf0=1
kt0=0;//标志位kt0=0
}
}//按键1结束
scale=num+50;
}
}
void timer0() interrupt 1{//定时器0 0中断服务程序
static unsigned int tt;//tt用来保存当前时间在一秒中的比例位置
tt++;//每10微妙增加1
if(tt==300){//2.5毫秒的时钟周期
tt=0;//使tt=0,开始新的PWM周期
out1=0;
}
if(scale==tt){//按照当前占空比铁环输出为高电平
out1=1;
}
}
|