51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
1602_LCDAT89S52_18B20实现的温度报警时间可调显示程序
发布时间:2009/5/19  阅读次数:6506  字体大小: 【】 【】【

DATA_CONV:    ;数据转换

     MOV A,24H
SWAP A
ANL A,#0FH
MOV 46H,A
MOV A,24H
ANL A,#0FH
MOV 47H,A

MOV A,23H
SWAP A
ANL A,#0FH
MOV 48H,A
MOV A,23H
ANL A,#0FH
MOV 49H,A

MOV A,22H
SWAP A
ANL A,#0FH
MOV 4AH,A
MOV A,22H
ANL A,#0FH
MOV 4BH,A


MOV A,28H ;低字节
ANL A,#0FH;去除高位
MOV B,#6;乘6得到实际数值的100倍.
MUL AB
MOV B,#10
DIV AB
MOV 33H,A;小数位高
MOV 32H,B; 小数位低
MOV A,28H
MOV C,29H.0 ;29h高位的低4字节
RRC A
MOV C,29H.1
RRC A
MOV C,29H.2
RRC A
MOV C,29H.3
RRC A
MOV 28H,A ;重新合成.结果存在28H.
MOV A,28H
MOV B,#10
DIV AB
MOV 26H,A ;整数位高
MOV 25H,B ;整数位低
;-------------------------
MOV A,2AH
MOV B,#10
DIV AB
MOV 40H,B ;高温限值个位
MOV B,#10
DIV AB
MOV 41H,B;十位
MOV 42H,A;百位
;----------------------------
MOV A,2BH
MOV B,#10
DIV AB
MOV 43H,B ;低温限值位个位
MOV B,#10
DIV AB
MOV 44H,B ;十位
MOV 45H,A ;百位

CLR C ;只在下上限两温度之间才能正常工作
MOV A,28H;现温度值与高温限值比较
SUBB A,2AH
JC BIG ;如果高.则关机器

CLR K_ON
AJMP CONVERT_END
BIG:CLR C
MOV A,2BH;现温度与低温限值比较
SUBB A,28H
JC X_BIG ;低温限值比现温高,则开机器

CLR K_ON
AJMP CONVERT_END

X_BIG:
     SETB K_ON


CONVERT_END:
     RET


DATA_CONV1 :
     MOV A,24H
SWAP A
ANL A,#0FH
MOV 46H,A
MOV A,24H
ANL A,#0FH
MOV 47H,A

MOV A,23H
SWAP A
ANL A,#0FH
MOV 48H,A
MOV A,23H
ANL A,#0FH
MOV 49H,A

MOV A,22H
SWAP A
ANL A,#0FH
MOV 4AH,A
MOV A,22H
ANL A,#0FH
MOV 4BH,A
RET
/*********显示时间TIME字符串及时间值***************/
DISPLAY_TIME: PUSH PSW
MOV P1,#11000000B
LCALL ENABLE
MOV DPTR,#TIME
MOV R1,#0
MOV R0,#6
LCALL DISPLAY
/***************/
MOV DPTR,#LED_DATA
MOV R1,46H //已经是压缩型BCD码了,,但还不是ASCII码
MOV R0,#1
LCALL DISPLAY


MOV DPTR,#LED_DATA
MOV R1,47H //已经是压缩型BCD码了,,但还不是ASCII码
MOV R0,#1
LCALL DISPLAY

MOV DPTR,#MAO
MOV R1,#0
MOV R0,#1
LCALL DISPLAY

MOV DPTR,#LED_DATA
MOV R1,48H //已经是压缩型BCD码了,,但还不是ASCII码
MOV R0,#1
LCALL DISPLAY

MOV DPTR,#LED_DATA
MOV R1,49H //已经是压缩型BCD码了,,但还不是ASCII码
MOV R0,#1
LCALL DISPLAY

MOV DPTR,#MAO
MOV R1,#0
MOV R0,#1
LCALL DISPLAY

MOV DPTR,#LED_DATA
MOV R1,4AH //已经是压缩型BCD码了,,但还不是ASCII码
MOV R0,#1
LCALL DISPLAY

MOV DPTR,#LED_DATA
MOV R1,4BH //已经是压缩型BCD码了,,但还不是ASCII码
MOV R0,#1
LCALL DISPLAY
POP PSW
RET



;********************显示温度*************************
DISPLAY_18B20_TEMP: ;LCD_显示子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB3;显示WENDU:
MOV R1,#0 ;码表初值
MOV R0,#7;字数
LCALL DISPLAY
;---------------显示温度值高位
MOV DPTR,#LED_DATA
MOV R1,26H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示温度值低位
MOV DPTR,#LED_DATA
MOV R1,25H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示小数点
MOV DPTR,#DOT
MOV R1,#0 ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示温度值小数高位
MOV DPTR,#LED_DATA
MOV R1,33H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示温度值小数低位
MOV DPTR,#LED_DATA
MOV R1,32H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示单位度
MOV DPTR,#SIGN
MOV R1,#0 ;码表初值
MOV R0,#2;字数
LCALL DISPLAY
RET



