请教一下,有没有人可以帮忙写一个51单片机用pwm模块控制灯的亮度变化的程序,谢谢了~急!!!

我需要写一个程序将单片机上的led的亮度可以随时间的变化而变化的程序,现在没有头绪,向各位大神求助

PWM 控制 LED 灯渐亮渐灭程序

/********************************************************************************
; PWM 控制 LED 灯渐亮渐灭程序 *
; 利用定时器控制产生占空比可变的 PWM 波 *
; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。 *
; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。 *
;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 *
;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)p3.7小喇叭报警 *
;********************************************************************************/
#include<reg51.h>
#include<intrins.h>
sbit K1 =P1^4 ; //PWM值增加键
sbit K2 =P1^5 ; //PWM值减少键
sbit BEEP =P3^7 ; //蜂鸣器
unsigned char PWM=0x7f ; //赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/
void main()
{
P1=0xff;
TMOD=0x21 ;
TH0=0xfc ; //1ms延时常数
TL0=0x66 ; //频率调节
TH1=PWM ; //脉宽调节
TL1=0 ;
EA=1;
ET0=1;
ET1=1;
TR0=1 ;
while(1)
{
do{
if(PWM!=0xff)
{PWM++ ;delayms(10);}
else Beep() ;
}
while(K1==0);

do{
if(PWM!=0x02)
{PWM-- ;delayms(10);}
else Beep() ;
}
while(K2==0);
}
}
/*********************************************************/
// 定时器0中断服务程序 (频率)
/*********************************************************/
void timer0() interrupt 1
{
TR1=0 ;
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
P0=0x00 ; //启动输出
}
/*********************************************************/
// 定时器1中断服务程序 (脉宽)
/*********************************************************/
void timer1() interrupt 3
{
TR1=0 ;
P0=0xff ; //结束输出
}
/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void Beep()
{
unsigned char i ;
for (i=0 ;i<100 ;i++)
{
delay(100) ;
BEEP=!BEEP ; //Beep取反
}
BEEP=1 ; //关闭蜂鸣器
delayms(100);
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delay(unsigned char t)
{
while(t--) ;
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
/*********************************************************/追问

这个适用于所有单片机么?型号不同有问题么?

追答

只要51单片机都行!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-18
说句实话,这种问题很简单,只要是关于51单片机内部功能操作,自己多看书,查看相关寄存器各个位的功能,不懂的可以问为什么或上百度百科和文库自己弄懂,这样做出来的程序才能自己掌握,以后不管出现用pwm控制电机转速或者其他自己都可以写的出来,不必找什么代做,更没必要花钱代做,你以后会发现这么简单的东西当初居然花钱请代做。
希望我的回答能帮助到你。追问

确实是想学,但是现在比较急用,所以想要找个程序先应付一下

追答

一个小时不到就能搞定的事,真的没必要

本回答被网友采纳

请教51单片机利用PWM控制灯的亮度的程序
第二,PWM_ON在程序中的作用很大,它会由0--->CYCLE--->0并且一直循环下去。可以把它看成一个有规律的变化的量。第三,每进入中断一次count++,满足条件count==PWM_ON或count==CYCLE时改变LED的当前状态。作用是给小灯亮或灭的时间不同。第四,LED的亮度与其通电时间有关,也可以说成是占空比。...

51单片机用汇编语言如何编写LED灯逐渐变亮在逐渐变暗啊
这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的...

...LED亮度增大一级。(PWM调光)请附上程序,谢谢
咱空比调节. 首先确定你的控制周期.比如1s,按照10级别可调,分为1-10 .1级的意思是 亮100ms 暗900ms,(1s也就是1000ms),也就是占空比为10%,2级,20%,亮200ms,暗800ms,...同理9级, 亮900ms,暗100ms;10级,亮1000ms,暗0ms;写出程序很简单,点亮程序 while(1){ LED = ON;_delay_ms( ...

求51单片机C51LED灯渐亮渐暗程序。。
\/\/ LED = 0表示灯亮,LED = 1表示灯灭,如果是反着的就把下面的0和1换一下,或者改下宏定义 \/\/ pwmcount初始值为三角波,因此后半段的意思是把100次分为pwmcount自减段和常0段 \/\/ 如果自减段和常0段LED都为0则常亮 \/\/ c为偶数时pwmcount逐渐增加,自减段增加,此时LED如果为0,常0段为1...

用51单片机c语言让八个led亮度自左向右逐渐变亮(pwm)
Count = Count + 1; \/\/ 加1的目的是针对LED0不亮 if(x <= Count) \/\/ <= 是针对LED0不亮 PORTA |= (1 << LEDx); \/\/51怎么改?。 P0 |= (1 << LEDx); PWM正占空 else if(x > Count) PORTA &= ~(1 << LEDx); \/\/51怎么改?。 P0 &= ~(1 <<...

51单片机如何用一个按键和一个定时器来模拟PWM控制一个LED灯的...
控制led灯的亮度等级.include "my51.h"include "timer0.h"define grading 20 \/\/亮度20级变化 sbit keyS3=P3^5; \/\/按键调整占空比,PWM_keyChange++ sbit keyS4=P3^6; \/\/ PWM_keyChange-- u8 PWM_keyChange=10; \/\/初值,按键调整在1~20之间变化 \/\/占空比 PWM_key...

求大神给写一个单片机的pwm程序,,,
在编写单片机PWM(脉冲宽度调制)程序时,以下是一个参考示例,它展示了如何配置和初始化8051微控制器的PCA(可编程计数器\/振荡器)模块以产生PWM信号。请注意,此代码是为特定硬件平台(如8051微控制器)和编译器(如Keil C)编写的,可能需要根据您的具体硬件和软件环境进行调整。```c include "reg51...

请问:单片机使用C语言编程,怎样控制led灯的完成亮度强弱变换?
\/\/模拟PWM输出控制灯的10个亮度级别 void main(void) \/\/ 主程序 { uint n;RCAP2H =0xF3; \/\/赋T2的预置值,溢出1次是1\/1200秒钟 RCAP2L =0x98;TR2=1; \/\/启动定时器 ET2=1; \/\/打开定时器2中断 EA=1; \/\/打开总中断 while(1) \/\/程序循环 { ;\/\/主程序在这里就不断自循环,实际应用...

求一单片机程序(用光敏电阻,PWM输出控制LED亮度)
MOV CCAP0H, A ; 写入PWM 控制 发光亮度 LJMP MIN10 RET ; \/ *** *** *** *** \/ A\/D 转换通道 测电压 ADC00: MOV ADC_DATA, #00H ORL ADC_CONTR, #08H ; 启动 AD 转换 MOV A, #10H ; 判断 AD 转换是否完成 ANL A, ADC_CONTR JZ ADC3...

用单片机怎样使二极管渐渐变亮
1、方法一:用单片机产生PWM波信号,输出后进行滤波,用它控制一个开关(MOS或者三极管),利用PWM波的占空比高低,形成不同的开闭时间,改变LED的亮度(开的时间越长,LED越亮)。2、方法二:用单片机输出,经过DA转换和单缓冲,形成电压,然后接一个射极输出器形成恒流源,通过恒流源的电流变化改变LED...

相似回答