字号:    

PWM控制LED灯渐亮渐灭程序

 

tony 发表于: 2007-08-30 15:00 来源: 电子开发社区门户

; PWM 控制 LED 灯渐亮渐灭程序

; 适用 ME300B 开发系统

; 晶振为11.0592M

; 利用定时器控制产生占空比可变的 PWM 波

; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。

; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。

;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

;----------------------------

         PWM   EQU  7FH            WM赋初始值

         OUT   EQU  P0             ;8个LED灯的接口

         INCKEY EQU  P3.4          ;K1,PWM值增加键。

         DECKEY EQU  P3.5          ;K2,PWM值减小键。

         BEEP   EQU  P3.7

;----------------------------

         ORG   0000H

         SJMP  START

         ORG   000BH

         SJMP  INTT0

         ORG   001BH

         SJMP  INTT1

         ORG   0030H

;----------------------------

;主程序

;定时器0工作在模式1,定时器1工作在模式2。

;----------------------------

START:

          MOV  SP,#30H

          MOV TMOD,#21H

         ; MOV TH1,PWM                ;脉宽调节

         ; MOV TL1,#02H

                  MOV TH1,#0FCH

                  MOV TH1,#066H

          ;MOV TH0,#0FCH             ;1ms延时常数

          ;MOV TL0,#066H             ;频率调节

                  MOV TH0,PWM

                  MOV TL0,#02H

          SETB EA

          SETB ET0

          SETB ET1

          SETB TR0

LOOP:   

          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,#00H,PWMDEC        ;是否到最小值?

          CALL  BEEP_BL                    ;是,蜂鸣器报警。

          SJMP LOOP

PWMDEC:

          DEC PWM                             ;调节脉宽(脉宽增加)

LOOP2:    SJMP LOOP

;------------------------------

;T0中断服务子程序   (频率)

;控制定时器1中断

;------------------------------

INTT0:

          CLR  TR1

          MOV TH0,#0FCH             ;1ms延时常数

          MOV TL0,#066H              ;频率调节

          MOV  TH1,PWM

          SETB TR1

          MOV  OUT,#00H             ;启动输出

          RETI

;------------------------------

;T1中断服务子程序      (脉宽)

;控制PWM脉冲宽度

;------------------------------

INTT1:

          CLR  TR1                   ;脉宽调节结束

          MOV  OUT,#0FFH      ;结束输出

          RETI

;------------------------------

;10ms延时子程序

;------------------------------

DELAY:

          MOV R6,#50

DELAY1:

          MOV R7,#100

          DJNZ R7,$

          DJNZ R6,DELAY1

          RET

;------------------------------

;蜂鸣器响一声子程序

;------------------------------

BEEP_BL:

           MOV   R6,#200

  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:                    ;延时R5×10MS

              MOV   R6,#50

  BL4:     MOV   R7,#100

  BL5:     DJNZ  R7,BL5

              DJNZ  R6,BL4

              DJNZ  R5,DELAY2

              RET

;------------------------------

             END

分类:默认分类
?次阅读
 2007-08-30 14:55