附录D 设计源程序.doc_第1页
附录D 设计源程序.doc_第2页
附录D 设计源程序.doc_第3页
附录D 设计源程序.doc_第4页
附录D 设计源程序.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安徽工程科技学院毕业设计(论文)附录D 设计源程序DBUF0 EQU 30H ;温度符号/百位存储单元 DBUF1 EQU 31H ;温度十位存储单元 DBUF2 EQU 32H ;温度个位存储单元 DBUF3 EQU 33H ;温度十分位存储单元 DBUF4 EQU 34H ;A/D转换值存储单元 DBUF5 EQU 35H ;温度设定值百位存储单元 DBUF6 EQU 36H ;温度设定值十位存储单元 DBUF7 EQU 37H ;温度设定值个位存储单元 DBUF8 EQU 38H ;温度设定值十分位存储单元 DBUF9 EQU 39H ;烟雾报警等级值存储单元 DBJ1 BIT P1.0 ;灯光报警1(红光) DBJ2 BIT P1.1 ;灯光报警2(黄光) SBJ BIT P1.2 ;声音报警 DFS BIT P1.3 ;排气扇排气 YWDJ4 BIT P1.4 ;烟雾等级4 YWDJ3 BIT P1.5 ;烟雾等级3 YWDJ2 BIT P1.6 ;烟雾等级2 YWDJ1 BIT P1.7 ;烟雾等级1 WDBZWBIT 20H.1;温度设置标志位 YWBZWBIT 20H.2;烟雾设置标志位 ORG 0000HLJMP MAIN ORG 0003H ;外部中断0入口地址 LJMP TINT0 ORG 0013H ;外部中断1入口地址 LJMP TINT1 ORG 0100H ;程序首地址MIAN: NOP ;主程序 LCALL DELAY300MS ;延时300MS MOV SP,#60H ;设置栈指针初时化 MOV IP,#04H ;置外部中断1高优先级 SETB IT1 ;设置外部中断后沿负跳变有效 SETB IT0 SETB EX0 ;外部中断允许开启SETBEX1SETBEA ;开中断CLRP2.2 ;复位8255ASETBP2.2CLRP2.2CLRSBJ ;复位声音灯光报警SETBDBJ1SETBDBJ2CLRYWDJ4 ;复位烟雾报警控制CLRYWDJ3CLRYWDJ2SETBYWDJ1MOVR4,#0AH ;清除30H39H单元中的内容MOVR0,#30H CLEAR1:MOVR0,#00HINCR0DJNZR4,CLEAR1 ;清显示完?;进入程序循环区WAIT:LCALLDISPLAY ;调用显示子程序LCALLADC0809 ;调用A/D转换子程序LCALLBDBH ;调用标度变换子程序LCALLKEY ;调用键盘设置子程序LCALLWDBJ ;调用温度报警子程序LCALLYWBJ ;调用烟雾报警子程序AJMPWAIT;A/D转换子程序,用于实现把传感器采集到的模拟温度信号转换成对应的数字电压信号。ADC0809:MOVDPTR,#7FF8H ;置模拟通道IN0地址START:SETBF0 ;置中断标志位MOVXDPTR,A ;启动ADC0809转换LOOP:JBF0,LOOP ;等待转换结束TINT0:MOVXA,DPTR ;读当前数据MOVDBUF4,A ;保存当前结果至DUBF4单元CLRF0 ;清中断标志位RETI ;中断返回;温度值转换子程序BDBH:MOVA,DBUF4 ;取温度数据CJNZA,#46,YW2 ;判断温度的正负, 非0转到YW3LJMPYW3 ;为0则转到YW3YW2:MOVA,DBUF4 ;重新去温度A/D转换值CJNZA,#46,PD ;温度值与0比较;正温度转换子程序PD:JCYW4 ;小于0则转到YW4MOVA, DBUF4 ;大于0则计算其值MOVB,#2 ;判断温度是否为整数DIVABMOVR3,AMOVR4,BMOVA,R4JNZYW5 ;有小数则转换到YW5SUBBA,#23 ;为整数则计算其值MOVB,#100DIVABMOV DBUF0,A ;存百位数值MOVR5,BMOVA,R5MOVB,#10DIVABMOVDBUF1,A ;存十位数值MOVDBUF2,B ;存个位数值MOVDBUF3,#00H ;存十分位数值RET ;返回YW5:SUBBA,#23 ;有小数的计算子程序MOVB,#100DIVABMOVDBUF0,A ;存百位数据MOVR5,BMOVA,R5MOVB,#10DIVABMOVDBUF1,A ;存十位数据MOVDBUF2,B ;存个位数据MOVDBUF3,#05H ;存十分位数据RET ;返回;负温度转换子程序YW4:MOVA, DBUF4 ;重新取温度数据MOVB,#2DIVABMOVR3,AMOVR4,BMOVA,R4JNZYW6 ;有小数则转到YW6MOVA,#23SUBBA,R3MOVB,#10DIVABMOVDBUF1,A ;存温度数据十位MOVDBUF2,B ;存温度数据个位MOVDBUF0,#2DH ;存温度数据符号位MOVDBUF3,#00H ;存温度数据十分位RET ;返回YW6:MOVA,#23SUBBA,R3MOVB,#10DIVABMOVDBUF1,A ;存温度数据十位MOVDBUF2,B ;存温度数据个位MOVDBUF0,#2D ;存温度数据符号位MOVDBUF3,#05H ;存温度数据十分位RET ;返回;温度为0时的转换子程序YW3:MOVDBUF0,#00HMOVDBUF1,#00HMOVDBUF2,#00HMOVDBUF3,#00HRET;烟雾报警子程序TINT1:PUSHACC ;保护累加器A的内容PUCHPSW ;保护PSW的内容SETBSBJ ;启动声音报警CLRDBJ2 ;启动灯光报警(黄色)POPPSWPOPACC ;恢复现场RETI ;中断返回;按键子程序KEY:CLRP2.5SETBP2.0SETBP2.1 ;8225A控制寄存器地址MOVA,#88H ;PC03、PB口为输出口,PC47为输入口MOVXR0,A ;写入控制寄存器MOVR4,#04H MOVR0,#30H ;清除显示器地址30H33HCLEAR2:MOVR0,#00HINCR0DJNZR4,CLEAR2 ;清显示完CLRP2.0 ;设置PC口地址SETBP2.1 ;A1=1,A0=0L1:MOVR3,#0F7H ;行扫描初值MOVR1,#00H ;键盘计数赋初值L2:MOVA,R3 ;行扫描值载入ACCMOVR0,A ;行扫描输出之PC口MOV21H,A ;行扫描值存入(21H)单元,作为判断是否有键按下SETBC ;C=1MOVR5,#03H ;检测PC5PC7 3列L3:MOVXA,R0 ;读取PC口内容CJNZA,21H,KEYIN ;与(21H)单元中的值比较,相等表示位按下,;按下则转向KEYIN求值INCR1 ;未按则计数加1L5:DJNZR5,L3 ;3列检测完毕否?MOVA,R3CLRCCPLCRRCA ;扫描下一行MOVR3,A JCL2JMP M2KEYIN:MOV22H,#03H ;检测3列L4:RLCA ;左移ACC,判断C是否为0JNCKEYIN1 ;C=0,表示该键按下,转向KEYIN1INCR1 ;未按则计数加1DJNZ22H,L4 ;3列检测完否?JMPL5KEYIN1:MOVR7,#60 ;用延时消除抖动D2:MOVR6,#248DJNZR6,$DJNZR7,D2D3:MOXA,R0 ;读取PC口XRLA,21H ;与(21H)中的值相比较,相等表示按键已;放开JNZD3 ;不相等表示按键未放开MOVA,R1 ;计数值存入ACCMOVDPTR,#TABLE ;取键盘值表首地址值MOVCA,A+DPTR ;读取键值MOV23H,A ;按键值存入(23H)中JBWDBZWWENDU1 ;在温度设定状态下, 转向WENDU1JBYWBZWYANWU1 ;在烟雾设定状态下, 转向YANWU1CJNEA,#0AH,M1 ;是设定温度报警值吗?;温度设定子程序WENDU:SETB WDBZW ;置温度设置标志位为1MOV24H,#04H ;置温度设置位数RET ;返回WENDU1:MOVA,23H ;取键值XCHA,DBUF8 ;存键值XCHA,DBUF7XCHA,DBUF6XCHA,DBUF5DJNZ24H,M2 ;判断温度设置位数是否达到4位CLRWDBZW ;温度设置位数已符合要求,清温度设置标志位M2:RET M1:MOVA,23H ;重新取键值CJNEA,#0BH,M2 ;是设定烟雾报警吗?;烟雾设定子程序YANWU:SETBYWBZW ;置烟雾设置标志位为1MOV25H,#01H ;置烟雾设置位数RETYANWU1:MOVA,23H ;重新取键值MOVDUBF9,A ;存烟雾报警值DJNZ25H,M2 ;判断烟雾设置位数符合要求CLRYWBZW ;烟雾设置位数符合要求,清标志位AJMPM2 ;返回;温度报警子程序WDBJ:MOVA,DBUF0SUBBA,DBUF5 ;设定温度百位大于显示温度百位吗?JCDDS ;大于则报警,不大于则继续比较MOVA,DBUF1SUBBA,DBUF6 ;设定温度十位大于显示温度十位吗?JCDDS ;大于则报警,不大于则继续比较MOVA,DBUF2SUBBA,DBUF7 ;设定温度个位大于显示温度个位吗?JCDDS ;大于则报警,不大于则继续比较MOVA,DBUF3SUBBA,DBUF8 ;设定温度十分位大于显示温度十分位吗?JCDDS ;大于则报警,不大于则返回AJMPM3DDS:CLRDBJ1 ;启动灯光报警CLRSBJ ;启动声音报警SETBDFS ;启动排气扇排气M3:RET ;子程序返回;烟雾等级设置子程序YWBJ:MOVA,DBUF4 ;取烟雾报警等级值CJNZA,A,#04H,M4 ;是4级吗?不是转向M4SETBYWDJ4 ;是4级,置4级报警控制CLRYWDJ3CLRYWDJ2CLRYWDJ1RETM4:MOVA,DBUF4 ;重新取烟雾报警等级值CJNEA,#03H,M5 ;是3级吗?不是则转向M5CLRYWDJ4 ;是3级,置3级报警控制SETBYWDJ3CLRYWDJ2CLRYWDJ1RETM5:MOVA,DBUF4CJNEA,#02H,M6 ;是2级吗?不是则转向M6CLRYWDJ4 ;是2级,置2级报警控制CLRYWDJ3SETBYWDJ2CLRYWDJ1RETM6:CLRYWDJ4 ;置1级报警控制CLRYWDJ3CLRYWDJ2SETBYWDJ1RET;显示子程序DISPLAY:JBWDBZW,DY1 ;在温度设定状态下,显示温度设定值JBYWBZW,DY2 ;在烟雾报警等级设定状态下,显示该设定值AJMPDISPLAY1DY1:MOVDBUF0,DBUF5MOVDBUF1,DBUF6MOVDBUF2,DBUF7MOVDBUF3,DBUF8ALMPDISPLAY1DY2:MOVDBUF0,#00HMOVDBUF1,#00HMOVDBUF2,#00HMOVDBUF3,DBUF9DISPLAY1:CLRP2.5 ;选通8255AMOVA,#88H ;PA、PB为基本输出口MOVXR0,A ;写入控制寄存器MOVA,DBUF0 ;取显示值符号/百位LCALLTAB ;查表取代码SETBP2.7 ;选通8255ASETBP2.0CLRP2.1 ;A1=0,A0=0为PB输出口MOVXR0,A ;输出要显示值到PB口MOVA,#0EH ;选通符号/百位的值CLRP2.0 ;A1=0,A0=0为PA口输出口MOVXR0,A ;显示符号/百位LCALLDELAY10MS ;显示延时MOVA,DBUF1 ;取十位值LCALLTABSETBP2.0CLRP2.1MOVXR0,AMOVA,#0DH ;选通十位的值CLRP2.0MOVXR0,A ;显示十位LCALLDELAY10MS ;显示延时MOVA,DBUF2 ;取个位值LCALLTABSETBP2.0MOVXR0,AMOVA,#0CH ;选通个位的值CLRP2.0MOVXR0,A ;显示十位LCALLDELAY10MS ;显示延时MOVA,DBUF3 ;取十分位的值LCALLTABSETBP2.0MOVXR0,AMOVA,#0BH ;选通十分位的值CLRP2.0MOVXR0,A ;显示十分位LCALLDELAY10MS ;显示延时RET ;返回;12MHZ时钟频率下的10MS延时子程序DELAY10MS:MOVR6,#10DELAY:MOVR7,#250DELAY1:NOPNOPDJNZR7,DELAY1DJNZR6,DELAYRET;12MHZ时钟频率下的30

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论