18b20+1602LCD测温实验汇编.docx
- 文档编号:11655499
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:24
- 大小:19.28KB
18b20+1602LCD测温实验汇编.docx
《18b20+1602LCD测温实验汇编.docx》由会员分享,可在线阅读,更多相关《18b20+1602LCD测温实验汇编.docx(24页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 18 b20 1602 LCD 测温 实验 汇编