久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

PWM控制LED臺燈程序帶紅外遙控

作者:佚名   來源:本站原創   點擊數:  更新時間:2010年01月07日   【字體:

;/*******************************************************************************
;* 標題: 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
;------------------------------------------------
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

關閉窗口

相關文章

主站蜘蛛池模板: 欧美一级二级在线观看 | 久久一区二区免费视频 | 亚洲欧美日韩在线一区二区 | 久久久久久国产精品久久 | 日本在线视频中文字幕 | 精品国产欧美日韩不卡在线观看 | 久久99国产精品 | 91精品国产91久久久久久最新 | 国产精品99久久久久久动医院 | 一级a性色生活片久久毛片 午夜精品在线观看 | 亚洲三级在线观看 | 国产精品一区二区在线 | 精品一区二区三区在线观看国产 | 免费成人高清在线视频 | 国产精品网页 | 又黄又爽的网站 | 成人亚洲在线 | 天堂视频中文在线 | 四虎最新视频 | 日韩国产一区二区三区 | 一级黄色毛片子 | 国产精品一区二区三区久久 | 亚洲精品高清视频在线观看 | 天天澡天天狠天天天做 | 免费看淫片 | 日日干天天干 | 成人亚洲性情网站www在线观看 | 国产乱码久久久久久 | 欧美一区视频 | av网站在线播放 | 欧美中文在线 | 精品日韩一区二区三区 | 日韩一级| 国产精品久久久爽爽爽麻豆色哟哟 | 精品欧美一区二区三区精品久久 | 欧美中文字幕一区二区三区 | 欧美日韩国产传媒 | 天堂色 | 亚洲 欧美 另类 日韩 | 国产1区2区| 黄色一级大片在线免费看产 |