用单片机做的倒计时15s

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

用单片机设计15s倒计时器跳线设置:默认跳线位置,注意蜂鸣器选择跳线J5要选23端程序效果:利用单片机的定时/计数器设计一个15到0倒计时器,按S4后启动,要求精确显示到百分之一秒。发挥部分:1、定时结束后有提示音报警,并可重新定时2、定时过程中按独立键盘s5可暂停,按S4继续运行环境:51hei单片机学习板*/ORG0000HLJMPSTART//主程序必须避开地址000BHORG000BH//定时器0的中段服务程序,起始地址为000BHLJMPIT00ORG0030HSTART:MOVTH0,#0EBH//装入初始值,定时时间为10msMOVTL0,#64HMOVTMOD,#01H//工作方式1MOV33H,#01//显示初值为15sMOV32H,#05MOV31H,#00MOV30H,#00SETBET0//打开定时0SETBEA//开总中断LOOP1:JBP3.6,LOOP//判断高低位,即按键KEY0是否按下LCALLDISPLAY//为低,即按键按下,延时消抖LCALLDISPLAYJBP3.6,LOOP//按键真的按下,并不是外界的干扰SETBTR0//启动定时器HERE:LCALLDISPLAY//调用显示JBP3.7,LOOP3//判断高低,即KEY1按键是否按下CLRTR0//按下,关闭定时器,这里并没有消抖LJMPLOOP1//等待KEY0的按下LOOP3:SJMPHERE//KEY1没有按下,就需显示LOOP:LCALLDISPLAY//KEY1没有按下,就需显示LJMPLOOP1//减10ms子程序SUB1:DEC30H//百分位减1MOVA,30HCJNEA,#0FFH,LOOP2//判断百分位减到0之后是否再减1MOV30H,#09//是,装入初值9DEC31H//十分位减1MOVA,31HCJNEA,#0FFH,LOOP2//判断百分位减到0之后是否再减1MOV31H,#09DEC32HMOVA,32HCJNEA,#0FFH,LOOP2MOV32H,#09DEC33HMOVA,33HCJNEA,#0FFH,LOOP2clrP2.2//从15s减到0s后,驱动蜂鸣器LCALLDELAY//延时LCALLDELAYSETBP2.2//关闭蜂鸣器MOV33H,#01//装入初值15sMOV32H,#05MOV31H,#00MOV30H,#00LOOP2:NOP//空指令RET//返回//显示子程序DISPLAY:MOVDPTR,#TAB//赋表首地址MOVA,#0FBHSETBP2.7MOVP0,A//亮最左边的数码管CLRP2.7XCHA,R0//暂存A的值MOVA,33HMOVCA,@A+DPTR//根据表值查找所需的值SETBP2.6MOVP0,A//显示值CLRP2.6LCALLDELAY//延时XCHA,R0//恢复原值RLA//循环左移,为下次做准备SETBP2.7MOVP0,ACLRP2.7XCHA,R0MOVA,32HMOVCA,@A+DPTRSETBP2.6MOVP0,ACLRP2.6LCALLDELAYXCHA,R0RLASETBP2.7MOVP0,AclrP2.7XCHA,R0MOVA,31HMOVCA,@A+DPTRSETBP2.6MOVP0,AclrP2.6LCALLDELAYXCHA,R0RLASETBP2.7MOVP0,AclrP2.7XCHA,R0MOVA,30HMOVCA,@A+DPTRSETBP2.6MOVP0,AclrP2.6LCALLDELAYRETTAB:DB3FH,06H,5BH,4FH,66H;数码管显示的数值DB6DH,7DH,07H,7FH,6FHIT00:MOVTH0,#0EBH//装入初值,时间为10msMOVTL0,#64HLCALLSUB1//减10msRETI//返回DELAY:MOVR7,#04//延时子程序,时间大约为:2us*4*250DEL2:MOVR6,#250DEL1:DJNZR6,DEL1DJNZR7,DEL2RETEND//结束单片机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十位寄存地址设置;SECEQU32HKY1EQU33HSP1BITP3.5位选口设置;ORG0000HLJMPSTARTORG0B00H中断方式选折;LJMPINT_T0START:MOVKY1,#00HMOVSEC,#00HMOVA,SECMOVB,#10DIVAB个位和十位的区分;MOVDPTR,#TABLE开始查个位的段码;MOVCA,@A+DPTRMOVP0,AMOVA,BMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP2,AMOVTMOD,#02HSETBET0SETBEA开启中断;WT:JBSP1,WTLCALLDELY10MSJBSP1,WTINCKY1第一次按下键盘,开始计数;MOVA,KY1CJNEA,#01H,KN1SETBTR0MOVTH0,#06HMOVTL0,#06HMOVD1A,#00HMOVD1B,#00HLJMPDKNKN1:CJNEA,#02H,KN2CLRTR0LJMPDKNKN2:CJNEA,#03H,DKNMOVSEC,#00HMOVA,SECMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVA,BMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP2,AMOVKY1,#00HKN3:INCKY1DECKY1第4次按下键盘,开始计数;MOVA,KY1CJNEA,#04H,KN3SETBTR0MOVTH0,#06HMOVTL0,#06HMOVD1A,#00HMOVD1B,#00HLJMPDKNDKN:JNBSP1,$LJMPWTDELY10MS:延时子程序;MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETINT_T0:中断子程序;INCD1AMOVA,D1ACJNEA,#100,NEXTMOVD1A,#00HINCD1BMOVA,D1BCJNEA,#5,NEXTMOVTCNTB,#00HINCSECMOVA,SECCJNEA,#100,DONEMOVSEC,#00HDONE:MOVA,SECMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVA,BMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP2,ANEXT:RETITABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND单片机倒计时定时器这里我们先要安装好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的指令的话,相应三极管的基极就会被拉低到零伏左右,使相应的三极管截至,继电器就会断电释放,每个继电器都有一个常开转常闭的接点,便于在其他电路中使用,继电器线圈两端反相并联的二极管是起到吸收反向电动势的功能,保护相应的驱动三极管,这种继电器驱动方式硬件结构比较简单。;电子制作实验室可设定时间的倒计时定时器,可选择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加5ADDA,#5A1:JBP2.1,A2;判断拨码开关的第3位是否接通,接通就对A加15ADDA,#15A2:JBP2.2,A3;判断拨码开关的第4位是否接通,接通就对A加30ADDA,#30A3:MOVTEMP,A;这时TEMP中的值就是倒计时时间;数码管显示定时时间的程序display:CLRP2.4;使继电器1释放,开始定时(开机时继电器处于吸合状态)CLRP2.3;使继电器2释放,开始定时(开机时继电器处于吸合状态)MOVR2,#120AB:MOVR3,#250TIME1:mova,temp;将temp中的十六进制数转换成10进制movb,#10;10进制/10=10进制divabmovb_bit,a;十位在amova_bit,b;个位在bmovdptr,#numtab;指定查表启始地址movr0,#4dpl1:movr1,#250;dplop:mova,a_bi

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功