PWM控制LED臺燈程序帶紅外遙控
;/*************************************************
;* 標題: LED臺燈程序*
;* 文件: LED臺燈PWM控制帶紅外遙控.asm *
;* 日期: 2008-12-18 *
;* 版本: 1.0*
;* 作者: *
;****************************************************
; LED臺燈程序帶有紅外遙控功能*
; 利用定時器控制產(chǎn)生占空比可變的PWM 波*
; 按K1,PWM 值增加,則占空比減小,LED 燈漸暗。*
; 按K2,PWM 值減小,則占空比增加,LED 燈漸亮。*
; 我的5644遙控器上的0~9數(shù)字鍵對應(yīng)10個亮度等級。*
; 當(dāng)PWM 值增加到最大值或減小到最小值時,蜂鳴器將報警*
; 資源:p1 口,數(shù)碼管。p3.4,p3.5 亮度控制按鍵P3.0 PWM端口,p3.1 蜂鳴器報警*
;*********************************************************
LEVEL0EQU2FH;亮度等級9
LEVEL1EQU4FH;亮度等級8
LEVEL2EQU6FH;亮度等級7
LEVEL3EQU8FH;亮度等級6
LEVEL4EQU0AFH;亮度等級5
LEVEL5EQU0BFH;亮度等級4
LEVEL6EQU0CFH;亮度等級3
LEVEL7EQU0DFH;亮度等級2
LEVEL8EQU0EFH;亮度等級1
LEVEL9EQU0FFH;亮度等級0
PWM EQU 7FH ;PWM 賦初始值
LED_RAMEQU30H
IRCOM EQU 50H;50H-53H IR 使用
IR_NEWEQU 60H;新的遙控代碼值用
LED_PORTEQUP1 ;數(shù)碼管接口,共陰極
PWM_OUT EQU P3.0 ;PWM控制輸出接口
INCKEY EQU P3.5 ;K1,PWM 值增加鍵。
DECKEY EQU P3.4 ;K2,PWM 值減小鍵。
BEEP EQU P3.1 ;蜂鳴器
IRINEQU 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 ;脈寬調(diào)節(jié)
MOV TL1,#00H
MOV TH0,#0FEH ;1ms 延時常數(shù)0FC
MOV TL0,#0CH ;頻率調(diào)節(jié)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 ;調(diào)節(jié)脈寬(脈寬減?。?
SJMP LOOP
LOOP1: JB DECKEY,LOOP2 ;減小鍵是否按下?
CALL DELAY ;延時去抖動
JB DECKEY,LOOP2
CJNE A,#01H,PWMDEC ;是否到最小值?
CALL BEEP_BL ;是,蜂鳴器報警。
SJMP LOOP
PWMDEC: DEC PWM ;調(diào)節(jié)脈寬(脈寬增加)
LOOP2: SJMP LOOP
;-----------------------------
;T0 中斷服務(wù)子程序(頻率)
;控制定時器1 中斷
;-----------------------------
INTT0:
CLR TR1
MOV TH0,#0FEH ;1ms 延時常數(shù)
MOV TL0,#0CH ;頻率調(diào)節(jié)
MOV TH1,PWM
SETB TR1
CLR PWM_OUT ;啟動輸出
RETI
;-----------------------------
;T1 中斷服務(wù)子程序(脈寬)
;控制PWM 脈沖寬度
;-----------------------------
INTT1:
CLR TR1 ;脈寬調(diào)節(jié)結(jié)束
SETB PWM_OUT ;結(jié)束輸出
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 信號出現(xiàn)
JMP IR_SHOW1;I1;原值I1
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,IR_SHOW1;I1 ;確認IR 信號出現(xiàn)
I21: JB IRIN,I3 ;等IR 變?yōu)楦唠娖?BR>CALL DEL
JMP I21
I3: MOV R3,#0 ;8 位數(shù)清為0
LL:JNB IRIN,I4 ;等IR 變?yōu)榈碗娖?BR>CALL DEL
JMP LL
I4: JB IRIN,I5 ;等IR 變?yōu)楦唠娖?BR>CALL DEL
JMP I4
I5: MOV R2,#0 ;0.14ms 計數(shù)
L1: CALL DEL
JB IRIN, N1 ;等IR 變?yōu)楦唠娖?IR=0,檢查R2 中的計數(shù)值
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 字節(jié)了
JMP IR_SHOW
N1: INC R2
CJNE R2,#30,L1 ;30--0.14ms 計數(shù)過長則時間到自動離開
JMP IR_SHOW1
pwm相關(guān)文章:pwm原理
蜂鳴器相關(guān)文章:蜂鳴器原理相關(guān)推薦
-
-
dolphin | 2014-06-12
-
renazan2000 | 2014-03-07
-
-
-
-
-
-
-
renazan2000 | 2013-06-20
-
renazan2000 | 2014-03-08
-
評論