PWM控制LED台灯程序带红外遥控

发布者:纸扇轻摇最新更新时间:2012-10-31 来源: 21ic 关键字:PWM控制  LED台灯  红外遥控 手机看文章 扫描二维码
随时随地手机看文章

;/*************************************************
;* 标题: LED台灯程序*
;* 文件: LED台灯PWM控制带红外遥控.asm *
;* 日期: 2008-12-18 *
;* 版本: 1.0*
;* 作者: *
;****************************************************
; LED台灯程序带有红外遥控功能*
; 利用定时器控制产生占空比可变的PWM 波*
; 按K1,PWM 值增加,则占空比减小,LED 灯渐暗。*
; 按K2,PWM 值减小,则占空比增加,LED 灯渐亮。*
; 我的5644遥控器上的0~9数字键对应10个亮度等级。*
; 当PWM 值增加到最大值或减小到最小值时,蜂鸣器将报警*
; 资源:p1 口,数码管。p3.4,p3.5 亮度控制按键P3.0 PWM端口,p3.1 蜂鸣器报警*
;*********************************************************
 LEVEL0 EQU 2FH; 亮度等级9
 LEVEL1 EQU 4FH; 亮度等级8
 LEVEL2 EQU 6FH; 亮度等级7
 LEVEL3 EQU 8FH; 亮度等级6
 LEVEL4 EQU 0AFH; 亮度等级5
 LEVEL5 EQU 0BFH; 亮度等级4
 LEVEL6 EQU 0CFH; 亮度等级3
 LEVEL7 EQU 0DFH; 亮度等级2
 LEVEL8 EQU 0EFH; 亮度等级1
 LEVEL9 EQU 0FFH; 亮度等级0

 PWM  EQU 7FH  ;PWM 赋初始值

 LED_RAM EQU 30H
 IRCOM  EQU 50H ;50H-53H IR 使用
 IR_NEW EQU 60H ;新的遥控代码值用

 LED_PORT EQU P1  ;数码管接口,共阴极
 PWM_OUT  EQU P3.0 ;PWM控制输出接口 
 INCKEY   EQU P3.5 ;K1,PWM 值增加键。
 DECKEY   EQU P3.4 ;K2,PWM 值减小键。
 BEEP   EQU P3.1 ;蜂鸣器
 IRIN  EQU P3.2 

;---------------------------
 ORG 0000H
 SJMP START
 ORG 0003H
 LJMP  REMOT ;IRF 
 ORG 000BH
 SJMP INTT0
 ORG 001BH
 SJMP INTT1
 ORG 0030H
;---------------------------
;主程序
;定时器0 工作在模式1,定时器1 工作在模式2。
;---------------------------

START: 
 MOV SP,#30H
 MOV TMOD,#21H
 MOV IP,#00001010B
 MOV TH1,PWM ;脉宽调节
 MOV TL1,#00H
 
 MOV TH0,#0FEH ;1ms 延时常数0FC
 MOV TL0,#0CH ;频率调节066

 SETB EA  ;开总中断
 SETB ET0  ;定时器0允许
 SETB ET1  ;定时器1允许
 SETB TR0  ;定时器0启动
 SETB EX0 ;外中断0打开
 SETB IT0  ;外中断0采用脉冲方式               ;
LOOP:
 LCALL DISPLAY
 MOV A,PWM ;
 JB INCKEY,LOOP1 ;增加键是否按下?
 CALL DELAY ;延时去抖动
 JB INCKEY,LOOP1
 CJNE A,#0FFH,PWMINC ;是否到最大值?
 CALL BEEP_BL ;是,蜂鸣器报警。
 SJMP LOOP

PWMINC: INC PWM ;调节脉宽(脉宽减小)
 SJMP LOOP

LOOP1:  JB DECKEY,LOOP2 ;减小键是否按下?
 CALL DELAY ;延时去抖动
 JB DECKEY,LOOP2
 CJNE A,#01H,PWMDEC ;是否到最小值?
 CALL BEEP_BL ;是,蜂鸣器报警。
 SJMP LOOP

PWMDEC: DEC PWM ;调节脉宽(脉宽增加)
LOOP2:  SJMP LOOP

;-----------------------------
;T0 中断服务子程序(频率)
;控制定时器1 中断
;-----------------------------
INTT0:  
 CLR TR1
 MOV TH0,#0FEH ;1ms 延时常数
 MOV TL0,#0CH ;频率调节
 MOV TH1,PWM
 SETB TR1
 CLR PWM_OUT ;启动输出
 RETI

;-----------------------------
;T1 中断服务子程序(脉宽)
;控制PWM 脉冲宽度
;-----------------------------
INTT1:  
 CLR TR1 ;脉宽调节结束
 SETB  PWM_OUT ;结束输出
 RETI

;-----------------------------
;************************有接收到遥控器信号*******
REMOT: 
 CLR EA
 PUSH  ACC
 PUSH  PSW
 SETB PSW.3 ;选择工作寄存器组1(SETB PSW.3)
 CLR PSW.4 ;                 (CLR  PSW.4)     
 MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待IR 信号出现
 JMP IR_SHOW1;I1;原值I1
I2: MOV R4,#20
I20: CALL DEL
 DJNZ R4,I20
 JB IRIN,IR_SHOW1;I1 ;确认IR 信号出现
I21: JB IRIN,I3 ;等IR 变为高电平
 CALL DEL
 JMP I21
I3: MOV R3,#0 ;8 位数清为0
LL: JNB IRIN,I4 ;等IR 变为低电平
 CALL DEL
 JMP LL
I4: JB IRIN,I5 ;等IR 变为高电平
 CALL DEL
 JMP I4
I5: MOV R2,#0 ;0.14ms 计数
L1: CALL DEL
 JB IRIN, N1 ;等IR 变为高电平;IR=0,检查R2 中的计数值
 MOV A,#8
 CLR C
 SUBB A,R2 ;判断高低位;IF C=0 BIT=0
 MOV A,@R0
 RRC A
 MOV @R0,A ;处理完一位
 INC R3
 CJNE R3,#8,LL ;需处理完8 位
 MOV R3,#0
 INC R0
 CJNE R0,#54H,LL ;收集到4 字节了
 JMP IR_SHOW
N1: INC R2
 CJNE R2,#30,L1 ;30--0.14ms 计数过长则时间到自动离开
 JMP IR_SHOW1[page]
;------------------------------------------------
IR_SHOW:                ;使用我的5644遥控器。
 MOV  A,50H      ;
 XRL  A,#40H     ;判断遥控器低8位地址是否正确(40H)
 JNZ  IR_SHOW1       ;
 MOV  A,51H
 XRL  A,#3FH     ;再判断遥控器高8位地址是否正确(3FH)
 JNZ  IR_SHOW1
 MOV A,52H
 CPL A ;    将52H 取反后和53H 比较
 CJNE A,53H,IR_SHOW1 ;如果不等表示接收数据发生错误,放弃。
 CALL D1; 解码成功则调用相应按键的处理程序+++++++++++++++++++++++++
; MOV A,IR_NEW
; CJNE A,#0FFH,IR_PWM;不是数字键则退出
; JMP IR_SHOW1
IR_PWM:
 MOV DPTR,#IR_ASC
 MOV A,IR_NEW
 MOVC A,@A+DPTR
 MOV PWM,A
IR_SHOW1:
 POP  PSW
 POP  ACC
 SETB IRIN
 SETB EA
 RETI

D1: MOV A,52H
 CJNE A,#01H,D2  ;是数字键1吗?
 MOV IR_NEW,#01H ;是则送数据01H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D2: CJNE A,#02H,D3  ;是数字键2吗?
 MOV IR_NEW,#02H ;是则送数据02H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D3: CJNE A,#03H,D4  ;是数字键3吗?
 MOV IR_NEW,#03H ;是则送数据03H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D4: CJNE A,#04H,D5  ;是数字键4吗?
 MOV IR_NEW,#04H ;是则送数据04H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D5: CJNE A,#05H,D6  ;是数字键5吗?
 MOV IR_NEW,#05H ;是则送数据05H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D6: CJNE A,#06H,D7  ;是数字键6吗?
 MOV IR_NEW,#06H ;是则送数据06H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D7: CJNE A,#07H,D8  ;是数字键7吗?
 MOV IR_NEW,#07H ;是则送数据07H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D8: CJNE A,#08H,D9  ;是数字键8吗?
 MOV IR_NEW,#08H ;是则送数据08H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D9: CJNE A,#09H,D0  ;是数字键9吗?
 MOV IR_NEW,#09H ;是则送数据09H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D0: CJNE A,#00H,D15 ;是数字键0吗?
 MOV IR_NEW,#00H ;是则送数据00H
 CALL BEEP_BL ;蜂鸣器报警。
 RET

D13:CJNE A,#11H,D14 ;是音量加键吗?实现速度加
 MOV IR_NEW,#0FFH;非数字键标示为0FFH
 INC PWM
 MOV A,PWM
 CJNE A,#00H,D13_OUT
 CALL BEEP_BL ;蜂鸣器报警。
 MOV PWM,#0FFH
D13_OUT:
 RET

D14:CJNE A,#10H,D15 ;是音量减键吗?实现速度减
 MOV IR_NEW,#0FFH;非数字键标示为0FFH
 DEC PWM
 MOV A,PWM
 CJNE A,#0FFH,D14_OUT ;9
 CALL BEEP_BL ;蜂鸣器报警。
 MOV PWM,#01H
D14_OUT:
 RET
D15:
; MOV IR_NEW,#0FFH;非数字键标示为0FFH
 RET
;**********************************************
;判断显示程序
;-------------
DISPLAY:
DIS0: 
 MOV A,PWM
 SUBB A,#LEVEL0
 JNC DIS1
 MOV LED_RAM,#9
 JMP LED_DISP
DIS1: 
 MOV A,PWM
 SUBB A,#LEVEL1
 JNC DIS2
 MOV LED_RAM,#8
 JMP LED_DISP
DIS2: 
 MOV A,PWM
 SUBB A,#LEVEL2
 JNC DIS3
 MOV LED_RAM,#7
 JMP LED_DISP
DIS3: 
 MOV A,PWM
 SUBB A,#LEVEL3
 JNC DIS4
 MOV LED_RAM,#6
 JMP LED_DISP
DIS4: 
 MOV A,PWM
 SUBB A,#LEVEL4
 JNC DIS5
 MOV LED_RAM,#5
 JMP LED_DISP
DIS5: 
 MOV A,PWM
 SUBB A,#LEVEL5
 JNC DIS6
 MOV LED_RAM,#4
 JMP LED_DISP
DIS6: 
 MOV A,PWM
 SUBB A,#LEVEL6
 JNC DIS7
 MOV LED_RAM,#3
 JMP LED_DISP
DIS7: 
 MOV A,PWM
 SUBB A,#LEVEL7
 JNC DIS8
 MOV LED_RAM,#2
 JMP LED_DISP
DIS8: 
 MOV A,PWM
 SUBB A,#LEVEL8
 JNC DIS9
 MOV LED_RAM,#1
 JMP LED_DISP

DIS9: 
 MOV A,PWM
 SUBB A,#LEVEL9
 JNC LED_DISP
 MOV LED_RAM,#0

LED_DISP:
 MOV DPTR,#LED_ASC
 MOV A,LED_RAM
 MOVC A,@A+DPTR
 MOV LED_PORT,A
 RET

LED_ASC:;共阴极LED代码
 DB 3FH,06H,5BH,4FH,66H;0~F代码
 DB 6DH,7DH,07H,7FH,6FH
 DB 77H,7CH,39H,5EH,79H
 DB 71H
 DB 0BFH,086H,0DBH,0CFH,0E6H;0.~9.(带小数点)代码
 DB 0EDH,0FDH,087H,0FFH,0EFH
 DB 039H;字符“C”
;****************************************************
IR_ASC:
 DB 0FAH,0EAH,0DAH,0CAH,0BAH
 DB 0A0H, 80H, 60H, 40H, 02H

;------------------------------------------------
  ; DELAY R5*0.14MS
DEL: MOV R5,#1 ;IR 解码使用
DEL0:  MOV R6,#2
DEL1:  MOV R7,#32
DEL2:  DJNZ R7,DEL2
  DJNZ R6,DEL1
  DJNZ R5,DEL0
  RET

;------------------------
;10ms 延时子程序,按键去抖动用
DELAY:
 MOV R5,#50
DELAY1:
 MOV R6,#100
 DJNZ R6,$
 DJNZ R5,DELAY1
 RET
 
;-----------------------------------------------
;蜂鸣器响一声子程序
BEEP_BL:MOV R6,#100
BL1:CALL BL2
 CPL BEEP
 DJNZ R6,BL1 
 MOV R5,#25
 CALL DELAY2
 RET 
BL2:MOV R7,#180
BL3:NOP
 DJNZ R7,BL3
 RET
DELAY2: MOV R6,#50 ;延时R5×10MS
BL4:  MOV R7,#100
BL5:  DJNZ R7,BL5
  DJNZ R6,BL4
  DJNZ R5,DELAY2
  RET
;---------------------------------------------------
 END

关键字:PWM控制  LED台灯  红外遥控 引用地址:PWM控制LED台灯程序带红外遥控

上一篇:DS18B20读取温度并显示-汇编程序
下一篇:Watchdog在Philips 8XC552系列单片机系统中的应用

推荐阅读最新更新时间:2024-03-16 13:11

CD4017构成的红外遥控开关电路图
  现在的建筑物照明线路大都采用暗线,如果采用4线制的电子开关去控制这些照明灯,还要另接电源而改造线路,且工程耗时费力,又影响美观。今天我们来设计并制作了一款单线红外遥控开关。它只有单根进线、单根出线,可以直接代换家居中非常普及的墙壁开关,安装和代换都很方便;还可以方便地实现遥控。   一、性能简介:   该电路的优点是:⑴电路采用电流互感器原理来升压,采用二极管限幅、稳压, 巧妙地解决了开关自身供电的难题;⑵ 适用范围广,随便用彩电或影碟机遥控器就能遥控 ⑶它还具有自身压降小、功耗小等优点。      二、工作原理:   如图所示,电路左边A B端为单线进出端,和负载串联后接在220V市电上。集成块CD4017 接成双稳
[电源管理]
CD4017构成的<font color='red'>红外遥控</font>开关电路图
卓芯微电子推出用于开关电源的PWM控制芯片
卓芯微电子推出的高集成度、高功能的脉宽调制(PWM)控制芯片 RCR6002 ,此芯片采用BiCMOS工艺,超低的启动电流(3.7μA)、工作电流( 3mA)和各项优化设计,让系统(含EMI策略)的性能在同类产品中的表现更胜一畴。芯片采用无铅工艺,符合RoHS等各项绝色环保要求。 RCR6002是一款高集成度、低功耗的电流模 PWM控制 芯片,适用于离线式AC-DC反激拓扑的小功率电源模块。芯片可以通过外接电阻改变PWM的工作频率;在轻载和无负载情况下,芯片自动进入PFM+CRM工作模式,可以有效地减小电源模块的待机功耗,达到绿色节能的目的。 RCR6002具有很低的启动电流,一个1.5M欧
[电源管理]
卓芯微电子推出用于开关电源的<font color='red'>PWM控制</font>芯片
【51】PWM控制使用
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值)。 通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%(周期T - 低电平T2 = 占空比) 2.怎么实现单片机的PWM引脚输出呢? (1)可以通过芯片的PWM引脚输出。这种自带有PWM输出功能的芯片在程序设计方面更加简便,同时数据更精确,输出更加平滑,一般来说芯片都会标注明PWM引脚。 (2)对于没有PWM引脚的芯片可以通过模拟输出PWM信号实现。其实PWM 信号其实就是一
[单片机]
【51】<font color='red'>PWM控制</font>使用
单片机用作通用红外遥控接收器的设计
    摘要: 简单介绍红外遥控接收系统原理,给出用8051作遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。包括解码系统配置及接口、软件设计要点及中断服务程序。     关键词: 8051 红外遥控 遥控码 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/
[应用]
基于SPWM控制全数字单相变频器的设计及实现
本文介绍了基于DSPTMS320LF2407A并使用SPWM控制技术的全数字单相变频器的设计及实现方法,最后给出了实验波形。 常见的AC/DC/AC变频器,是对输出部分进行变频、变压调节,而且在多种逆变控制技术中,应用最广泛的一种逆变控制技术是正弦脉宽调制(SPWM)技术。在变频调速系统中,应用DSP作为控制芯片以实现数字化控制,它既提高了系统可靠性,又使系统的控制精度高、实时性强、硬件简单、软件编程容易,是变频调速系统中最有发展前景的研究方向之一。 TMS320LF2407A芯片简介 TMS320LF2407A 是TI公司专为电机控制而设计的单片DSP控制器。它具有高性能的C2XLP内核,采用改进的哈佛结构,四级流水线操作,它不
[电源管理]
基于S<font color='red'>PWM控制</font>全数字单相变频器的设计及实现
最简单的51单片机红外遥控解码程序
  用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。下面介绍本人自编的红外遥控解码的C51程序,自认为是可能是史上最简的。此程序是针对uPD6121系列的遥控器的取码程序,解码值在Im 中,当IrOK=1时解码有效。   /* 51单片机红外遥控解码程序 */   /* 适用uPD6121系列 */   #include   #define DIGPORT P2   #define WORDPORT P0   unsigned char code LED_num ={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};   #define Imax
