18B20测温时读取到的温度数据怎么转换!

18B20测温时读取到的温度数据怎么转换!,第1张

ORG 0000H

单片机内存分配申明!

TEMPER_L EQU 29H用于保存读出温度的低8位

TEMPER_H EQU 28H用于保存读出温度的高8位

FLAG1EQU 38H是否检测到DS18B20标志位

a_bitequ 20h 数码管个位数存放内存位置

b_bitequ 21h 数码管十位数存放内存位置

进行温度显示缺毁拦,这里我们考虑用网站提供的两位数码管来显示温度

显示范围00到99度,显示精度为1度

因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位

将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度

这个转化温度的方法非常简洁无需乘于0.0625系数

MAIN: LCALL GET_TEMPER调用读温度子程序

MOV A,29H

MOV C,40H将28H中伏胡的最低位移入C

RRC A

MOV C,41H

RRC A

MOV C,42H

RRC A

MOV C,43H

RRC A

MOV 29H,A

LCALL DISPLAY调用数码管显示子程序

JNB FLAG1,MM1

CLR P1.0

SJMP MAIN

MM1:SETB P1.0

SJMP MAIN

INIT_1820: SETB P2.2 这是DS18B20复位初始化子程序

NOP

CLR P2.2

MOV R1,#3 主机发出延时537微秒的复位低脉冲

TSR1: MOV R0,#107

DJNZ R0,$

DJNZ R1,TSR1

SETB P2.2 然后拉高数据线

NOP

NOP

NOP

MOV R0,#25H

TSR2: JNB P2.2,TSR3 等待DS18B20回应

DJNZ R0,TSR2

LJMP TSR4 延时

TSR3: SETB FLAG1 置标志位,表示DS1820存在

LJMP TSR5

TSR4: CLR FLAG1 清标志位,表示DS1820不存在

LJMP TSR7

TSR5: MOV R0,#70

TSR6: DJNZ R0,TSR6 时序要求延时一段时间

TSR7: SETB P2.2

RET

GET_TEMPER: SETB P2.2 读出转换后的温度值

LCALL INIT_1820先复位DS18B20

JB FLAG1,TSS2

RET 判断DS1820是否存在?若DS18B20不存在则返回

TSS2: MOV A,#0CCH 跳过ROM匹配

LCALL WRITE_1820

MOV A,#44H 发出温度转换命令

LCALL WRITE_1820

LCALL DISPLAY 这余尘里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒

LCALL INIT_1820准备读温度前先复位

MOV A,#0CCH 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH 发出读温度命令

LCALL WRITE_1820

LCALL READ_18200将读出的温度数据保存到35H/36H

RET

WRITE_1820: MOV R2,#8写DS18B20的子程序(有具体的时序要求),一共8位数据

CLR C

WR1:CLR P2.2

MOV R3,#5

DJNZ R3,$

RRC A

MOV P2.2,C

MOV R3,#21

DJNZ R3,$

SETB P2.2

NOP

DJNZ R2,WR1

SETB P2.2

RET

READ_18200: MOV R4,#2 读DS18B20的程序,从DS18B20中读出两个字节的温度数据,将温度高位和低位从DS18B20中读出

MOV R1,#29H 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00: MOV R2,#8数据一共有8位

RE01: CLR C

SETB P2.2

NOP

NOP

CLR P2.2

NOP

NOP

NOP

SETB P2.2

MOV R3,#8

RE10: DJNZ R3,RE10

MOV C,P2.2

MOV R3,#21

RE20: DJNZ R3,RE20

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

display:mov a,29H显示子程序将29H中的十六进制数转换成10进制

mov b,#10 10进制/10=10进制

div ab

mov b_bit,a 十位在a

mov a_bit,b 个位在b

mov dptr,#numtab 指定查表启始地址

mov r0,#4

dpl1: mov r1,#250 显示1000次

dplop: mov a,a_bit 取个位数

MOVC A,@A+DPTR 查个位数的7段代码

mov p0,a 送出个位的7段代码

clr p2.6 开个位显示

acall d1ms 显示1ms

setb p2.6

mov a,b_bit 取十位数

MOVC A,@A+DPTR 查十位数的7段代码

mov p0,a 送出十位的7段代码

clr p2.7 开十位显示

acall d1ms 显示1ms

setb p2.7

djnz r1,dplop 100次没完循环

djnz r0,dpl1 4个100次没完循环

ret

D1MS: MOV R7,#80 1MS延时

DJNZ R7,$

RET

numtab: DB 0C0H,0F9H,0A4H,0B0H, 099H, 092H, 082H,0F8H 080H, 090H 实验板上的7段数码管0~9数字的共阴显示代码

end

要键盘干什么

#include <msp430x44x.h>

#define CPU_F ((double)1048500)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define SEGE 0X80

#define SEGH 0X40

#define SEGF 0X20

#define SEGC 0X10

#define SEGG 0X08

#define SEGD 0X04

#define SEGB 0X02

#define SEGA 0X01

const unsigned char digit[10] = {

SEGA|SEGB|SEGC|SEGD|SEGE|SEGF, /* "0" LCD segments a+b+c+d+e+f */

0x12, /* "1" */

0x8F, /* "2" */

0x1F, /* "3" */

0x3A, /* "4" */

0x3D, /* "5" */

0xBD, /* "6" */

0x13, /* "7" */

0xBF, /* "8" */

0x3F /隐誉灶* "虚蔽9" */

}

#define DQ1 P3OUT|=BIT4

#define DQ0 P3OUT&=~BIT4

float Temper=0.0

int temperature=0

unsigned char Error = 0

//----------------------------------

//功能:us 级别延时

// n=10,则延时10*5+6=56uS

//----------------------------------

void DelayNus(unsigned int n)

{

while(n--){}

}

//-----------------------------------

//功能:写18B20

//-----------------------------------

void Write_18B20(unsigned char n)

{

unsigned char i

for(i=0i<8i++)

{ P3DIR |= BIT4

DQ0

delay_us(13)//延时13us 左右

if((n&0X01)==0X01) DQ1

else DQ0

n=n>>1

delay_us(50)//延灶扮时50us 以上

DQ1

}

}

//------------------------------------

//功能:读取18B20

//------------------------------------

unsigned char Read_18B20(void)

{

unsigned char i

unsigned char temp

for(i=0i<8i++)

{

temp=temp>>1

DQ0

_NOP()//延时1us

DQ1

_NOP()_NOP()//延时5us

_NOP()_NOP()_NOP()

P3DIR&=~BIT4

if((P3IN&BIT4)==0)

{

temp=temp&0x7F

}else

{

temp=temp|0x80

}

delay_us(40)//延时40us

P3DIR|=BIT4

DQ1

}

returntemp

}

//-----------------------------------

void Init (void)

{

DQ0

delay_us(600)//延时500us

DQ1

delay_us(100)//延时90us

P3DIR&=~BIT4

if((P3IN&BIT4)==BIT4)//0001 1111b=1f

{

Error =1 //失败1

P4DIR|=BIT4

}else

{

Error = 0//初始化成功

P4DIR|=BIT4

DQ1

}

}

//----------------------------------

void Skip(void)

{

Write_18B20(0xcc)

}

//----------------------------------

void Convert (void)

{

Write_18B20(0x44)

}

//----------------------------------

void ReadDo (void)

{

Write_18B20(0xbe)

}

//----------------------------------

void ReadTemp (void)

{

char temp_low,temp_high//温度值

temp_low=Read_18B20()//读低位

temp_high=Read_18B20()//读高位

temperature=(temp_high&0x0f)

temperature<<=8

temperature|=temp_low

Temper=temperature*0.0625

}

void GetTemp(void){

Init()

Skip()

Convert()

delay_ms(500)

delay_ms(500)

delay_ms(500)//延时1s以上

Init()

Skip()

ReadDo()

ReadTemp()

}

void InitLcd(void){

LCDCTL = LCDON + LCD4MUX + LCDSG0_1 // LCD on, 4-Mux, segments S0-S15

BTCTL = BT_fLCD_DIV128 // LCD clock freq is ACLK/128

P5SEL = 0xFC// Select P5.2-7 as Com and Rxx

}

void display_number(unsigned long value, int start, int width)

{

int i

for (i = 0 i <width i++)

{

LCDMEM[7 + i - start] = digit[value%10]// remainder = character in table to display

value /= 10

}

}

void Lcd_Clr(void)

{

volatile unsigned char i

for (i=0i<7i++)

{

LCDMEM[i] = 0

}

}

void main(void)

{

WDTCTL = WDTPW + WDTHOLD// 停狗

P3DIR |=BIT4

DQ1

InitLcd()

Lcd_Clr()

while(1)

{

GetTemp()

display_number((unsigned long int)(Temper*1000),7,5)

LCDMEM[3] |= SEGH

}

}

********************************************************

************************显视温度************************

********************************************************

COUNT DATA30H 地址计数常数

WENDU DATA32H 实际温度地址

WENDUD DATA33H 温度低位地址

WENDUG DATA34H 温度高位地址

SDWDG DATA35H 设定高温度地址

SDWDD DATA36H 设定低温度地址

----------------------------------------------------------------

RS EQUP2.0

RW EQUP2.1

E EQUP2.2

PSB EQUP2.3

RST EQUP2.5

SHUJU EQUP3.3

K1 EQUP1.4 按键1,设定温度值老升腊减1

K2 EQUP1.5 按键2,设定温度笑培值加1

K3 EQUP1.6 按键3,确定修改和确定退出

============================================================

ORG 0000H

JMP MAIN

ORG 0040H

============================================================

MAIN: CLR P3.7

LCALL SET_LCD 初始化 LCD 12864

LCALL W18B20 初始化18B20

LCALL CWD

********************************************************

WANG: LCALL W18B20 初始化18B20

LCALL DU18B20 读18B20温度

LCALL S18B20 送温度显视

LCALL ANJIAN 按键程序

LJMPWANG

==============================================================

对 LCD12864 做初始化侍滑设置

==============================================================

SET_LCD:

SETB PSB 通讯方式为8位数据并口

MOV A,#34H34H--扩充指令 *** 作

LCALL SEND_I

MOV A,#30H30H--8bit控制界面,基本指令 *** 作

LCALL SEND_I

MOV A,#01H清除显示

LCALL SEND_I

MOV A,#06H指定在资料写入或读取时,光标的移动方向

LCALL SEND_I DDRAM 的地址计数器(AC)加1

MOV A,#0CH开显示,关光标,不闪烁

LCALL SEND_I

RET

==============================================================

写指令子程序

RS=0,RW=0,E=高脉冲,D0-D7=指令码

==============================================================

SEND_I: LCALL CHK_BUSY

CLR RS

CLR RW

MOV P0,A

SETB E

NOP

NOP

CLR E

RET

==============================================================

测忙碌子程序

RS=0,RW=1,E=H,D0-D7=状态字

==============================================================

CHK_BUSY:

MOV P0,#0FFH测忙碌子程序

CLR RS

SETB RW

SETB E

JB P0.7,$

CLR E

RET

==============================================================

把 DS18B20 EEROM 里的温度报警值拷贝回暂存器(暂时用不到)

==============================================================

CWD: LCALL W18B20

MOV A,#0CCH跳过ROM匹配

LCALL XIEB20

MOV A,#0B8H把EEROM里的温度报警值拷贝回暂存器

LCALL XIEB20

RET

***************************************************

DS18B20 复位与检测子程序

SHUJU=1 OK, SHUJU=0 ERROR

****************************************************

W18B20: SETBSHUJU

NOP

CLR SHUJU

MOV R0,#64H 主机发出延时600微秒的复位低脉冲

MOV R1,#03H

W11: DJNZR0,$

MOV R0,#64H

DJNZR1,W11

SETBSHUJU 然后拉高数据线

NOP

MOV R0,#25H

WW2: JNB SHUJU,WW3 等待DS18B20回应

DJNZR0,WW2

JMP WW4 延时

WW3:SETB20H.0 置标志位,表示DS1820存在

JMP WW5

WW4: CLR 20H.0 清标志位,表示DS1820不存在

JMP WW6

WW5: MOV R0,#064H

DJNZR0,$时序要求延时一段时间

WW6: SETBSHUJU

JNB 20H.0,AAAA DS18B20出错

RET

==============================================================

DS18B20错误时LCD显示子程序

==============================================================

