数字温度传感器测温显示系统说明书 下载本文

北京交通大学

机械与电子控制工程学院

DJNZ R2,RD2 MOV @R1,A INC R1 DJNZ R4,RD1 RET ;键扫描程序

KEY: JNB KEY1,KKKEY2 ;判断key1键是否按下,未按下则查看key2键是否按下

JB KEY1,$ ;等待key1键释放

MOV A,30H ;将温度最低限值送入累加器 ADD A,#01H ;给累加器值加一

CJNE A,#100,NEXT1 ;将累加器值与100相比,不相等执行next1

MOV A,#00H ;如果相等,将累加器重置为0 NEXT1: CLR C ;清楚进位标志

CJNE A,31H,DPLAY1 ;将累加器内容与温度最高限相比,不相等执行dplay1

SJMP RETURN

DPLAY1: JC DPLAY3 ;判断进位标志,为1即累加器内容小于最高限温度值,则dplay3

MOV A,30H ;否则,将最低限温度值仍给a DPLAY3: MOV 30H,A SJMP RETURN

KKKEY2: JNB KEY2,KKKEY3 ;判断key2键是否按下,未按下则查看key3键是否按下

JB KEY2,$ ;等待key2键释放

MOV A,30H ;将温度最低限值送入累加器 JZ NEXT3 ;判断累加器内容是否为0,为0执行next3,即保持原值

CLR C ;累加器内容不为0,进位标志清零 SUBB A,#01H ;将累加器内容减一

MOV 30H,A ;将减一所得数送回最低限温度单元 SJMP RETURN ;

NEXT3: MOV 30H,#00 ;累加器内容为0,则让最低限温度单元内容继续保持0

25 北京交通大学

机械与电子控制工程学院

SJMP RETURN ;

KKKEY3: JNB KEY3,KKKEY4 ;判断key3键是否按下,未按下则查看key4键是否按下

JB KEY3,$ ;等待key3键释放

MOV A,31H ;将温度最高限值送入累加器 ADD A,#01H ;给累加器值加一

CJNE A,#100,NEXT2 ;将累加器内容与100相比,不相等执行next2

MOV A,#99 ;如果相等,将99送给累加器

NEXT2: MOV 31H,A ;将累加器内容送给最高限温度单元

SJMP RETURN ;

KKKEY4: JNB KEY4,RETURN ;判断key4键是否按下,未按下则返回

JB KEY4,$ ;等待key4键释放

MOV A,31H ;将温度最高限值送入累加器

JZ RETURN ;判断累加器内容是否为0,如果为0,则返回,保持原值不变

CLR C ;累加器内容不为0,则将进位标志清零 SUBB A,#01H ;将累加器内容减一

CLR C ;再清除进位标志,准备比较累加器内容与最低限温度单元内容的大小关系

CJNE A,30H,DPLAY2 ;将减一所得数与最低限温度单元内容比较,不相等执行dplay2

MOV A,31H ;如果相等,则将最高限温度值保持 SJMP RETURN ;

DPLAY2: JC RETURN ;判断进位标志,进位标志为1,即保持原值

MOV 31H,A ;进位标志为0,即累加器内容(最高温度限)大于最低限温度值,则将累加器内容送给

SJMP RETURN ; RETURN: RET ;显示子程序

DISPLAY:MOV A,30H ;将30H(最低限温度)内容送入累加器

MOV B,#10 ; DIV AB ;

MOV 6CH,A ;将十位数(最低限温度高位)存入6CH单元

26 北京交通大学

机械与电子控制工程学院

MOV 6DH,B ;个位数(最低限温度低位)存入6DH单元 MOV A,31H ;将30H(最低限温度)内容送入累加器 MOV B,#10 ; DIV AB ;

MOV 6EH,A ;将十位数(最高限温度高位)存入6CH单元 MOV 6FH,B ;个位数(最高限温度低位)存入6DH单元 MOV R0,#6CH ;将要显示内容首地址赋给R0

MOV

LD0:

R2,#01H ;将控制最左一位亮的数赋给R2

MOV A,R2 ;

MOV DPTR,#0103H ;赋C口地址

MOVX @DPTR,A ;将累加器(控制某位亮)内容送到C口 MOV DPTR,#DTAB ;将查表程序首地址给dptr MOV A,@R0 ;将要显示的内容送给累加器 MOVC A,@A+DPTR ;进行地址修正 MOV DPTR,#0102H ;赋B口地址

MOVX @DPTR,A ;将要显示的内容送到B口实现显示 MOV R7,#02H ;延时子程序准备

ACALL INC MOV JB RL MOV AJMP

;显示错误子程序

DISPLAY2: MOV 79H,#79H ;将error对应的字形码存入6个单元

MOV 7AH,#31H ; MOV 7BH,#31H ; MOV 7CH,#3FH ; MOV 7DH,#31H ; MOV 7EH,#00H ; MOV R0,#79H ; MOV

R2,#01H ;

MOV A,R2 ;

27 DL ;调用延时子程序

R0 ;将R0增一,准备显示下一个内容 A,R2 ;

ACC.5,LD1 ;判断一边是否显示完,则返回 A ;如果没显示完,修正显示位继续显示 R2,A ; LD0 ;

LD1: RET ;

北京交通大学

机械与电子控制工程学院

LD2: MOV

MOVX

DPTR,#0103H ; @DPTR,A ;

MOV A,@R0 ; MOV DPTR,#0102H ; MOVX @DPTR,A ; MOV R7,#02H ;

ACALL INC MOV JB RL MOV AJMP

DL ; R0 ; A,R2 ; ACC.5,LD3 ; A ; R2,A ; LD2 ;

LD3: RET ; ;检测当前温度是否超出范围程序

CHECK: CLR C ;将进位标志清零

MOV A,22H ;把当前温度值送入累加器 CJNE A,30H,CHECK1 ;将当前温度与最低限温度比较 ;

GOON: CLR P1.7 ;当前温度大于或者相等最低限温度,将二极管(绿灯)熄灭

CLR C ;清零进位标志 CJNE A,31H,CHECK2 ;再与最高限温度比较

CLR P1.6 ;当前温度与最高限温度相等,将二极管(黄灯)熄灭or蜂鸣器关掉

SJMP BACK ;

CHECK2: JC PREBACK ;判断进位标志,如果为1,即当前温度小于最高限温度,将二极管(黄灯)熄灭or蜂鸣器关掉

SETB P1.6 ;不为1,即当前温度大于最高限温度,则启动蜂鸣器or打开黄色发光二极管

SJMP BACK ;

CHECK1: JNC GOON ;判断进位标志,如果为0,即当前温度大于最低限温度,转到goon。

SETB P1.7 ;进位标志为1,即当前温度小于最低限温度,即打开绿色发光二极管

28 北京交通大学

机械与电子控制工程学院

SJMP BACK ;

PREBACK: CLR P1.6 ;即当前温度小于最高限温度,将二极管(黄灯)熄灭or蜂鸣器关掉

BACK: RET ; ;查表程序 DTAB: DB

DB DB DB

;延时子程序 DL: MOV DL6 : DJNZ

DJNZ

R6,#0FFH ; R6,DL6 ; R7,DL ; 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9, 39H,5EH,79H,71H,73H,21H ; 31H,6EH,40H,3EH,00H,00H ;

RET ; END ;

29