[单片机]
一种H型双极模式PWM控制的功率转换电路设计
低速特性是衡量转台伺服系统性能的重要指标之一。影响低速特性的因素有很多,其中最主要的是摩擦力矩和电机波动力矩的干扰。对摩擦力矩的干扰,可以采取摩擦力矩补偿方法,来降低摩擦力矩干扰对伺服系统低速特性的影响。但在工程中很难确定摩擦力矩的准确模型,因此这些补偿方法在工程中应用比较困难。 H型双极模式PWM控制提高转台伺服系统低速特性的作用十分显著,而且简单易行。H型双极模式PWM控制能够提高伺服系统的低速特性,是因为H型双极模式PWM控制的电动机电枢回路中始终流过一个交变的电流,这个电流可以使电动机发生高频颤动,有利于减小静摩擦,从而改善伺服系统的低速特性。但因其功率损耗大,H型双极模式PWM控制只适用于中、小功率的伺服系统。因
[电源管理]
小巧的uPD6121G红外遥控解码程序
网上有很多关于uPD6121G红外遥控解码程序,这些都写的很长,看起来发晕.下载下来也多数不能用.以下程序是通过检验的程序,只要编译后就可以正常使用.注意这里只是个解码程序!如果你想增加其它功能请自己添加.此程序没有解码UPD6121的重复码. 以下程序使用:12MHZ晶振,AT89C52 设计者:李国强 晶振:12MHz AT89S51 11年2月13号--2月24号编好 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit in=P3^2;//红外信号输入 sbit d0=P1^0;//测试用 sbit d1=P1^1;//测
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved