#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P1//8个发光二级管
sbit key1=P3^5
sbit key2=P3^6
#define LED_ON() LED=0x00 //所宽庆族有灯亮
#define LED_OFF() LED=0xff //灭
#define LED_PWM_MAX 99
#define LED_PWM_MIN 0
uchar LED_Direction=0 //LED方向控制 0:变亮 1:差源变暗
uchar LED_PWM_Counter=0 //LED占空比
uchar count=0 //中断计数
bit flag=0//按键扫描标志位
void main()
{
P3=0xff //做输入口先写1
TMOD=0x01
TH0=0xff
TL0=0x47
EA=1
ET0=1
TR0=1
while(1)
{
if(flag)
{
if(key1==0)
{
if((LED_PWM_Count<=LED_PWM_MAX)&&(LED_Direction==0))
{
LED_PWM_Count++
if(LED_PWM_Count>LED_PWM_MAX)
{
LED_PWM_Count=LED_PWM_MAX
LED_Direction=1
}
}
}
if(key2==0)
{
if((LED_PWM_Count>=LED_PWM_MIN)&&(LED_Direction==1))
{
LED_PWM_Count--
if(LED_PWM_count<LED_PWM_MIN)
{
LED_PWM_Count=LED_PWM_MIN
LED_Direction=0
}
}
}
if(LED_PWM_Count>0)
{
LED_ON()
LED_PWM_Count--
}
else
{
LED_OFF()
}
}
}
}
void timer0() interrupt 1
{
TH0=0xff
TL0=0x47
if(++count>慎弊=10)//2ms扫描一次按键(不行可以把时间改小)
{
count=0
flag=1
}
}
大概就这个思路,如果不行你自己改改吧!
#include<氏镇笑reg51.h>歼含#define uchar unsigned char
uchar pwm=50,cnt
sbit pluse=P1^0
sbit keyu=P1^4
sbit keyd=P1^5
void t0isr() interrupt 1
{
TH0=(65536-100)/256
TL0=(65536-100)%256
cnt++
if(pwm>0)
{
if(cnt>旅滑100)cnt=0
if(cnt<=pwm)pluse=1
else pluse=0
}
else pluse=0
}
main()
{
TMOD=0x01
TH0=(65536-100)/256
TL0=(65536-100)%256
TR0=1
ET0=1
EA=1
while(1)
{
if(keyu==0)
{
while(keyu==0)
pwm++
if(pwm>100)pwm=100
}
if(keyd==0)
{
while(keyd==0)
if(pwm>0)pwm--
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)