51单片机用汇编语言如何编写LED灯逐渐变亮在逐渐变暗啊

想控制一个灯,让这个灯渐渐的变亮,然后渐渐变暗,最好是源程序啊

这个要用到软件的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个回答  推荐于2017-09-27
使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
第2个回答  2008-11-09
niushengqi - 经理 四级 你的说法介于概念介绍与具体程序实现之间,他看不懂。
我说两句:利用PWM,即输出50或者25Hz的脉冲串,这个脉冲串的脉冲宽度在不断变化,就是niushengqi说的占空比在不断变化。这就是PWM。从小到大不断变化,到最大值以后再返回,就能实现你的亮度渐变。
可是niushengqi,我们两个说的恐怕都不能满足要求,你得有源程序呀。呵呵。

niushengqi -大拇指给你
第3个回答  2008-11-06
饿
第4个回答  2008-11-06
一楼给出了软件思路
相似回答