AAAA: MOV DPTR,#M_ERROR1 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#80H 第一行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

MOV DPTR,#M_ERROR2 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#90H 第二行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

MOV DPTR,#M_ERROR3 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#88H 第三行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

MOV DPTR,#M_ERROR4 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#98H 第四行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

LCALL MING1

RET

--------------------------------------------------------------

读18B20温度

***********************************************************

DU18B20:

MOV A,#0CCH

LCALL XIEB20

MOV A,#44H 发出温度转换命令

LCALL XIEB20

LCALL W18B20

MOV A,#0CCH

LCALL XIEB20 写18B20指令

MOV A,#0BEH 发出读温度命令

LCALL XIEB20

LCALL WDSJ温度数据

RET

===========================================================

写入18B20指令

===========================================================

XIEB20: MOV R2,#8 一共8位数据

CLR CY

XIE: CLR SHUJU 开始写入DS18B20总线要处于复位(低)状态

MOV R3,#09

DJNZR3,$总线复位保持18微妙以上

RRC A 把一个字节DATA 分成8个BIT环移给C

MOV SHUJU,C 写入一个BIT

MOV R3,#23

DJNZR3,$等待46微妙

SETBSHUJU 重新释放总线

NOP

DJNZR2,XIE 写入下一个BIT

SETBSHUJU

RET

******************************************************

读温度子程序

从DS18B20中读出温度低位、高位,

存入33H,34H,35H,36H

****************************************************

WDSJ: MOV R4,#04H

MOV R1,#33H 存入33H,34H

RE00: MOV R2,#8

RE01: CLR C

SETBSHUJU

NOP

NOP

CLR SHUJU读前总线保持为低

NOP

NOP

NOP

SETBSHUJU开始读总线释放

MOV R3,#07 延时15微妙

DJNZR3,$

MOV C,SHUJU 从DS18B20总线读得一个BIT

MOV R3,#23

DJNZR3,$ 等待46微妙

RRC A把读得的位值环移给A

DJNZR2,RE01 读下一个BIT

MOV @R1,A

INC R1

DJNZR4,RE00

LCALL WDCZ

RET

==============================================================

处理入水口实际水温度 BCD 码子程序(未考虑百位和负温度值)

整数部分:取出 WENDUD 高四位和 WENDUG 低四位进行重新组合

小数部分:取出 TEMPL1 低四位,查小数码表

小数部分:73H;个位:74H;十位:75H

==============================================================

WDCZ:

MOV A,WENDUD

ANL A,#0FH 取出小数部分

MOV B,#10 将TEMP_L的低四位X10/16得小数后一位数.

MUL AB

MOV B,#16

DIV AB

MOV 73H,A 小数部分 BCD

MOV A,WENDUD整数部分

ANL A,#0F0H 取出高四位

SWAP A

MOV WENDUD,A

MOV A,WENDUG取出低四位

ANL A,#0FH

SWAP A

ORL A,WENDUD重新组合温度数据

MOV WENDU,A 重新组合的温度数据存入WENDU

LCALL HEX2BCD1

MOV WENDUD,A(A)=十位数和个位数

ANL A,#0F0H

SWAP A

MOV 75H,A 十位数 BCD

MOV A,WENDUD

ANL A,#0FH

MOV 74H,A 个位数 BCD

RET

==============================================================

单字节十六进制转BCD

入口:(A)=单字节十六进制的温度值

出口:(A)=十位数和个位数

==============================================================

HEX2BCD1:

MOV B,#0AH

DIV AB

SWAP A

ORL A,B (A)=个位数和十位数

RET

**********************************************************

**********************送显示******************************

**********************************************************

S18B20:

MOV DPTR,#M_OK2 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#80H第一行起始地址

LCALL SEND_I 调用写指令子程序

LCALL QUSHU

LCALL SHOW_D 显示设定的恒温水温度值

MOV DPTR,#M_OK1 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#90H第二行起始地址

LCALL SEND_I 调用写指令子程序

LCALL QUSHU

LCALL SHOW_G 显示设定的恒温水温度值

MOV DPTR,#M_OK3 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#88H第三行起始地址

LCALL SEND_I 调用写指令子程序

LCALL QUSHU

