这儿咱们先要装置好51试验板上的两个轻触按钮开关,咱们选用的是独立式按钮开关,也便是说将开关直接连接到电源的地和单片机的对应引脚之间,这儿K1接到单片机的P3.6引脚,K2接到P3.7正常情况下单片机的P3.6P3.7都被程序初始化时置1当有按键按下时对应的单片机引脚被按钮开关下拉为0,这种办法比较直观,并且比较简单,在按键数量不多的场合下运用很广泛
由于机械开关开关时有颤动,所以需要在程序中加一个软件去颤动程序,它的作业原理如下:当单片机检测到有按键被按下后当即履行一个10毫秒的延时程序,然后再在检测该引脚是否依然为闭合状况?假如依然为闭合阐明承认该键被按下当即履行相应的处理程序,不然可能是搅扰,丢掉这次检测成果
接下来咱们再装置一个四位的拨码开关,便是图中赤色的开关,它相当于四个装在一同的拨动开关,当开关拨到”ON”一侧时,对应的那路就会接通,反之断开.它在单片机中一般用于设置初始参数,并且不常常改动的场合这儿由于单片机引脚资源不行,所以咱们只运用了拨码开关的第234位,第1位搁置三个开关能够逻辑组合出8种状况,所以咱们能够便利灵敏地预置多达7种的倒计时时刻
最终咱们来装置两个继电器和相关电路,有了继电器咱们的试验板不再仅仅是做做试验罢了,能够用于操控一些负载,比如说:充电器,洗衣机,电风扇等,使咱们的试验板的实用功用大大增强,这也是电子制造试验室网站的单片机试验板和其他公司的产品不同的当地
这儿继电器由相应的S8050三极管来驱动,开机时,单片机初始化后的P2.3/P2.4为高电平,+5伏电源经过电阻使三极管导通,所以开机后继电器一直处于吸合状况,假如咱们在程序中给单片机一条:CLRP2.3或许CLRP2.4的指令的话,相应三极管的基极就会被拉低到零伏左右,使相应的三极管到,继电器就会断电开释,每个继电器都有一个常开转常闭的接点,便于在其他电路中运用,继电器线圈两头反相并联的二极管是起到吸收反向电动势的功用,维护相应的驱动三极管,这种继电器驱动方法硬件结构比较简单
;电子制造试验室http://www.xie-gang.com/
;可设守时刻的倒计时守时器,可选择5/15/20/30/35/45/50分钟倒计时
;倒计时时刻由四位拨码开关的2/3/4位来操控,
;第2位表明5分钟,第3位表明15分钟,第4位表明30分钟,
;经过不同的组合能够发生5/15/20/30/35/45/50分钟倒计时
;P1.0口的外接的发光二极管为状况LED,守时未开端时LED常亮,守时过程中LED闪耀
;K1为开端按钮,K2为中止按钮
a_bitequ20h;数码管个位数寄存内存方位
b_bitequ21h;数码管十位数寄存内存方位
tempequ22h;计数器数值寄存内存方位
;开机初始化
MOVP3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOVP0,#0FFH;使显现时刻数码管平息
CLRP1.0;点亮LED指示灯
;等候键盘输入
START:JBP3.6,$;循环判别开端按钮K1是否按下?
ACALLDELAY10;延时10毫秒触点消抖
JBP3.6,START;假如是搅扰就回来
JNBP3.6,$;等候按键松开
;读拨码开关的状况,取得倒计时时刻
SET:MOVA,#0;首要对A清零
JBP2.0,A1;判别拨码开关的第2位是否接通,接通就对A加5
ADDA,#5
A1:JBP2.1,A2;判别拨码开关的第3位是否接通,接通就对A加15
ADDA,#15
A2:JBP2.2,A3;判别拨码开关的第4位是否接通,接通就对A加30
ADDA,#30
A3:MOVTEMP,A
;这时TEMP中的值便是倒计时时刻
;数码管显现守时时刻的程序
display:CLRP2.4;使继电器1开释,开端守时(开机时继电器处于吸合状况)
CLRP2.3;使继电器2开释,开端守时(开机时继电器处于吸合状况)
MOVR2,#120
AB:MOVR3,#250
TIME1:mova,temp;将temp中的十六进制数转换成10进制
movb,#10;10进制/10=10进制
divab
movb_bit,a;十位在a
mova_bit,b;个位在b
movdptr,#numtab;指定查表启始地址
movr0,#4
dpl1:movr1,#250;
dplop:mova,a_bit;取个位数
MOVCA,@A+DPTR;查个位数的7段代码
movp0,a;送出个位的7段代码
clrp2.7;开个位显现
ACALLDELY1;显现1毫秒
setbp2.7;封闭个位显现,避免鬼影
mova,b_bit;取十位数
MOVCA,@A+DPTR;查十位数的7段代码
movp0,a;送出十位的7段代码
clrp2.6;开十位显现
ACALLDELY1;显现1毫秒
setbp2.6;封闭十位显现,避免鬼影
;刺进一段判别守时过程中是否有按键输入的程序段
C1:JBP3.6,B1
ACALLDELAY10;延时10毫秒消抖
JBP3.6,C1
JNBP3.6,$;等候按键松开
AJMPSET
B1:JBP3.7,M33
ACALLDELAY10;延时10毫秒消抖
JBP3.7,B1
JNBP3.7,$;等候按键松开
AJMPOVER
M33:djnzr3,TIME1;2毫秒循环履行250次,时刻约0.5秒
CPLP1.0;使LED每1秒闪耀一次
djnzr2,AB;循环履行120次,时刻为1分钟
DECTEMP;满一分钟对守时时刻减1
MOVA,TEMP
JNZDISPLAY;判别TEMP的数值是否为0?不为0循环
;完毕守时
OVER:CLRP1.0;LED指示灯常亮
SETBP2.4;继电器1吸合,守时完毕,退回到开机时的状况
SETBP2.3;继电器2吸合,守时完毕,退回到开机时的状况
AJMPSTART;退到开机初始化状况
;1毫秒延时子程序
DELY1:MOVR4,#2
D1:MOVR5,#248
DJNZR5,$
DJNZR4,D1
RET
;10毫秒延时子程序
DELAY10:MOVR4,#20
D2:MOVR5,#248
DJNZR5,$
DJNZR4,D2
RET
;试验板上的7段数码管0~9数字的共阴显现代码
numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
end