用单片机做的倒计时15s文档格式.docx
- 文档编号:17969498
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:14
- 大小:119.87KB
用单片机做的倒计时15s文档格式.docx
《用单片机做的倒计时15s文档格式.docx》由会员分享,可在线阅读,更多相关《用单片机做的倒计时15s文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
LCALLDISPLAY//调用显示
JBP3.7,LOOP3//判断高低,即KEY1按键是否按下
CLRTR0//按下,关闭定时器,这里并没有消抖
LJMPLOOP1//等待KEY0的按下
LOOP3:
SJMPHERE//KEY1没有按下,就需显示
LOOP:
LCALLDISPLAY//KEY1没有按下,就需显示
LJMPLOOP1
//减10ms子程序
SUB1:
DEC30H//百分位减1
MOVA,30H
CJNEA,#0FFH,LOOP2//判断百分位减到0之后是否再减1
MOV30H,#09//是,装入初值9
DEC31H//十分位减1
MOVA,31H
MOV31H,#09
DEC32H
MOVA,32H
CJNEA,#0FFH,LOOP2
MOV32H,#09
DEC33H
MOVA,33H
clrP2.2//从15s减到0s后,驱动蜂鸣器
LCALLDELAY//延时
LCALLDELAY
SETBP2.2//关闭蜂鸣器
MOV33H,#01//装入初值15s
LOOP2:
NOP//空指令
RET//返回
//显示子程序
DISPLAY:
MOVDPTR,#TAB//赋表首地址
MOVA,#0FBH
SETBP2.7
MOVP0,A//亮最左边的数码管
CLRP2.7
XCHA,R0//暂存A的值
MOVCA,@A+DPTR//根据表值查找所需的值
SETBP2.6
MOVP0,A//显示值
CLRP2.6
XCHA,R0//恢复原值
RLA//循环左移,为下次做准备
MOVP0,A
XCHA,R0
MOVCA,@A+DPTR
RLA
clrP2.7
clrP2.6
RET
TAB:
DB3FH,06H,5BH,4FH,66H;
数码管显示的数值
DB6DH,7DH,07H,7FH,6FH
IT00:
MOVTH0,#0EBH//装入初值,时间为10ms
LCALLSUB1//减10ms
RETI//返回
DELAY:
MOVR7,#04//延时子程序,时间大约为:
2us*4*250
DEL2:
MOVR6,#250
DEL1:
DJNZR6,DEL1
DJNZR7,DEL2
END//结束
单片机AT89C5100——99带倒计时计数器
[日期:
2008-01-29][来源:
东哥开发网()作者:
佚名][字体:
大中小](投递新闻)
1.设计任务
(1.上电时显示“00”,第一次按下SP1后就开始计数。
(2.第二次按SP1后,计数停止。
(3.第三次按SP1后,计数清零。
(4.第四次按下倒计时。
2.电路的原理图
3.系统板上硬件连线
(1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;
要求:
P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;
P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。
(3.把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上;
4.
汇编源程序
D1AEQU30H个位寄存地址设置;
D1BEQU31H十位寄存地址设置;
SECEQU32H
KY1EQU33H
SP1BITP3.5位选口设置;
ORG0000H
LJMPSTART
ORG0B00H中断方式选折;
LJMPINT_T0
START:
MOVKY1,#00H
MOVSEC,#00H
MOVA,SEC
MOVB,#10
DIVAB个位和十位的区分;
MOVDPTR,#TABLE开始查个位的段码;
MOVCA,@A+DPTR
MOVP0,A
MOVA,B
MOVDPTR,#TABLE
MOVP2,A
MOVTMOD,#02H
SETBET0
SETBEA开启中断;
WT:
JBSP1,WT
LCALLDELY10MS
JBSP1,WT
INCKY1第一次按下键盘,开始计数;
MOVA,KY1
CJNEA,#01H,KN1
SETBTR0
MOVTH0,#06H
MOVTL0,#06H
MOVD1A,#00H
MOVD1B,#00H
LJMPDKN
KN1:
CJNEA,#02H,KN2
CLRTR0
KN2:
CJNEA,#03H,DKN
DIVAB
MOVKY1,#00H
KN3:
INCKY1
DECKY1第4次按下键盘,开始计数;
CJNEA,#04H,KN3
DKN:
JNBSP1,$
LJMPWT
DELY10MS:
延时子程序;
MOVR6,#20
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:
中断子程序;
INCD1A
MOVA,D1A
CJNEA,#100,NEXT
INCD1B
MOVA,D1B
CJNEA,#5,NEXT
MOVTCNTB,#00H
INCSEC
CJNEA,#100,DONE
DONE:
MOVA,SEC
NEXT:
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
单片机倒计时定时器
这里我们先要安装好51试验板上的两个轻触按钮开关,我们采用的是独立式按钮开关,也就是说将开关直接连接到电源的地和单片机的对应引脚之间,这里K1接到单片机的P3.6引脚,K2接到P3.7。
正常情况下单片机的P3.6、P3.7都被程序初始化时置“1”当有按键按下时对应的单片机引脚被按钮开关下拉为“0”,这种方法比较直观,而且比较简单,在按键数量不多的场合下使用很广泛。
因为机械开关开关时有抖动,所以需要在程序中加一个软件去抖动程序,它的工作原理如下:
当单片机检测到有按键被按下后立即执行一个10毫秒的延时程序,然后再在检测该引脚是否仍然为闭合状态?
如果仍然为闭合说明确认该键被按下立即执行相应的处理程序,否则可能是干扰,丢弃这次检测结果。
接下来我们再安装一个四位的拨码开关,就是图中红色的开关,它相当于四个装在一起的拨动开关,当开关拨到"
ON"
一侧时,对应的那路就会接通,反之断开.它在单片机中一般用于设置初始参数,而且不经常改变的场合。
这里因为单片机引脚资源不够,所以我们只使用了拨码开关的第2、3、4位,第1位闲置。
三个开关可以逻辑组合出8种状态,所以我们能够方便灵活地预置多达7种的倒计时时间。
最后我们来安装两个继电器和相关电路,有了继电器我们的实验板不再仅仅是做做实验而已,可以用于控制一些负载,比如说:
充电器,洗衣机,电风扇等,使我们的实验板的实用功能大大增强,这也是电子制作实验室网站的单片机实验板和其他公司的产品不同的地方。
这里继电器由相应的S8050三极管来驱动,开机时,单片机初始化后的P2.3/P2.4为高电平,+5伏电源通过电阻使三极管导通,所以开机后继电器始终处于吸合状态,如果我们在程序中给单片机一条:
CLRP2.3或者CLRP2.4的指令的话,相应三极管的基极就会被拉低到零伏左右,使相应的三极管截至,继电器就会断电释放,每个继电器都有一个常开转常闭的接点,便于在其他电路中使用,继电器线圈两端反相并联的二极管是起到吸收反向电动势的功能,保护相应的驱动三极管,这种继电器驱动方式硬件结构比较简单。
;
电子制作实验室http:
//www.xie-
可设定时间的倒计时定时器,可选择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指示灯
等待键盘输入
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;
取十位数
查十位数的7段代码
送出十位的7段代码
clrp2.6;
开十位显示
setbp2.6;
关闭十位显示,防止鬼影
插入一段判断定时过程中是否有按键输入的程序段
C1:
JBP3.6,B1
延时10毫秒消抖
JBP3.6,C1
AJMPSET
B1:
JBP3.7,M33
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:
LED指示灯常亮
SETBP2.4;
继电器1吸合,定时结束,退回到开机时的状态
SETBP2.3;
继电器2吸合,定时结束,退回到开机时的状态
AJMPSTART;
退到开机初始化状态
1毫秒延时子程序
DELY1:
MOVR4,#2
MOVR5,#248
DJNZR5,$
DJNZR4,D1
10毫秒延时子程序
DELAY10:
MOVR4,#20
D2:
DJNZR4,D2
实验板上的7段数码管0~9数字的共阴显示代码
numtab:
DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 倒计时 15