仿真可以,实物通过增、减键控制占空比比例,按一次增加键变亮后,再按就不会变亮了,减少键也一样。经万用表检测连接发光二极管的那一侧电路的电流变化不大,按增加键从10升到12毫安左右就不变了。减少键也如此。求大神帮忙!
- //---------------------------------------------------------------------
- //程序功能:PWM控制LED增减光。
- //---------------------------------------------------------------------
- #include <reg52.h>
- sbitOUT=P2^7; //PWM输出
- sbitINC=P2^0; //增加亮度按钮K1接口
- sbitDEC=P2^1; //减小亮度按钮K2接口
- sbitRET=P2^2; //复位亮度按钮K3接口
- //--------------------------- 定时器0中断函数 ------------------------
- //频率
- voidTimer0(void) interrupt 1 //定时器0中断
- {
- OUT=1; //关LED
- TL0=0;
- TR1=1; //打开脉宽定时
- }
- //-------------------------- 定时器1中断函数 -------------------------
- //脉宽
- voidTimer1(void) interrupt 3 //定时器1中断
- {
- OUT=~OUT; //开LED
- TR1=0; //脉宽调节结束
- }
- //--------------------------- 消抖延时函数 ----------------------------
- delay()
- {
- unsigned int i;
- for(i=0;i<2000;i++);
- }
- //---------------------------- 定时器设置函数 ---------------------------
- INIT_TIMER()
- {
- TMOD=0x22; //设置T1、T0为模式2方式,自动重装
- TH1=0; //脉宽宽度
- TL1=0;
- TH0=0; //频率调节=0频率最低
- TL0=0;
- TR0=1; //启动T0定时
- EA=1; //允许总中断
- ET1=1; //允许定时器1中断
- ET0=1; //允许定时器0中断
- }
- //------------------------------- 主函数 -------------------------------
- main()
- {
-
- INIT_TIMER();
- TH1=120;
- // 无限循环
- while(1)
- {
- INC=1;DEC=1;
- if (INC==0)
- { delay();
- if (INC==0)
- {
- if (TH1<240) TH1+=10;
- }
- }
- else if (DEC==0)
- { delay();
- if (DEC==0)
- {
- if (TH1>10) TH1-=10;
- }
- }
- else if (RET==0)
- { delay();
- if (RET==0)
- {
- TH1=120;
- }
- }
-
- }
- }
复制代码
|