18b20+1602LCD测温实验汇编.docx

上传人:b****6 文档编号:7997309 上传时间:2023-05-12 格式:DOCX 页数:24 大小:19.28KB
下载 相关 举报
18b20+1602LCD测温实验汇编.docx_第1页
第1页 / 共24页
18b20+1602LCD测温实验汇编.docx_第2页
第2页 / 共24页
18b20+1602LCD测温实验汇编.docx_第3页
第3页 / 共24页
18b20+1602LCD测温实验汇编.docx_第4页
第4页 / 共24页
18b20+1602LCD测温实验汇编.docx_第5页
第5页 / 共24页
18b20+1602LCD测温实验汇编.docx_第6页
第6页 / 共24页
18b20+1602LCD测温实验汇编.docx_第7页
第7页 / 共24页
18b20+1602LCD测温实验汇编.docx_第8页
第8页 / 共24页
18b20+1602LCD测温实验汇编.docx_第9页
第9页 / 共24页
18b20+1602LCD测温实验汇编.docx_第10页
第10页 / 共24页
18b20+1602LCD测温实验汇编.docx_第11页
第11页 / 共24页
18b20+1602LCD测温实验汇编.docx_第12页
第12页 / 共24页
18b20+1602LCD测温实验汇编.docx_第13页
第13页 / 共24页
18b20+1602LCD测温实验汇编.docx_第14页
第14页 / 共24页
18b20+1602LCD测温实验汇编.docx_第15页
第15页 / 共24页
18b20+1602LCD测温实验汇编.docx_第16页
第16页 / 共24页
18b20+1602LCD测温实验汇编.docx_第17页
第17页 / 共24页
18b20+1602LCD测温实验汇编.docx_第18页
第18页 / 共24页
18b20+1602LCD测温实验汇编.docx_第19页
第19页 / 共24页
18b20+1602LCD测温实验汇编.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

18b20+1602LCD测温实验汇编.docx

《18b20+1602LCD测温实验汇编.docx》由会员分享,可在线阅读,更多相关《18b20+1602LCD测温实验汇编.docx(24页珍藏版)》请在冰点文库上搜索。

18b20+1602LCD测温实验汇编.docx

18b20+1602LCD测温实验汇编

ORG00H

JMPINPORT

ORG0BH

;JMPTM0

ORG30H

INPORT:

TMP_HEQU29H;温度高字节

TMP_LEQU28H

RSEQUP3.0;确定具体硬件的连接方式

RWEQUP3.1;确定具体硬件的连接方式

EEQUP3.2;确定具体硬件的连接方式

KEY_SETEQUP1.1

KEY_UPEQUP1.0

KEY_DOWNEQUP1.2

DS18B20_FLAGEQU70h

SET_FLAGEQU01H

FLASH_FLAGEQU02H

K_ONEQU03H

MOV25H,#0FFH;位00h-07h全部置1

MOVR4,#14

MOVTMOD,#01H

MOVTL0,#0B0H

MOVTH0,#3CH

MOVIE,#10000010B;(8:

总控,2:

定时0溢出中断控制位)

LCD_INIT:

;15MS

MOVR6,#30

CALLDELAY_BY_R6;15ms

MOVP0,#38H;写38h

ACALLWRITE_NOT_CHECK_BUSY

MOVR6,#10

CALLDELAY_BY_R6;5ms

MOVP0,#38H

ACALLWRITE_NOT_CHECK_BUSY

MOVR6,#10

CALLDELAY_BY_R6;5ms

;-----设转初始值

SETBE

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE;调用写入命令子程序

MOVP0,#00111000B;8位2行5x7点阵

ACALLENABLE;调用写入命令子程序

MOVP0,#00001110B;显示器开、光标开、光标允许闪烁

ACALLENABLE;调用写入命令子程序

MOVP0,#00000110B;文字不动,光标自动右移

ACALLENABLE;调用写入命令子程序

STORE_DEFINE_DATA:

;把自定义字符存入CGRAM

MOVP0,#40H;CGRAM起始地址

ACALLENABLE

MOVR2,#8

MOVDPTR,#DEFINE_DATA

MOVR3,#0

NEXTP:

MOVA,R3

MOVCA,@A+DPTR

MOVP0,A

CALLWRITE_DATA_TO_LCD

INCR3

DJNZR2,NEXTP

;****************主程序*******************

START:

CALLRESET

JNB70h,MAIN1

MOVP0,#0C0H;写入显示起始地址(第二行第一个位置)

ACALLENABLE;调用写入命令子程序

DS18B20_NOT_READY:

CALLDISPLAY_18B20_ERROR

LOOP1:

CALLRESET

JNB70h,MAIN1

JMPLOOP1;如果栓测不到18b20程序下面不执行

