跪求一个 89C52单片机通过按键产生PWM信号来控制LED灯的不同亮度的程序,

跪求一个89C52单片机通过按键产生PWM信号来控制LED灯的不同亮度的程序,设置三个按键,一个控制开关(控制单片机是否有PWM信号输出)两个按键调节占空比(一个加,一个... 跪求一个 89C52单片机通过按键产生PWM信号来控制LED灯的不同亮度的程序,设置三个按键,一个控制开关(控制单片机是否有PWM信号输出)两个按键调节占空比(一个加,一个减,)
sbit K1 =P3^3 ; //增加键
sbit K2 =P3^2 ; //减少键
sbit K2 =P3^4 ; //开关键
sbit lamp =P2^0 ; //闪烁灯
展开
 我来答
狂春桖25
推荐于2018-03-05 · TA获得超过198个赞
知道小有建树答主
回答量:148
采纳率:0%
帮助的人:128万
展开全部
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lamp=P2^0;//输出
sbit k1=P3^3;//加键
sbit k2=P3^2;//减键
sbit k3=P3^4;//停止
uchar a=10;

void delay(uint x)//延时函数
{
uchar i;
while(x--)
for(i=0;i<110;i++);
}
void init()
{
TMOD=0X01;//晶振11.0592,定时器定时方式1
TH0=0XFF;//100us定时
TL0=0XA4;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//开定时器
}

void key()
{
if(!k1)
{
delay(10);
if(!k1)
{
a++;
if(a==99)
a=1;
}
}
// while(!k1);
if(!k2)
{
delay(10);
if(!k2)
{
a--;
if(a==1)
a=99;
}
}
// while(!k2);
if(!k3)
{
delay(10);
if(!k3)
{
TR0=~TR0;//开定时器
}
}
while(!k3);
}
void main()
{

init();
while(1)
{
key();

}
}

void timer0() interrupt 1 using 3
{
uchar count; /*中断次数计数器变量*/
TH0=0xFF; /*恢复定时器初始值*/
TL0=0xA4;
count++;
if (count>=100)
count=0;

if (count<=a) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
lamp=0;
else
lamp=1;

}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式