华东交通大学 08机制4班 邱婷 班号:09 单片机开发系统结课论文
附录2
源程序
;************************************************************ ;name :ADC0809的应用 ;功能 :温度检测
; p0口接0809的数字量输出口 ; p1口接数码管段输出口 ; p2按键接口
;************************************************************ HIGN DATA 20H ;存放温度上限 LOW DATA 21H ;存放温度下限
vstr DATA 22H ;存放标准位,0时设置上限 A_BIT DATA 30H B_BIT DATA 31H C_BIT DATA 32H D_BIT DATA 33H START BIT p2.7 ;p3.0接0809的开始选通端口,输出允许控制端 EOC BIT p3.2 ;外部中断0,当0809数据转换完成触发 ;---------------------程序开始----------------------------- org 0000h ORG 0003H LJMP INT0 ajmp main main:
nop lcall proinit loop: setb start ;启动A/D转换 nop clr start MOV A,30H CJNZ A,20H,BAOJING ;超过上限 CJNZ A,21H,BAOJING ;低于下限 lcall display ;处理后显示 LCALL KEY ;调用键盘函数 ajmp main
;---------------------初始化子程序------------------- proinit: mov 20h,#20 mov 21h,#00 mov 22h,#00 mov 30h,#00 mov 31h,#00 mov 32h,#00 mov 33h,#00 ret
;-----------------送显前的数值转换程序--------------- dat_cov: setb start ;打开输出允许控制端 mov a,p0 nop nop clr start
mov b,#51 div ab ;除以51即是乘以5除以255 mov 30h,a ;30H中是整数部分 mov a,b mov b,#5 div ab
11
华东交通大学 08机制4班 邱婷 班号:09 单片机开发系统结课论文
mov 31h,a mov a,b mov b,#2 mul ab mov 32h,a ret
;================================= ; 键盘程序; SB1为功能键; SB2设置数据+; SB3设置数据- ;================================= KEY: JNB P2.0,KEY1 JB P2.0,$ ;按键松开取键值 MOV A,22H ;有功能键按下 INC A CJNZ A,#2,EXIT MOV 22H,A
KEY1: JNB P2.1,KEY2 JB P2.1,$ ;等待按键弹起 CJNE 23H,#0,XIAXIAN MOV A,20H ;设置上限加 INC A MOV 20H,A XIAXIAN: MOV A,21H ;设置下限加 INC A MOV 21H,A KEY2: JNB P2.1,EXIT JB P2.1,$ ;等待按键弹起 CJNE 23H,#0,XIAXIAN0 MOV A,20H ;设置上限加 DEC A MOV 20H,A XIAXIAN: MOV A,21H ;设置下限加 DEC A MOV 21H,A EXIT: MOV 22H,#00 RET
;================================= ;中断程序
;================================= INT0: lcall dat_cov ;数据处理 CLR F0 RET
;================================= ;报警函数
;================================= BAOJING: SETB P2.4 ;光报警 SETB P2.5 ;声报警 LCALL DELAY CLR P2.4 CLR P2.5 RET
;================================= ;数码管显示部分
12
华东交通大学 08机制4班 邱婷 班号:09 单片机开发系统结课论文
;入口参数:A,B,C
;使用资源:DPTR,P3,P1 ,R7
;================================= DISPLAY: NOP ;第一位显示
MOV DPTR,#TAB ;指定查表启始地址 MOV A,A_BIT ;取第一位数
MOVC A,@A+DPTR ;查第一位数的7段代码 ORL A,#10H SETB P3.4
MOV P1,A ;送出第一位的7段代码 LCALL delay8ms ;显示8ms CLR P3.4;开第一位显示 ;第二位显示
MOV DPTR,#TAB ;指定查表启始地址 MOV A,B_BIT ;取第二位数
MOVC A,@A+DPTR ;查第二位数的7段代码 SETB P3.5
MOV P1,A ;送出第二位的7段代码 LCALL delay8ms ;显示8ms CLR P3.5;开第二位显示 ;第三位位显示
JB FUHAO,XSBW MOV A,#01H JMP XSBW2
XSBW: MOV A,C_BIT ;取第三位数 JNZ XSBW1 MOV A,#00H JMP XSBW2
XSBW1: MOVC A,@A+DPTR ;查第三位数的7段代码 XSBW2: MOV P1,A ;送出第三位的7段代码 SETB P3.6
LCALL delay8ms ;显示8ms CLR P3.6;开第三位显示 ;第四位位显示
MOV A,D_BIT ;取第四位数
MOVC A,@A+DPTR ;查第四位数的7段代码 SETB P3.3
MOV P1,A ;送出第四位的7段代码 LCALL delay8ms ;显示8ms CLR P3.3;开第四位显示 RET
;================================= ;显示延时,延时8ms
;================================= delay8ms: mov r6,#1
delay1: mov r7,#10 djnz r7,$ djnz r6,delay1 ret
;================================= ;数码管段码数据表;共阴数码管
;=================================
TAB: DB 3fH,4fH,06H,5bH,66H,6dH,6BH,07H,7fH,6FH end
13