5个回答
展开全部
这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的明暗。pwm的思路是:检查设置值是否不等于0,是则端口置1,程序开始加1计数,计数后检查计数值是否等于设置值,如果等于则跳转,不等则继续加一,如果到100或者计数值等于设置值则使端口置0,一个pwm周期结束,如此重复就可以了。pwm周期自己看实际情况定义。如果要控制电灯泡的话,频率不用太高,50hz可以了。关键是要做隔离,用光电隔离加双向可控硅来控制。
呵呵,声明两点:1 源程序网上应该有的,或者自己买本书就什么也有了。2 不鼓励直接给别人源程序,给你思路再动手就应该很好弄了,总看别人的,不自己思考永远都是别人的。
http://www.programsalon.com/downloads88/sourcecode/embed/detail337156.html
呵呵,声明两点:1 源程序网上应该有的,或者自己买本书就什么也有了。2 不鼓励直接给别人源程序,给你思路再动手就应该很好弄了,总看别人的,不自己思考永远都是别人的。
http://www.programsalon.com/downloads88/sourcecode/embed/detail337156.html
展开全部
使LED灯亮度发生变化可以采用PWM控制或者通断延时时间发生变化来实现,举例如下:
LED EQU P1.0
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R7,#1
LOOP1: ;渐亮
CLR P1.0
LCALL DELAY ;PWML
SETB P1.0
LCALL DELAY1 ;PWMH
INC R7
CJNE R7,#250,LOOP1
LOOP2: ;渐暗
CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY1
DJNZ R7,LOOP2
SJMP MAIN
DELAY:
MOV R2,#10
DJNZ R2,$
DJNZ R7,DELAY
RET
DELAY1:
MOV A,#250
SUBB A,R7
D1:
MOV R2,#10
DJNZ R2,$
DJNZ R7,D1
RET
END
LED EQU P1.0
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R7,#1
LOOP1: ;渐亮
CLR P1.0
LCALL DELAY ;PWML
SETB P1.0
LCALL DELAY1 ;PWMH
INC R7
CJNE R7,#250,LOOP1
LOOP2: ;渐暗
CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY1
DJNZ R7,LOOP2
SJMP MAIN
DELAY:
MOV R2,#10
DJNZ R2,$
DJNZ R7,DELAY
RET
DELAY1:
MOV A,#250
SUBB A,R7
D1:
MOV R2,#10
DJNZ R2,$
DJNZ R7,D1
RET
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
niushengqi - 经理 四级 你的说法介于概念介绍与具体程序实现之间,他看不懂。
我说两句:利用PWM,即输出50或者25Hz的脉冲串,这个脉冲串的脉冲宽度在不断变化,就是niushengqi说的占空比在不断变化。这就是PWM。从小到大不断变化,到最大值以后再返回,就能实现你的亮度渐变。
可是niushengqi,我们两个说的恐怕都不能满足要求,你得有源程序呀。呵呵。
niushengqi -大拇指给你
我说两句:利用PWM,即输出50或者25Hz的脉冲串,这个脉冲串的脉冲宽度在不断变化,就是niushengqi说的占空比在不断变化。这就是PWM。从小到大不断变化,到最大值以后再返回,就能实现你的亮度渐变。
可是niushengqi,我们两个说的恐怕都不能满足要求,你得有源程序呀。呵呵。
niushengqi -大拇指给你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
饿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一楼给出了软件思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询