资源描述:
《单片机应用系统课程设计实例》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数字温度计设计实例利用可调电阻调节电压值模拟温度的输入量,当温度低于30°C时,发出长“嘀”声和光报警,当温度高于60°C时,发出短“嘀”声和光报警,测量温度范围0-99度,用4位7段数码管显示温度,ADC0808(ADC0809)作为转换器。1、硬件设计2、软件设计LED_0EQU30HLED_1EQU31HLED_2EQU32HADCEQU35HTCNTAEQU36HTCNTBEQU37HH_TEMPEQU38H;温度上限L_TEMPEQU39H;温度下限FLAGBIT00HH_ALMBITP3.0L_ALMBITP3.1SOUNDBITP3.7CLOCKBITP2.4ST
2、BITP2.5EOCBITP2.6OEBITP2.7ORG00HSJMPSTARTORG0BHLJMPINT_T0ORG1BHLJMPINT_T1START:MOVLED_0,#00HMOVLED_1,#00HMOVLED_2,#00HMOVDPTR,#TABLEMOVH_TEMP,#153MOVL_TEMP,#77MOVTMOD,#12HMOVTH0,#245MOVTL0,#0MOVTH1,#(65536-1000)/256MOVTL1,#(65536-1000)MOD256MOVIE,#8aHCLRCSETBTR0;为ADC0808提供时钟WAIT:SETBH_ALMSET
3、BL_ALMCLRSTSETBSTCLRST;启动转换JNBEOC,$SETBOEMOVADC,P1;读取AD转换结果CLROEMOVA,ADCSUBBA,#77;判断是否低于下限JCLALMMOVA,H_TEMPMOVR0,ADCSUBBA,R0;判断是否高于上限JCHALMCLRTR1LJMPPROCLALM:;低温报警CLRL_ALMSETBTR1CLRFLAGLJMPPROCHALM:;高温报警CLRH_ALMSETBTR1SETBFLAGLJMPPROCPROC:MOVA,ADC;数值转换MOVB,#100DIVABMOVLED_2,AMOVA,BMOVB,#10DI
4、VABMOVLED_1,AMOVLED_0,BLCALLDISPSJMPWAITINT_T0:CPLCLOCK;提供ADC0808时钟RETIINT_T1:MOVTH1,#(65536-1000)/256MOVTL1,#(65536-1000)MOD256CPLSOUNDINCTCNTAMOVA,TCNTAJBFLAG,I1;判断是高温警报还是低温警报CJNEA,#30,RETUNE;低温警报声SJMPI2I1:CJNEA,#20,RETUNE;高温警报声I2:MOVTCNTA,#0INCTCNTBMOVA,TCNTBCJNEA,#25,RETUNEMOVTCNTA,#0MOV
5、TCNTB,#0LCALLDELAY2RETUNE:RETIDISP:MOVA,LED_0;数码显示子程序MOVCA,@A+DPTRCLRP2.3MOVP0,ALCALLDELAYSETBP2.3MOVA,LED_1MOVCA,@A+DPTRCLRP2.2MOVP0,ALCALLDELAYSETBP2.2MOVA,LED_2MOVCA,@A+DPTRCLRP2.1MOVP0,ALCALLDELAYSETBP2.1RETDELAY:MOVR6,#10D1:MOVR7,#250DJNZR7,$DJNZR6,D1RETDELAY2:MOVR5,#20D2:MOVR6,#20D3:MO
6、VR7,#250DJNZR7,$DJNZR6,D3DJNZR5,D2RETTABLE:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FHEND数字钟设计实例利用AT89C51的定时器和6位7段数码管,设计一个电子时钟,显示格式“XXXXXX”,从左向右分别是:时、分、秒1、硬件设计2、软件设计说明:定时器每1000us中断一次,在中断服务程序中,对中断次数计数,100us计数10000次就是1s,然后再对秒计数得到分和小时,并送入显示缓存。LEDBUFEQU30H;显示码缓存区HOUREQU40HMINUTEEQU41HSECONDEQU42H
7、C100usEQU43HTICKEQU10000;置中断次数T100usEQU256-100;置定时器初始值LJMPSTART;跳转至主程序ORG000BH;定时器0中断入口T0INT:PUSHPSW;状态保护PUSHACCMOVA,C100us+1JNZGOON;计数值是否为0DECC100usGOON:DECC100us+1MOVA,C100usORLA,C100us+1JNZEXITMOVC100us,#HIGH(TICK);重置计数值MOVC100us+1,#LOW(TICK)INC