;******************显示限值.*****************
DISPLAY_18B20_TEMP_XZ:
MOV P1,#11000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_L ; 显示L:
MOV R1,#0 ;码表初值
MOV R0,#2;字数
LCALL DISPLAY

;---------------显示温度限值高位
MOV DPTR,#LED_DATA
MOV R1,45H ;码表初值(45H中存的是十进制值)只是一位数百位,通过查表可找出相应ASCII值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示温度限值低位
MOV DPTR,#LED_DATA
MOV R1,44H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;-----------------
MOV DPTR,#LED_DATA
MOV R1,43H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY

MOV P1,#11000111B; 显示位置
LCALL ENABLE
;----
MOV DPTR,#TAB_H ; 显示H:
MOV R1,#0 ;码表初值
MOV R0,#2;字数
LCALL DISPLAY
;---------------显示高温度限值高位
MOV DPTR,#LED_DATA
MOV R1,42H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;---------------显示高温度限值低位
MOV DPTR,#LED_DATA
MOV R1,41H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
;-------------------
MOV DPTR,#LED_DATA
MOV R1,40H ;码表初值
MOV R0,#1;字数
LCALL DISPLAY
RET
;**********************提示语**********************
DISPLAY_18B20_HELLO:
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_HELLO
MOV R1,#0 ;码表初值
MOV R0,#16;字数
LCALL DISPLAy
RET

/*
DISPLAY_18B20_TESTING:
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_TESTING
MOV R1,#0 ;码表初值
MOV R0,#16;字数
LCALL DISPLAy
RET
*/


DISPLAY_18B20_ERROR:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE
MOV DPTR,#TAB1
MOV R1,#0 ;码表初值
MOV R0,#16;字数
LCALL DISPLAy
RET



DISPLAY_WATING:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB2
MOV R1,#0 ;码表初值
MOV R0,#13;字数
LCALL DISPLAy
RET
DISPLAYINT_MUSIC:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#MUSICSTRING
MOV R1,#0 ;码表初值
MOV R0,#16;字数
LCALL DISPLAy
DISPLAY_NAME:
MOV P1,#11000000B; 显示位置
LCALL ENABLE ;执行指令

MOV R1,#0 ;码表初值
MOV R0,#15;字数
LCALL DISPLAy
RET

STOPWATCHB      STOPWATCH     
STOPWATCH_INITB --00:00:00:00---
DISPLAYINT_STOPWATCH_000000:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#STOPWATCH
MOV R1,#0 ;码表初值
MOV R0,#16;字数
LCALL DISPLAy
MOV P1,#11000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#STOPWATCH_INIT
MOV R1,#0 ;码表初值
MOV R0,#16;字数
LCALL DISPLAy
RET


MUSICSTRINGB PLAYING... MUSIC
MUSIC_NAME_15: DB <JUST LOVE YOU>
MUSIC_NAME_8: DB ZHOU_ZAI_XIANG_X
MUSIC_NAME_9: DB SHUI_SHANG_PU_DE
MUSIC_NAME_10: DB SHANG-HAI-TAN    
MUSIC_NAME_11: DB GU-DAN-BEI-P-QIU
MUSIC_NAME_12: DB TAO-HUA-DUO.-KAI
MUSIC_NAME_13: DB DA-CHENG-XIAO_AI
MUSIC_NAME_14: DB -----QIU_FU-----

DISPLAY_SAVE:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_SAVE
MOV R1,#0 ;码表初值
MOV R0,#10;字数
LCALL DISPLAy
RET


DISPLAY_SETING_TEMP_H:
MOV P1,#00000001B ;清屏并光标复位#00000001H是命令哦
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_SETING_TEMP_HMOV R1,#0 ;码表初值
MOV R0,#13;字数
LCALL DISPLAy
RET

DISPLAY_SETING_TEMP_L:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_SETING_TEMP_L
MOV R1,#0 ;码表初值
MOV R0,#13;字数
LCALL DISPLAy
RET
DISPLAY_ALARM_CLOCK_1:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#ALARM_CLOCK_1
MOV R1,#0 ;码表初值
MOV R0,#10;字数
LCALL DISPLAy
RET

DISPLAY_ALARM_CLOCK_2:
MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#ALARM_CLOCK_2
MOV R1,#0 ;码表初值
MOV R0,#10;字数
LCALL DISPLAy
RET

DISPLAY_ALARM_CLOCK_3:

MOV P1,#00000001B ;清屏并光标复位
LCALL ENABLE;调用写入命令子程序
MOV P1,#10000000B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#ALARM_CLOCK_3
MOV R1,#0 ;码表初值
MOV R0,#10;字数
LCALL DISPLAy
RET





ALARM_CLOCK_1:DB AL.CLOCK_1
ALARM_CLOCK_2:DB AL.CLOCK_2
ALARM_CLOCK_3:DB AL.CLOCK_3
ALARM_ON:DB ON
ALARM_OFF:DB OFF
DISPLAY_ALARM_ON:
MOV P1,#10001100B
LCALL ENABLE
MOV DPTR,#ALARM_ON
MOV R1,#0 ;码表初值
MOV R0,#3;字数
LCALL DISPLAy
RET
DISPLAY_ALARM_OFF:
MOV P1,#10001100B
LCALL ENABLE
MOV DPTR,#ALARM_OFF
MOV R1,#0 ;码表初值
MOV R0,#3;字数
LCALL DISPLAy
RET

DISPLAY_ON:
MOV P1,#11001101B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_ON
MOV R1,#0 ;码表初值
MOV R0,#3;字数
LCALL DISPLAy
RET

DISPLAY_OFF:
MOV P1,#11001101B; 显示位置
LCALL ENABLE ;执行指令
MOV DPTR,#TAB_OFF
MOV R1,#0 ;码表初值
MOV R0,#3;字母数
LCALL DISPLAy
RET



/*
ADJ_FLASH:
JB FLASH_FLAG,
MOV P1,#1 ;在显示数字的位置用三个空格..
LCALL ENABLE;
*/
;*****************提示语**********************

TM0USH 28H

PUSH ACC
         PUSH PSW

MOV TL0,#0B0H
            MOV TH0,#3CH
            INC DI_DA
            MOV A,DI_DA
            CJNE A,#14H,DDONE
            MOV DI_DA,#00H
            MOV A,SEC
            ADD A,#01H
            DA A
            MOV SEC,A
            CJNE A,#60H,DDONE
            MOV SEC,#00H
            MOV A,MIN
            ADD A,#01H
            DA A
            MOV MIN,A
            CJNE A,#60H,DDONE
            MOV MIN,#00H
            MOV A,HOUR
            ADD A,#01H
            DA A
            MOV HOUR,A
            CJNE A,#24H,DDONE
            MOV HOUR,#00H
DDONEOP PSW
POP ACC           
POP 28H
            RETI

               INTT0USH 28H
               PUSH ACC
MOV TH1,R1
MOV TL1,R0
CPL P0.2
POP ACC
POP 28H
RETI

TIME_T2:PUSH 28H
PUSH PSW
               PUSH ACC
              CLR TF2            ;TF2需要软件清0,与T1 T0的不一样    
                        MOV A,WATCH_MS
                        ADD A,#1
                        MOV WATCH_MS,A
                        CJNE A,#100,T2_NEXT ;最大值才255的一字节是不能存#100H的,所以
                        MOV A,#0
                        MOV WATCH_MS,A
                        MOV A,WATCH_S
                        ADD A,#1    ;注意不要用INC
                        DA A
                        MOV WATCH_S,A
                        CJNE A,#60H,T2_NEXT
                        MOV A,#0
                        MOV WATCH_S,A
                        MOV A,WATCH_M
                        ADD A,#1
                        DA A
                        MOV WATCH_M,A
                        CJNE A,#60H,T2_NEXT
                        MOV A,#0
                        MOV WATCH_M,A
                        MOV A,WATCH_H
                        ADD A,#1
                        DA A
                        MOV WATCH_H,A
                        CJNE A,#24H,T2_NEXT
                        MOV A,#0
                        MOV WATCH_H,A
                        MOV WATCH_M,A
                        MOV WATCH_S,A
                        MOV WATCH_MS,A ;

T2_NEXT: ;是秒表数据转换程序,把各单元值的十个位分别存到两个单元中 但MS单元是三位的,,所以不可能DA                            
                 MOV A,WATCH_H
SWAP A            ;先存的是十位
ANL A,#0FH
MOV WATCH_H_H,A
MOV A,WATCH_H
ANL A,#0FH
MOV WATCH_H_L,A

MOV A,WATCH_M
SWAP A
ANL A,#0FH
MOV WATCH_M_H,A
MOV A,WATCH_M
ANL A,#0FH
MOV WATCH_M_L,A

MOV A,WATCH_S
SWAP A
ANL A,#0FH
MOV WATCH_S_H,A
MOV A,WATCH_S
ANL A,#0FH
MOV WATCH_S_L,A

MOV A,WATCH_MS
MOV B,#10
DIV AB
MOV WATCH_MS_H,A
MOV WATCH_MS_L,B
;下面所需要的字串
STRII_1:DB ----;执行到了这个地方
;下面是显示秒表值程序要先清屏啊
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
  • 评论人:[BOBO] 时间: [2011/10/27 16:29:40] IP:[222.89.65.20*]
  • 太厉害了,一定得更加努力。。。。

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号