⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liushuideng.asm

📁 pmw的有一个例子: PWM 控制 LED 灯渐亮渐灭程序 * 利用定时器控制产生占空比可变的 PWM 波 * 按K1
💻 ASM
字号:
pmw的有一个例子:

; PWM 控制 LED 灯渐亮渐灭程序                                                   *
; 利用定时器控制产生占空比可变的 PWM 波                                         *
; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。                                    *
; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。                                    *
;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警                              *
;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)p3.7小喇叭报警          *

;----------------------------
         PWM   EQU  7FH            ;PWM赋初始值
         OUT   EQU  P0             ;8个LED灯的接口
         INCKEY EQU  P1.4          ;K1,PWM值增加键。
         DECKEY EQU  P1.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,#00H
          MOV TH0,#0FCH             ;1ms延时常数
          MOV TL0,#066H             ;频率调节
          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,#02H,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,#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:                      ;延时R5×10MS
           MOV   R6,#50
  BL4:     MOV   R7,#100
  BL5:     DJNZ  R7,BL5
           DJNZ  R6,BL4
           DJNZ  R5,DELAY2
           RET
;---------------------------------------------------
           END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -