找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4875|回复: 4
打印 上一主题 下一主题
收起左侧

求呼吸灯(渐亮渐灭灯)汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:263611 发表于 2017-12-19 12:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 设计要求
以单片机为核心,设计一个呼吸灯控制器。利用P1.1口产生100Hz频率的方波,占空比可调,去驱动LED1。占空比越小,低电平时间比例越大,灯越亮。通过按键设置功能并实现。
2.采用LED显示功能编号。
按键K1. 功能编号加1;
按键K2. 功能编号减1;
上述两按键的操作只能在停止状态下有效。
按键K3.启动;
按键K4. 停止。
功能1:占空比0%
功能2:占空比25%
功能3:占空比50%
功能4:占空比75%
功能5:占空比100%
功能6:灯光从灭逐渐亮,用时2秒
功能7:灯光从亮逐渐灭,用时2秒
功能8:灯光从亮逐渐灭,用时2秒,之后从灭逐渐亮,用时2秒,如此反复。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2017-12-19 20:52 | 只看该作者
我这有一个:

;这是一个独立控制2路PWM的汇编程序:
;2个输出口以高电平为有效输出,也就是当输出100%时为高电平输出,输出0%时为低电平输出。
;改变10H-11H的值可以控制2路PWM的占空比变化,例如当10H中的值从0-255变化时候,P1.0输出从0%-100%变化
;频率是完全恒定的.这里PWM波周期为(r7)50usx200=10mS,约为100Hz,晶振用的是12MHz


zzz EQU P1.0         ;左路马达输出口
yyy EQU P1.1         ;右路马达输出口
ld1 EQU 10H          ;左路马达,即占空比的比值,0-255变化
ld2 EQU 11H          ;右路马达,即占空比的比值,0-255变化


    ORG 0000H
    LJMP mm
    ORG 000BH
    LJMP t000

;主程序段*****************************************************************************
org 0100h
mm:nop               ;复位程序
mov r4,#00h          ;延时1秒用
mov r5,#00h
mov r6,#03h
MOV SP,#5fH
MOV P1,#0FFH         ; P1置高,关闭全部灯
MOV 10h,#0fH         ;给左路马达赋值,0ffh为速度最快,00h为最慢
MOV 11h,#7fH         ;给右路马达赋值,0ffh为速度最快,00h为最慢
mov r0,10h           ;将左路的赋值送进左路缓存
mov r1,11h           ;将右路的赋值送进右路缓存
MOV TMOD,#02H        ;50us t0方式2自动重装
mov tcon,#00h
MOV TH0,#0cdH
MOV TL0,#0cdH
mov r7,#100          ;设定周期数据
SETB EA
SETB ET0
SETB TR0
mov 20h,#00h
m0:acall ys00        ;延时1秒
;acall pwm           ;改变速度子程序
sJMP m0

;定时器t0中断子程序<占用区0>********************************************************************
org 0180h
t000:                 ;50us t0中断子程序,用于实现三路PWM输出
PUSH ACC
PUSH PSW
clr psw.4             ;进入区0
clr psw.3
CJNE R7,#00H,AA       ;从这里是程序的精华,检测R7值是否为0,等于0则下一条重新赋值,否则跳到AA
MOV R7,#100           ;R7重新赋值
setb 07h              ;设置改变pwm数据标志位
MOV R0,10h            ;把左路速度值复制给R1
MOV R1,11h            ;把右路速度值复制给R2
AA:CJNE R0,#00H,BB    ;判断控制左路的值是否(或是否被减为0)为0,是则下一条关闭左路,否则跳到BB
SETB zzz              ;关闭左路
sJMP CC               ;跳到CC检测右路
BB:CLR zzz            ;打开(或继续打开)左路
DEC R0                ;R1数值减1
CC:CJNE R1,#00H,DD    ;这里控制右路与上面左路原理一样
SETB yyy
sJMP GG
DD:CLR yyy
DEC R1
GG: DEC R7            ;把R7的值减1,R7的初始值是#200h
POP PSW
POP ACC
RETI

;延时1秒时间子程序*****************************************************
org 0200h
ys00:push dph
push dpl
push acc
push psw
clr psw.4             ;进入区0
clr psw.3
ys1:djnz r4,ys1
ys2:djnz r5,ys1
ys3:djnz r6,ys1
mov r4,#00h
mov r5,#00h
mov r6,#03h
acall pwm
pop psw
pop acc
pop dpl
pop dph
ret

;pwmr改变pwm时间子程序*****************************************************
org 0280h
pwm:jb 07h,pwm1       ;一个完整周期到否?
ret                   ;未到则返回
pwm1:push acc
push psw
clr psw.4             ;进入区0
clr psw.3
mov a,10h
cjne a,#7fh,pwm3     ;未到最大则继续
mov 10h,#0fh
sjmp pwm4
pwm3:mov a,10h
add a,#10h
mov 10h,a
pwm4:mov a,11h
cjne a,#0fh,pwm6     ;未到最小则继续
mov 11h,#7fh
sjmp pwm11
pwm6:mov a,11h
subb a,#10h
mov 11h,a
pwm11:clr 07h
pop acc
pop psw
ret

END

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:32289 发表于 2017-12-19 21:04 | 只看该作者
网上找到的,你看看怎么样。 呼吸灯.rar (35.15 KB, 下载次数: 64)

应用实例1 呼吸灯.rar

35.15 KB, 下载次数: 46

呼吸灯

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:263611 发表于 2017-12-25 16:22 | 只看该作者
lxa0 发表于 2017-12-19 20:52
我这有一个:

;这是一个独立控制2路PWM的汇编程序:

这个用不了AT89S52
回复

使用道具 举报

5#
ID:74784 发表于 2017-12-31 13:07 | 只看该作者

修改一下用于AT89C2051/4051也可以的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表