#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int scale; //定义一个全局变量
unsigned int tt ;
sbit jia =P0^0; //加键位定义
sbit jian=P0^1; //减键位定义
sbit pwm=P0^7; //输出口定义,接LED
/**************************延时函数************************/
void delay (uint i)
{
unsigned int j;
while (i--)
{
for (j=0;j<100;j++)
;
}
}
/***************************定时器中断函数*******************/
void timer0 (void) interrupt 1 using 1
{
TL0=0x00; //低8位初始值
TH0=0X00; //高8位初始值
tt++; //产生一个中断加一次
if (tt==10) //时钟周期
{
tt=0; //开始新的周期
pwm=0; //低电平点亮LED
}
if (scale==tt)
{
pwm=1; //高电平熄灭LED
}
}
/******************************主函数**************************/
void main (void)
{
scale=1;
TMOD =0X01; //16位定时模式
TL0=0x00; //低8位初始值
TH0=0X00; //高8位初始值
EA=1; //总中断允许
ET0=1; //定时计数器中断允许
TR0=1; //开始计时
pwm=0; //点亮LED
while(1)
{
if (jia==0)
{
delay (5); //按键去抖动
if (jia==0) //确认按键按下
{ if (scale==9)
{scale=9;}
else
scale++;
}
}
while(jia^1) ;
if (jian==0)
{
delay (5); //按键去抖动
if (jian==0) //确认按键按下
{ if (scale==1)
{scale=1;}
else
scale--;
}
}
while(jian^1) ;
}
}
51单片机模拟PWM,PWM输出口接LED总是闪,不知道哪里问题,麻烦师傅给看一下 |