MAIN1:

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE;调用写入命令子程序

CALLDISPLAY_WATING;等待第一次结果.

CALLSKIP_ROM

CALLTEMP_CONV

CALLDELAY_600MS

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE;调用写入命令子程序

MAIN:

CALLRESET

CALLSKIP_ROM

CALLRECALL_EPROM;调入温度限值.

MAIN_MAIN:

CALLREAD_TEMP;读18b20的内部温度

JB70h,DS18B20_NOT_READY;中途失败!

CALLDATA_CONV;数据转换

CALLDISPLAY_18B20_TEMP

CALLDISPLAY_18B20_TEMP_XZ;显示限值.

CALLCONTROL

JNBKEY_SET,S1

JMPMAIN_MAIN

CONTROL:

JNB03H,CONTROL1

LCALLDISPLAY_OFF

AJMPCONTROL_END

CONTROL1:

LCALLDISPLAY_ON

CONTROL_END:

RET

S1:

LCALLDELAY_2MS;延时消抖

JBKEY_SET,MAIN

JNBKEY_SET,$

LCALLKEY;有键输入

AJMPMAIN

;***************键处理程序******************

KEY:

SETB01H

KEY_IN:

;有键输入的程序

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE;调用写入命令子程序

JNB01H,DSP_SET_L;01如果是0,则显示L:

DSP_SET_H:

;显示高温的限值

MOVP0,#10000000B

ACALLDISPLAY_SETING_TEMP_H;显示SETING_TEMP:

H..

MOVDPTR,#LED_DATA

MOVR1,42H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度限值低位

MOVDPTR,#LED_DATA

MOVR1,41H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度限值低位

MOVDPTR,#LED_DATA

MOVR1,40H;码表初值

MOVR0,#1;字数

CALLDISPLAY

AJMPKEY_SELECT

DSP_SET_L:

;显示低温的限值

MOVP0,#10000000B

ACALLDISPLAY_SETING_TEMP_L;显示SETING_TEMP:

L..

MOVDPTR,#LED_DATA

MOVR1,45H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度限值低位

MOVDPTR,#LED_DATA

MOVR1,44H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度限值低位

MOVDPTR,#LED_DATA

MOVR1,43H;码表初值

MOVR0,#1;字数

CALLDISPLAY

AJMPKEY_SELECT

KEY_SELECT:

JNBKEY_SET,K_SET

JNBKEY_UP,K_UP

JNBKEY_DOWN,K_DOWN

AJMPKEY_SELECT

K_SET:

LCALLDELAY_2MS

lcalldelay_2ms

lcalldelay_2ms

JBKEY_SET,KEY_SELECT

MOVR5,#250

KSET_LOOP:

JBKEY_SET,KEY_CPL

LCALLDELAY_2MS

LCALLDELAY_2MS

DJNZR5,KSET_LOOP

AJMPEXT_KEY

K_UP:

LCALLDELAY_2MS

lcalldelay_2ms

JBKEY_UP,KEY_SELECT

JNB01H,K_UP_LOW

K_UP_HIGH:

JNBKEY_UP,$

MOVA,2AH

INCA

MOV2AH,A

JMPK_UP_DOWN_END

K_UP_LOW:

JNBKEY_UP,$

MOVA,2BH

INCA

MOV2BH,A

JMPK_UP_DOWN_END

;*********************

K_DOWN:

LCALLDELAY_2MS

JBKEY_DOWN,KEY_SELECT

JNB01H,K_DOWN_LOW

K_DOWN_HIGH:

JNBKEY_DOWN,$

MOVA,2AH

DECA

MOV2AH,A

JMPK_UP_DOWN_END

K_DOWN_LOW:

JNBKEY_DOWN,$

MOVA,2BH

DECA

MOV2BH,A

K_UP_DOWN_END:

MOVA,2AH

MOVB,#10

DIVAB

MOV40H,B;高温限值个位

MOVB,#10

DIVAB

MOV41H,B;十位

MOV42H,A;百位

;----------------------------

MOVA,2BH

MOVB,#10

DIVAB

MOV43H,B;低温限值位个位

MOVB,#10

DIVAB

MOV44H,B;十位

MOV45H,A;百位

AJMPKEY_IN

KEY_CPL:

CPL01H

AJMPKEY_IN

EXT_KEY:

MOVP0,#00000001B;清屏并光标复位

CALLENABLE;调用写入命令子程序

CALLDISPLAY_SAVE

CALLRESET

CALLSKIP_ROM

MOVA,#4EH

CALLWRITE

MOVA,2AH;2A数据送高温限值寄存器.

CALLWRITE

MOVA,2BH;2B数据送低温限什寄存器.

CALLWRITE

CALLRESET

CALLSKIP_ROM

MOVA,#48H;将高低温限值寄存器数据送18B20-EPROM保存.

CALLWRITE

A_END:

RET

;***************18b20指令子程序**********************

READ_TEMP:

;读1820内部温度子程序.

CALLRESET

JB70h,EXT1

CALLSKIP_ROM

CALLTEMP_CONV;温度AD变换

CALLDELAY_600MS;时........

CALLRESET

CALLSKIP_ROM

CALLTEMP_GET;发取温度的命令

CALLREAD;接收...

EXT1:

RET

SKIP_ROM:

;跳过ROM检测

MOVA,#0CCH;#0CCH为跳过rom命令

CALLWRITE

RET

RECALL_EPROM:

;重调Eprom

MOVA,#0B8H

CALLWRITE

RET

TEMP_CONV:

MOVA,#44H;AD变换

CALLWRITE

RET

TEMP_GET:

MOVA,#0BEH;读18b20命令

CALLWRITE

RET

;****************************18B20基本时序子程序*********************************

RESET:

;初始化子程序

SETBP2.7

NOP

CLRP2.7;拉低

MOVR3,#150;*4=600US

CALLDELAY_BY_R3

SETBP2.7;拉高

MOVR3,#15;60US

CALLDELAY_BY_R3

MOVR3,#60;4个周期*60=240US内检测

A1:

JNBP2.7,A2;检测到低平信号

DJNZR3,A1;如果没有应答的低电平信号,返回A1重新检测,超时后下一行,

SETB70h;DS1820不存在.

JMPA3

A2:

CLR70h

MOVR3,120;240US;等恢复时间2*120=240us

DJNZR3,$

A3:

RET

;------------------------

WRITE:

MOVR2,#8;一个字节为8位

CLRC;C位清0C位用来放A的一位数据,用移位的方法放入C

B1:

SETBP2.7

NOP

CLRP2.7

MOVR3,#4;16US

CALLDELAY_BY_R3

RRCA;把A中的数送入C

MOVP2.7,C;把C送入总线

MOVR3,#12;48US(一位数据的发送:

60us

CALLDELAY_BY_R3

SETBP2.7;拉高1us结束一位

NOP

DJNZR2,B1

RET

READ:

MOVR1,#4;接收4个字节数据依次是1.低位2.高位.3.高限4.低限

MOVR0,#28H;低位放28H;高位放29h(1.28H,2.29H3.2AH4.2BH)

C0:

MOVR2,#8;一字节数据8位

C1:

CLRC;清除C

SETBP2.7

NOP

NOP

CLRP2.7;拉低.

NOP;1us秒后拉高?

SETBP2.7

MOVR3,#4;16us后采数据

CALLDELAY_BY_R3

MOVC,P2.7;读出18b20的数据

RRCA;移入A

MOVR3,#12;48US恢复时间

CALLDELAY_BY_R3

DJNZR2,C1;一个字节收完

MOV@R0,A;移入存储位

INCR0;下一位;29h

DJNZR1,C0;全部取完吗?

没有重复

RET

;*********************************************************************************

;*****************LCD_控制命令***************

DISPLAY:

MOVA,R1

MOVCA,@A+DPTR

MOVP0,A

CALLWRITE_DATA_TO_LCD

INCR1

DJNZR0,DISPLAY

RET

WRITE_NOT_CHECK_BUSY:

SETBE

NOP

NOP

CLRRS;写入控制命令的子程序

CLRRW

CLRE

RET

ENABLE:

SETBE

NOP

NOP

CLRRS;写入控制命令的子程序

CLRRW

CLRE

ACALLTEST_BUSY

SETBE

RET

TEST_BUSY:

SETBE

NOP

NOP

MOVP0,#0FFH;判断液晶显示器是否忙的子程序

CLRRS

SETBRW

CLRE

NOP

SETBE

JBP0.7,TEST_BUSY;如果P0.7为高电平表示忙就循环等待

RET

WRITE_DATA_TO_LCD:

SETBE

NOP

NOP

SETBRS;RS=1

CLRRW;RW=0;准备写入数据

CLRE;E=0;执行显示命令

ACALLTEST_BUSY;判断液晶模块是否忙?

SETBE;E=1;显示完成,程序停车

RET

;***************************数据转换***************************

DATA_CONV:

;数据转换

MOVA,28H;低字节

ANLA,#0FH;去除高位

MOVB,#6;乘6得到实际数值的100倍.

MULAB

MOVB,#10

DIVAB

MOV33H,A;小数位高

MOV32H,B;小数位低

MOVA,28H

MOVC,29H.0;29h高位的低4字节

RRCA

MOVC,29H.1

RRCA

MOVC,29H.2

