|
楼主 |
发表于 2013-3-1 10:33:34
|
显示全部楼层
;10位led光柱显示
共阳
;使用T0
;
;LEDN1 BIT P2.0 ; 测试用
LEDOUT EQU P1 ; 数码管光柱0-8位
LED9 BIT P3.1
LED10 BIT P3.0
BMQB BIT P3.2
BMQA BIT P3.3 ;INT1
;BMQAN BIT P1.0 ;未使用
OUTA BIT P3.4 ;继电器输出低电平有效
OUTB BIT P3.5
BEEP BIT P3.7
BLACK BIT 00H ;编码器有效转动标志
BZ BIT 02H ;倒计时1.5S 标志
DJSS BIT 03h ;倒计时有效标志
BEEPBZ BIT 04H ;蜂鸣器工作标志 置位蜂鸣器工作
BMQRAM EQU 07h ; ;编码器计数单元 R7
FMQJS1 EQU 06H ; 蜂鸣器时间计数 R6
FMQJS2 EQU 05H ; R5
NUM1 EQU 11H ; 显示数码管数据
NUM2 EQU NUM1+1h ; 工作状态
NUM3 EQU NUM1+2h ; 60S计数
NUM4 EQU NUM1+3h ; 1.5S计数
js50ms EQU NUM1+4h ; js50ms
BLACKJS EQU js50ms+1H ;编码器时间计数用于检测
BMQJS EQU js50ms+3H ;时间0-10分钟
temp EQU js50ms+4H ;用于比较编码前后两次数据是否相同
BMQRAM1 EQU js50ms+5H ;编码器脉冲计数和BLACKJS配合检测单位时间编码器转动的角度
TEMP1 EQU js50ms+6H
;**********************************************************
;**********************************************************
ORG 0000H
LJMP START;
ORG 000BH;
LJMP DISP ;t0定时中断11.0592 7MS 方式1
ORG 0013H
LJMP BMQINT ;INT1中断
ORG 001BH;
LJMP DJS ;t1定时中断237.630208333333微秒 用于蜂鸣器温驱动(2.1KHZ)和倒计时计数
START:
CLR BEEP
MOV SP,#40H ;
MOV LEDOUT,#00H ; 初始化数码管
CLR LED9
CLR LED10
mov num1,#0 ;初始显示0
mov BLACKJS,#0
mov BMQJS,#0
mov BMQRAM,#0
mov temp,#0
MOV TEMP1,#0
mov BMQRAM1,#0
MOV TL0,#0CDH ;赋中断T0初值11.059212MHZ 7MS 方式1 ;
MOV TH0,#0E6H ;
MOV TH1,#0ffH; t1定时中断237.630208333333微秒 用于蜂鸣器驱动(2.1KHZ)和倒计时计数
MOV TL1,#025H
MOV IE,#10000000B ;开中断
;MOV IP,#00000100B; INT1 中断优先
setb PT1 ;=1,声明定时器1为高优先级中断
MOV TMOD,#00010001B ;设置T0方式1 T1方式1
SETB BLACK ;设置编码器无有效转动标志 1无效 0有效
setb eT0 ; 开中断T0
SETB ET1 ; 开中断T1
SETB IT1 ; 外中断1下降沿触发
MOV BLACKJS,#50 ;设置编码器初始转动检测的单位时间
MOV NUM4,#30 ;50MS*30=1.5 秒计数单元
MOV NUM3,#40 ;1.5秒×40=1 分钟计数单元
CLR BZ
MOV NUM2,#0 ;设置输出的初始工作状态
mov js50ms,#210 ;105
CLR DJSS
CLR BEEPBZ
MOV FMQJS1,#0210 ;0.05秒
MOV FMQJS2,#10;10 ;开机响一秒
SETB BEEPBZ
SETB TR0 ;开启定时器0
; MOV NUM1,#9;测试用
MOV BMQRAM,#0 ;清零编码器
SETB EX1 ;开外部中断1
SETB TR1
;**************************************
;功 能:主程序
;**************************************
S:
mov num1,bmqjs
JB BLACK,S4
mov a,bmqram
mov b,#3
div ab
mov bmqjs,a
CJNE A,TEMP1,FMQ5
S0:
JZ S1
SETB DJSS ;开启倒计时
S4:
JBC BZ,S2
ajmp s
FMQ5:
MOV TEMP1,A
MOV FMQJS1,#0210 ;0.05秒
MOV FMQJS2,#3;10 ;响秒
SETB BEEPBZ
AJMP S0
S2:
MOV A,NUM2
MOV DPTR,#TAB ; 查表
MOVC A,@A+DPTR ;
CJNE A,#0,$+7 ;0 00
SETB OUTA
SETB OUTB
CJNE A,#1,$+7 ;1 10
CLR OUTA
SETB OUTB
CJNE A,#2,$+7 ;2 11
CLR OUTA
CLR OUTB
CJNE A,#3,$+7 ;3 01
SETB OUTA
CLR OUTB
INC NUM2
MOV A,NUM2
CJNE A,#17,$+3
JNC S21
S22: DJNZ NUM3,S
MOV NUM3,#40
DJNZ BMQJS ,S
MOV NUM3,#40
MOV FMQJS1,#210 ;0.05秒
MOV FMQJS2,#100 ;关机响5秒
SETB BEEPBZ
S1: ; 时间到处理
SETB OUTA ;切断主继电器
CLR DJSS ;停止计时
mov js50ms,#210 ;105
; MOV TL1,#000H ;赋中断T1初值11.0592MHZ 50MS方式1
; MOV TH1,#04CH ;
CLR BZ ;清除1.5秒定时标志
MOV NUM4,#30 ;清除1.5秒计数单元计数值 50MS*30=1.5 秒计数单元
MOV NUM3,#40 ;清除60秒计数单元计数值 1.5秒×40=1 分钟计数单元
MOV NUM2,#0 ;复位工作状态标志计数
JMP S
S21: MOV NUM2,#0
AJMP S22
DJS: ;T1中断
MOV TH1,#0ffH; t1定时中断237.630208333333微秒 用于蜂鸣器驱动(2.1KHZ)和倒计时计数
MOV TL1,#025H
JNB BEEPBZ,FMQ2
DJNZ R6,FMQ1
MOV R6,#210
DJNZ R5,FMQ1
CLR BEEPBZ
CLR BEEP
AJMP FMQ2
FMQ1:
cpl beep
FMQ2:
JNB DJSS,DJS2
djnz js50ms,djs2
mov js50ms,#210 ;105
; MOV TL1,#000H ;赋中断T1初值11.0592MHZ 50MS方式1
; MOV TH1,#04CH ;
DJNZ NUM4,DJS2
SETB BZ ;1.5秒
MOV NUM4,#30
DJS2:
RETI
;**********************************************************
; 中断子程序名:DISP
;功 能: ;10位led光柱显示
;说 明:T0中断
;调 用:
;入口参数:NUM1为要显示的数据(0-10)
;出口参数:10位led光柱 (LEDOUT光柱1-8位,LED9 LED10第9 10位)
;影响资源:A DPTR,C
;设 计:
;修 改: 日 期:
;**********************************************************
DISP:
MOV TL0,#0CDH;11.059212MHZ 7MS 方式1 ;
MOV TH0,#0E6H;
jnb black,disp24 ;编码器转disp24
djnz blackjs,disp22 ;
MOV A,BMQRAM1
CJNE A,#4,$+3
JC DISP23 ;小于设定角度
CLR BLACK ;大于设定角度 清除black标志
mov blackjs,#150
mov temp,bmqjs
MOV BMQRAM1,#0
ajmp disp22
DISP23:
MOV BMQRAM1,#0
mov blackjs,#50
disp22:
PUSH ACC;
PUSH PSW;
PUSH DPL;
PUSH DPH;
MOV A,NUM1;
MOV DPTR,#TABLE ;
MOVC A,@A+DPTR ;取数码管显示数据的字符
MOV LEDOUT,A ;送出显示
MOV A,NUM1
cjne a,#9,$+9
clr LED9 ;共阳数码管
setb LED10
ajmp disp3
cjne a,#10,$+9
clr LED9
clr LED10
ajmp disp3
setb LED9
setb LED10
DISP3:
POP DPH;
POP DPL;
POP PSW;
POP ACC;
RETI
disp24:
djnz blackjs,disp22
mov a,bmqjs
cjne a,temp,disp25
; MOV BMQRAM,#0
; mov blackjs,#80
setb black
ajmp disp23
disp25:
mov blackjs,#150
mov temp,bmqjs
ajmp disp22
BMQINT:
jb bmqb,bmqint1
inc bmqram1
jb black , bmqint2
inc bmqram
cjne r7,#31, $+3
jc bmqint2
mov bmqram,#30
bmqint2:
reti
bmqint1:
inc bmqram1
jb black , bmqint2
cjne r7,#0,bmqint3
reti
bmqint3:
cjne r7,#32, $+3
jnc bmqint4
dec bmqram
reti
bmqint4:
mov bmqram,#0
reti
TABLE: DB 11111111B,11111110B,11111100B,11111000B,11110000B,11100000B,11000000B,10000000B,00000000B,00000000B,00000000B;段码0123456789 10
TAB: DB 0,1,1,1,1,1,1,0,3, 2, 2, 2, 2, 2, 2, 3, 0 ;
; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
END
|
|