LCALL SHOW_S 显示实际温度值

MOV DPTR,#M_OK4指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#98H 第四行起始地址

LCALL SEND_I 调用写指令子程序

LCALL QUSHU

RET

==============================================================

显示恒温水温度值子程序

==============================================================

SHOW_G: MOV A,#86H设置显示位置

LCALL SEND_I

MOV A,SDWDG

MOV B,#0AH

DIV AB

ADD A,#30H十位数转换为 ASCII 码

LCALL SEND_D 送显示

MOV A,B 个位数

ADD A,#30H个位数转换为 ASCII 码

LCALL SEND_D 送显示显示恒温水温度值子程序

MOV A,#87H设置显示位置

LCALL SEND_I

MOV A,#0A1H 显示温度标记℃

LCALL SEND_D

MOV A,#0E6H

LCALL SEND_D

SHOW_D: MOV A,#96H设置显示位置

LCALL SEND_I

MOV A,SDWDD

MOV B,#0AH

DIV AB

ADD A,#30H十位数转换为 ASCII 码

LCALL SEND_D 送显示

MOV A,B 个位数

ADD A,#30H个位数转换为 ASCII 码

LCALL SEND_D 送显示显示恒温水温度值子程序

MOV A,#97H设置显示位置

LCALL SEND_I

MOV A,#0A1H 显示温度标记℃

LCALL SEND_D

MOV A,#0E6H

LCALL SEND_D

RET

==============================================================

LCD12864 显示实际温度值子程序

==============================================================

SHOW_S: MOV A,#8DH设置显示位置

LCALL SEND_I

MOV A,75H 加载十位数据

CJNE A,#00H,CONV2

CONV1: MOV A,#" "十位数等于0显示空格

LCALL SEND_D 送显示

JMP CONV3

CONV2: ADD A,#30H 十位数转换成ASCII码

LCALL SEND_D 显示数据

CONV3: MOV A,74H 个位

ADD A,#30H个位数转换成ASCII码

CALL SEND_D 送显示

MOV A,#'.'

CALL SEND_D 送显示

MOV A,73H 加载小数位

ADD A,#30H小数位转换成ASCII码

CALL SEND_D 送显示

MOV A,#8FH显示温度标记℃

CALL SEND_I

MOV A,#0A1H

CALL SEND_D

MOV A,#0E6H

CALL SEND_D

RET

==============================================================

取数子程序

==============================================================

QUSHU: CLR A

MOVC A,@A+DPTR 查表取数据

LCALL SEND_D 送显示

INC DPTR

DJNZ COUNT,QUSHU

RET

==============================================================

写数据子程序

RS=1,RW=0,E=高脉冲,D0-D7=数据

==============================================================

SEND_D: LCALL CHK_BUSY 写数据子程序

SETB RS

CLR RW

MOV P0,A

SETB E

NOP

NOP

CLR E

RET

--------------------------------------------------------------

MING1: SETB P3.7

LCALL YS

CLR P3.7

RET

YS:MOV R5,#8FH

YS1: MOV R6,#0FFH

YS2: DJNZR6,$

DJNZR5,YS1

RET

************************按键程序***********************

ANJIAN: JB K3,ANJIAN_0 按键K3确定修改

LCALL YS 防抖动

JB K3,ANJIAN_0

LCALL MING1

LCALL BBBB

JNB K3,$

ANJI_1: JB K2,JIAN_2 按键K2设定值加1

LCALL YS 防抖动

JB K2,JIAN_2

LCALL MING1

MOV A,SDWDG

INC A

MOV SDWDG,A

CLR C

CJNE A,#63H,JIAN_01

JMP JIAN_02

JIAN_01:JC JIAN_02

MOV SDWDG,#00H

JIAN_02:

LCALL BBBB

JNB K2,$

JIAN_2: JB K1,ANJI_3 按键K1设定值减1

LCALL YS 防抖动

JB K1,ANJI_3

LCALL MING1

MOV A,SDWDG

DEC A

MOV SDWDG,A

CLR C

CJNE A,#63H,JIAN_21

JIAN_21:JC JIAN_22

MOV SDWDG,#63H

JIAN_22:JNB K1,$

LCALL BBBB

ANJI_3: JB K3,ANJI_1 按键K3确定退出

LCALL YS 防抖动

JB K3,ANJI_1

LCALL MING1

LCALL CCCC

JNB K3,$

LJMP ANJI_4

ANJIAN_0:LJMP ANJIAN_9

ANJI_4: JB K2,JIAN_5 按键K2设定值加1

LCALL YS 防抖动

JB K2,JIAN_5

LCALL MING1

MOV A,SDWDD

INC A

MOV SDWDD,A

CLR C

CJNE A,#63H,JIAN_31

JMP JIAN_32

JIAN_31:JC JIAN_32

MOV SDWDD,#00H

JIAN_32:LCALL CCCC

JNB K2,$

JIAN_5: JB K1,ANJI_6 按键K1设定值减1

LCALL YS 防抖动

JB K1,ANJI_6

LCALL MING1

MOV A,SDWDD

DEC A

MOV SDWDD,A

CLR C

CJNE A,#63H,JIAN_41

JIAN_41:JC JIAN_42

MOV SDWDD,#63H

JIAN_42:JNB K1,$

LCALL CCCC

ANJI_6: JB K3,ANJI_4 按键K3确定退出

LCALL YS 防抖动

JB K3,ANJI_4

LCALL MING1

JNB K3,$

ANJIAN_9:LCALL CUN

RET

==============================================================

重新对 DS18B20 初始化

将设定的温度报警值写入 DS18B20

==============================================================

CUN:LCALL W18b20

MOV A,#0CCH 跳过ROM匹配

LCALL XIEB20

MOV A,#4EH写暂存寄存器

LCALL XIEB20

MOV A,SDWDG

LCALL XIEB20

MOV A,SDWDD

LCALL XIEB20

MOV A,#7FH12位精确度

LCALL XIEB20

LCALL W18B20 把 DS18B20 暂存器里的温度报警值拷贝到EEROM

MOV A,#0CCH跳过ROM匹配

LCALL XIEB20

MOV A,#48H 把暂存器里的温度报警值拷贝到EEROM

LCALL XIEB20

RET

--------------------------------------------------------------

show_g1:MOV A,#93H设置显示位置

LCALL SEND_I

MOV A,SDWDG

MOV B,#0AH

DIV AB

ADD A,#30H十位数转换为 ASCII 码

LCALL SEND_D 送显示

MOV A,B 个位数

ADD A,#30H个位数转换为 ASCII 码

LCALL SEND_D 送显示显示恒温水温度值子程序

MOV A,#94H设置显示位置

LCALL SEND_I

MOV A,#0A1H 显示温度标记℃

LCALL SEND_D

MOV A,#0E6H

LCALL SEND_D

RET

BBBB:

MOV DPTR,#M_ERRORA 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#80H 第一行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

MOV DPTR,#M_ERRORB 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#90H 第二行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

lcall show_g1

LJMP DDDD

CCCC:

MOV DPTR,#M_ERRORC 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#80H 第一行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

MOV DPTR,#M_ERRORD 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#90H 第二行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

lcall show_d

DDDD: MOV DPTR,#M_ERROR3 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#88H 第三行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

MOV DPTR,#M_ERROR4 指针指到显示信息区

MOV COUNT,#10H 地址计数器设为16

MOV A,#98H 第四行起始地址

LCALL SEND_I调用写指令子程序

LCALL QUSHU

RET

--------------------------------------------------------------

M_OK1: DB '设定低温度:' 显示在第一行

M_OK2: DB '设定高温度:' 显示在第二行

M_OK3: DB '实际温度: ' 显示在第三行

M_OK4: DB ' QQ:80908900 ' 显示在第四行

M_ERRORA: DB ' 设定高温度! ' 显示在第一行

M_ERRORB: DB '' 显示在第二行

M_ERRORC: DB ' 设定低温度! ' 显示在第一行

M_ERRORD: DB ' ' 显示在第二行

M_ERROR1: DB ' 温度探头错误!' 显示在第一行

M_ERROR2: DB '请检查!' 显示在第二行

M_ERROR3: DB '风也有情' 显示在第三行

M_ERROR4: DB ' QQ:80908900 ' 显示在第四行

*************************************************************

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12402833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存