RRCA

MOVC,29H.3

RRCA

MOV28H,A;重新合成.结果存在28H.

MOVA,28H

MOVB,#10

DIVAB

MOV26H,A;整数位高

MOV25H,B;整数位低

;-------------------------

MOVA,2AH

MOVB,#10

DIVAB

MOV40H,B;高温限值个位

MOVB,#10

DIVAB

MOV41H,B;十位

MOV42H,A;百位

;----------------------------

MOVA,2BH

MOVB,#10

DIVAB

MOV43H,B;低温限值位个位

MOVB,#10

DIVAB

MOV44H,B;十位

MOV45H,A;百位

CLRC

MOVA,28H;现温度值与高温限值比较

SUBBA,2AH

JCBIG;如果高.则关机器

CLRC

MOVA,2BH;现温度与低温限值比较

SUBBA,28H

JCX_BIG;低温限值比现温高,则开机器

AJMPCONVERT_END

BIG:

CLRK_ON

AJMPCONVERT_END

X_BIG:

SETBK_ON

CONVERT_END:

RET

;********************显示温度*************************

DISPLAY_18B20_TEMP:

;LCD_显示子程序

MOVP0,#10000000B;显示位置

ACALLENABLE;执行指令

MOVDPTR,#TAB3;显示'WENDU:

'

MOVR1,#0;码表初值

MOVR0,#7;字数

CALLDISPLAY

;---------------显示温度值高位

MOVDPTR,#LED_DATA

MOVR1,26H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度值低位

MOVDPTR,#LED_DATA

MOVR1,25H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示小数点

MOVDPTR,#DOT

MOVR1,#0;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度值小数高位

MOVDPTR,#LED_DATA

MOVR1,33H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度值小数低位

MOVDPTR,#LED_DATA

MOVR1,32H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示单位度

MOVDPTR,#SIGN

MOVR1,#0;码表初值

MOVR0,#2;字数

CALLDISPLAY

RET

;******************显示限值.*****************

DISPLAY_18B20_TEMP_XZ:

MOVP0,#11000000B;显示位置

ACALLENABLE;执行指令

MOVDPTR,#TAB_L;显示'L:

'

MOVR1,#0;码表初值

MOVR0,#2;字数

CALLDISPLAY

;---------------显示温度限值高位

MOVDPTR,#LED_DATA

MOVR1,45H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示温度限值低位

MOVDPTR,#LED_DATA

MOVR1,44H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;-----------------

MOVDPTR,#LED_DATA

MOVR1,43H;码表初值

MOVR0,#1;字数

CALLDISPLAY

MOVP0,#11000111B;显示位置

ACALLENABLE

;----

MOVDPTR,#TAB_H;显示'H:

'

MOVR1,#0;码表初值

MOVR0,#2;字数

CALLDISPLAY

;---------------显示高温度限值高位

MOVDPTR,#LED_DATA

MOVR1,42H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;---------------显示高温度限值低位

MOVDPTR,#LED_DATA

MOVR1,41H;码表初值

MOVR0,#1;字数

CALLDISPLAY

;-------------------

MOVDPTR,#LED_DATA

MOVR1,40H;码表初值

MOVR0,#1;字数

CALLDISPLAY

RET

;**********************提示语**********************

DISPLAY_18B20_HELLO:

MOVP0,#10000000B;显示位置

ACALLENABLE;执行指令

MOVDPTR,#TAB_HELLO

MOVR1,#0;码表初值

MOVR0,#16;字数

CALLDISPLAy

RET

/*

DISPLAY_18B20_TESTING:

MOVP1,#10000000B;显示位置

ACALLENABLE;执行指令

MOVDPTR,#TAB_TESTING

MOVR1,#0;码表初值

MOVR0,#16;字数

CALLDISPLAy

RET

*/

DISPLAY_18B20_ERROR:

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE

MOVDPTR,#TAB1

MOVR1,#0;码表初值

MOVR0,#16;字数

CALLDISPLAy

RET

DISPLAY_WATING:

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE;调用写入命令子程序

MOVP0,#10000000B;显示位置

ACALLENABLE;执行指令

MOVDPTR,#TAB2

MOVR1,#0;码表初值

MOVR0,#13;字数

CALLDISPLAy

RET

DISPLAY_SAVE:

MOVP0,#00000001B;清屏并光标复位

ACALLENABLE;调用写入命令子程序

MOVP0,#10000000B;显示位置

ACALLENABLE;执行指令

MOVDPTR,#TAB_SAVE

MOVR1,#0;码表初值

MOVR0,#10;字数

CALLDISPLAy

RET

DISPLAY_SETING_TEMP_H:

MOVP0,#00000001B;清屏并光标复位

ACALL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2