导航:首页 > 源码编译 > u2 wcmov

u2 wcmov

发布时间:2024-05-11 20:51:23

Ⅰ 以AT89C51单片机和DS18B20实现温度检测显示并报警的程序和电路图,显示用M016L液晶模块显示

汇编语言程序:

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

;程序适合单个DS18B20和MCS-51单片机的连接,晶振为12MHz

;测量的温度范围-55℃~+99℃,温度精确到小数点后一位

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

TEMPER_L EQU 30H ;存放从DS18B20中读出的高、低位温度值

TEMPER_H EQU 31H

TEMPER_NUM EQU 32H ;存放温度转换后的整数部分

TEMPER_POT EQU 33H ;存放温度转换后的小数部分

FLAG0 EQU 34H ;FLAG0存放温度的符号

DQ EQU P1.0 ;DS18B20数据线

RS BIT P1.7 ;LCD1602控制线定义

RW BIT P1.6

E BIT P1.5

SkipDs18b20 EQU 0CCH ;DS18B20跳过ROM命令

StartDs18b20 EQU 44H ;DS18B20温度变换命令

ReadDs EQU 0BEH ;DS18B20读暂存器命令

ORG0000H

SJMPMAIN

ORG0040H

MAIN:MOVSP,#60H

ACALL LCD_INIT

MOV A,#80H ;lcd第1行第1列开始显示temperature:

ACALL WC51R

MOV A,#'t'

ACALL WC51DDR

MOV A,#'e'

ACALL WC51DDR

MOV A,#'m'

ACALL WC51DDR

MOV A,#'p'

ACALL WC51DDR

MOV A,#'e'

ACALL WC51DDR

MOV A,#'r'

ACALL WC51DDR

MOV A,#'a'

ACALL WC51DDR

MOV A,#'t'

ACALL WC51DDR

MOV A,#'u'

ACALL WC51DDR

MOV A,#'r'

ACALL WC51DDR

MOV A,#'e'

ACALL WC51DDR

MOV A,#':'

ACALL WC51DDR

REP:LCALLGET_TEMPER ;读出转换后的温度值

LCALLTEMPER_COV

MOV A,#0c6H ;lcd第2行第7列开始显示温度

ACALL WC51R

MOV A,FLAG0 ;显示符号

ACALL WC51DDR

MOV A,TEMPER_NUM ;温度整数拆分成十位和个位显示

MOV B,#10

DIV AB

ADD A,#30H

CJNE A,#30H,REP1 ;如果十位为0不显示

MOV A,#20H

REP1:ACALL WC51DDR

MOV A,B

ADD A,#30H

ACALL WC51DDR

MOV A,#'.' ;显示小数点

ACALL WC51DDR

MOV DPTR,#TABLE

MOV A,TEMPER_POT ;显示小数部分

MOVC A,@A+DPTR

ACALL WC51DDR

LJMPREP

;DS18B20复位程序

DS18B20_INIT:SETB DQ

NOP

NOP

CLR DQ

MOVR7,#9

INIT_DELAY:CALL DELAY60US

DJNZ R7,INIT_DELAY

SETB DQ

CALL DELAY60US

CALL DELAY60US

MOV C,DQ

JC ERROR

CALL DELAY60US

CALL DELAY60US

CALL DELAY60US

CALL DELAY60US

RET

ERROR:CLR DQ

SJMP DS18B20_INIT

RET

;读DS18B20一个字节到累加器A程序

READ_BYTE: MOV R7,#08H

SETB DQ

NOP

NOP

LOOP:CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R6,#07H

DJNZ R6,$

MOV C,DQ

CALL DELAY60US

RRC A

SETB DQ

DJNZ R7,LOOP

CALL DELAY60US

CALL DELAY60US

RET

;累加器A写到DS18B20程序

WRITE_BYTE:MOV R7,#08H

SETB DQ

NOP

NOP

LOOP1:CLR DQ

MOV R6,#07H

DJNZ R6,$

RRC A

MOV DQ,C

CALL DELAY60US

SETB DQ

DJNZ R7,LOOP1

RET

DELAY60US:MOV R6,#1EH

DJNZ R6,$

RET

;读温度程序

GET_TEMPER:CALL DS18B20_INIT ;DS18B20复位程序

MOV A,#0CCH ;DS18B20跳过ROM命令

CALL WRITE_BYTE

CALL DELAY60US

CALL DELAY60US

MOV A,#44H ;DS18B20温度变换命令

CALL WRITE_BYTE

CALL DELAY60US

CALL DS18B20_INIT ;DS18B20复位程序

MOV A,#0CCH ;DS18B20跳过ROM命令

CALL WRITE_BYTE

CALL DELAY60US

MOV A,#0BEH ;DS18B20读暂存器命令

CALL WRITE_BYTE

CALL DELAY60US

CALL READ_BYTE ;读温度低字节

MOV TEMPER_L,A

CALL READ_BYTE ;读温度高字节

MOV TEMPER_H,A

RET

;将从DS18B20中读出的温度拆分成整数和小数

TEMPER_COV:

MOV FLAG0,#'+' ;设当前温度为正

MOV A,TEMPER_H

SUBB A,#0F8H

JC TEM0 ;看温度值是否为负?不是,转

MOV FLAG0,#'-' ;是,置FLAG0为'-'

MOV A,TEMPER_L

CPL A

ADD A,#01

MOV TEMPER_L,A

MOV A,TEMPER_H

CPL A

ADDC A,#00

MOV TEMPER_H,A

TEM0:

MOV A,TEMPER_L ;存放小数部分到TEMPER_POT

ANL A,#0FH

MOV TEMPER_POT,A

MOV A,TEMPER_L ;存放小数部分到TEMPER_NUM

ANL A,#0F0H

SWAP A

MOV TEMPER_NUM,A

MOV A,TEMPER_H

SWAP A

ORL A,TEMPER_NUM

MOV TEMPER_NUM,A

RET

;LCD初始化子程序

LCD_INIT:MOV A,#00000001H ;清屏

ACALL WC51R

MOV A,#00111000B ;使用8位数据,显示两行,使用5×7的字型

LCALL WC51R

MOV A,#00001100B ;显示器开,光标关,字符不闪烁

LCALL WC51R

MOV A,#00000110B ;字符不动,光标自动右移一格

LCALL WC51R

RET

;检查忙子程序

F_BUSY:PUSH ACC ;保护现场

MOV P2,#0FFH

CLR RS

SETB RW

WAIT: CLR E

SETB E

JB P2.7,WAIT ;忙,等待

POP ACC ;不忙,恢复现场

RET

;写入命令子程序

WC51R: ACALL F_BUSY

CLR E

CLR RS

CLR RW

SETB E

MOV P2,ACC

CLR E

RET

;写入数据子程序

WC51DDR:ACALL F_BUSY

CLR E

SETB RS

CLR RW

SETB E

MOV P2,ACC

CLR E

RET

TABLE:DB 30H,31H,31H,32H,33H,33H,34H,34H

DB 35H,36H,36H,37H,38H,38H,39H,39H ;小数温度转换表

END

C语言程序:

//程序适合单个DS18B20和MCS-51单片机的连接,晶振为12MHz

//测量的温度范围-55℃~+99℃,温度精确到小数点后一位

#include<REG52.H>

#defineucharunsignedchar

#defineuintunsignedint

sbit DQ=P1^0; //定义端口

sbit RS=P1^7;

sbit RW=P1^6;

sbit EN=P1^5;

union{

ucharc[2];

uintx;

}temp;

ucharflag;//flag为温度值的正负号标志单元,"1"表示为负值,"0"时表示为正值。

uintcc,cc2;//变量cc中保存读出的温度值

floatcc1;

ucharbuff1[13]={"temperature:"};

ucharbuff2[6]={"+00.0"};

//检查忙函数

void fbusy()

{

P2=0xff;

RS=0;

RW=1;

EN=1;

EN=0;

while((P2&0x80))

{

EN=0;

EN=1;

}

}

//写命令函数

void wc51r(uchar j)

{

fbusy();

EN=0;

RS=0;

RW=0;

EN=1;

P2=j;

EN=0;

}

//写数据函数

void wc51ddr(uchar j)

{

fbusy(); //读状态;

EN=0;

RS=1;

RW=0;

EN=1;

P2=j;

EN=0;

}

void init()

{

wc51r(0x01); //清屏

wc51r(0x38); //使用8位数据,显示两行,使用5*7的字型

wc51r(0x0c); //显示器开,光标开,字符不闪烁

wc51r(0x06); //字符不动,光标自动右移一格

}

voiddelay(uintuseconds) //延时程序

{

for(;useconds>0;useconds--);

}

ucharow_reset(void) //复位

{

ucharpresence;

DQ=0; //DQ低电平

delay(50); //480ms

DQ=1; //DQ高电平

delay(3); //等待

presence=DQ; //presence信号

delay(25);

return(presence); //0允许,1禁止

}

ucharread_byte(void) //从单总线上读取一个字节

{

uchari;

ucharvalue=0;

for(i=8;i>0;i--)

{

value>>=1;

DQ=0;

DQ=1;

delay(1);

if(DQ)value|=0x80;

delay(6);

}

return(value);

}

voidwrite_byte(ucharval) //向单总线上写一个字节

{

uchari;

for(i=8;i>0;i--) //一次写一字节

{

DQ=0;

DQ=val&0x01;

delay(5);

DQ=1;

val=val/2;

}

delay(5);

}

voidRead_Temperature(void) //读取温度

{

ow_reset();

write_byte(0xCC); //跳过ROM

write_byte(0xBE); //读

temp.c[1]=read_byte();

temp.c[0]=read_byte();

ow_reset();

write_byte(0xCC);

write_byte(0x44); //开始

return;

}

voidmain() //主程序

{

uchar k;

delay(10);

EA=0;

flag=0;

init();

wc51r(0x80); //写入显示缓冲区起始地址为第1行第1列

for(k=0;k<13;k++) //第一行显示提示信息"currenttempis:"

{wc51ddr(buff1[k]);}

while(1)

{

delay(10000);

Read_Temperature(); //读取双字节温度

cc=temp.c[0]*256.0+temp.c[1];

if (temp.c[0]>0xf8){flag=1;cc=~cc+1;}elseflag=0;

cc1=cc*0.0625; //计算出温度值

cc2=cc1*100; //放大100倍,放在整型变量中便于取数字

buff2[1]=cc2/1000+0x30;if(buff2[1]==0x30)buff2[1]=0x20;//取出十位,转换成字符,如果十位是0不显示。

buff2[2]=cc2/100-(cc2/1000)*10+0x30;//取出个位,转换成字符

buff2[4]=cc2/10-(cc2/100)*10+0x30;//取出小数点后一位,转换成字符

if(flag==1)buff2[0]='-';elsebuff2[0]='+';

wc51r(0xc5); //写入显示缓冲区起始地址为第2行第6列

for(k=0;k<6;k++) //第二行显示温度

{wc51ddr(buff2[k]);}

}

}

python代码运行助手怎么打开

python代码运行助手是能在网页上运行python语言的工具。因为python的运行环境在很多教程里都是用dos的,黑乎乎的界面看的有点简陋,所以出了这python代码运行助手,作为ide。

实际上,python代码运行助手界面只能算及格分,如果要找ide,推荐使用jupyter。jupyter被集成到ANACONDA里,只要安装了anacoda就能使用了。

回到这个问题:

1、要打开这运行助手首先要下载一个learning.py,如果找不到可以复制如下代码另存为“learning.py”,编辑器用sublime、或者notepad++。

#!/usr/bin/envpython3
#-*-coding:utf-8-*-

r'''
learning.py

APython3tutorialfromhttp://www.liaoxuefeng.com

Usage:

python3learning.py
'''

importsys

defcheck_version():
v=sys.version_info
ifv.major==3andv.minor>=4:
returnTrue
print('Yourcurrentpythonis%d.%d.PleaseusePython3.4.'%(v.major,v.minor))
returnFalse

ifnotcheck_version():
exit(1)

importos,io,json,subprocess,tempfile
fromurllibimportparse
fromwsgiref.simple_serverimportmake_server

EXEC=sys.executable
PORT=39093
HOST='local.liaoxuefeng.com:%d'%PORT
TEMP=tempfile.mkdtemp(suffix='_py',prefix='learn_python_')
INDEX=0

defmain():
httpd=make_server('127.0.0.1',PORT,application)
print('ReadyforPythoncodeonport%d...'%PORT)
httpd.serve_forever()

defget_name():
globalINDEX
INDEX=INDEX+1
return'test_%d'%INDEX

defwrite_py(name,code):
fpath=os.path.join(TEMP,'%s.py'%name)
withopen(fpath,'w',encoding='utf-8')asf:
f.write(code)
print('Codewroteto:%s'%fpath)
returnfpath

defdecode(s):
try:
returns.decode('utf-8')
exceptUnicodeDecodeError:
returns.decode('gbk')

defapplication(environ,start_response):
host=environ.get('HTTP_HOST')
method=environ.get('REQUEST_METHOD')
path=environ.get('PATH_INFO')
ifmethod=='GET'andpath=='/':
start_response('200OK',[('Content-Type','text/html')])
return[b'<html><head><title>LearningPython</title></head><body><formmethod="post"action="/run"><textareaname="code"style="width:90%;height:600px"></textarea><p><buttontype="submit">Run</button></p></form></body></html>']
ifmethod=='GET'andpath=='/env':
start_response('200OK',[('Content-Type','text/html')])
L=[b'<html><head><title>ENV</title></head><body>']
fork,vinenviron.items():
p='<p>%s=%s'%(k,str(v))
L.append(p.encode('utf-8'))
L.append(b'</html>')
returnL
ifhost!=HOSTormethod!='POST'orpath!='/run'ornotenviron.get('CONTENT_TYPE','').lower().startswith('application/x-www-form-urlencoded'):
start_response('400BadRequest',[('Content-Type','application/json')])
return[b'{"error":"bad_request"}']
s=environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))
qs=parse.parse_qs(s.decode('utf-8'))
ifnot'code'inqs:
start_response('400BadRequest',[('Content-Type','application/json')])
return[b'{"error":"invalid_params"}']
name=qs['name'][0]if'name'inqselseget_name()
code=qs['code'][0]
headers=[('Content-Type','application/json')]
origin=environ.get('HTTP_ORIGIN','')
iforigin.find('.liaoxuefeng.com')==-1:
start_response('400BadRequest',[('Content-Type','application/json')])
return[b'{"error":"invalid_origin"}']
headers.append(('Access-Control-Allow-Origin',origin))
start_response('200OK',headers)
r=dict()
try:
fpath=write_py(name,code)
print('Execute:%s%s'%(EXEC,fpath))
r['output']=decode(subprocess.check_output([EXEC,fpath],stderr=subprocess.STDOUT,timeout=5))
exceptsubprocess.CalledProcessErrorase:
r=dict(error='Exception',output=decode(e.output))
exceptsubprocess.TimeoutExpiredase:
r=dict(error='Timeout',output='执行超时')
exceptsubprocess.CalledProcessErrorase:
r=dict(error='Error',output='执行错误')
print('Executedone.')
return[json.mps(r).encode('utf-8')]

if__name__=='__main__':
main()

2,再用一个记事本写如下的代码:

@echooff
pythonlearning.py
pause

另存为‘运行.bat’

3、把“运行.bat”和“learning.py”放到同一目录下,

Ⅲ 初级单片机综合题求解答,请用汇编语言

地址低8位有u2锁存后提供,高3位由p2口的低3位提供,共11bit地址,E端接P26,所以

  1. 6116在64k地址范围的地址为, 最基本地址是,4000h-47ffh 共 2k byte

    但由于P2.7,P2.6,P2.5,P2.5悬空,可以是任意值,都可读写到6116,所以6116有多重地址. 即0000h-ffffh的64k中,除了p2.6=0,的地址,其他地址均可分成多个2k的块,每个2k的块都可读写到同一个6116的数据。

2. mov A,#5ah

MOV DPH,#40H

MOV DPL,#0

movx @DPTR,A

MOV A,#0A5H

MOV DPH,#47H

MOV DPL,#0FFH

movx @DPTR,A

3. MOV A,#0

MOV DPH,#40H

MOV DPL,#0

MOV R0,#7h

LOOP1:

MOV R1,#0ffh

loop2:

movx @dptr,a

inc dptr

djnz R1,LOOP2

djnz R0,LOOP1

阅读全文

与u2 wcmov相关的资料

热点内容
双分录核算法反映什么 浏览:210
ubuntuphpaptget 浏览:256
安卓手机快充需要什么数据线 浏览:795
程序中存在未转换未编译部分 浏览:323
编译汇编链接优化 浏览:83
程序员打字和作家哪个打字快 浏览:579
安卓手机怎么用cad命令行 浏览:385
2200工程机接收命令瞬间消失 浏览:255
压缩机工艺管是多大的 浏览:314
安卓刷什么系统稳定 浏览:37
程序员写炫酷代码 浏览:933
大话存储pdf 浏览:526
中铭机器人怎么编程 浏览:812
把字母变为数字的加密法 浏览:523
噬血狂袭第三季哪个app能看 浏览:422
江苏螺杆压缩机 浏览:980
android底部弹出对话框 浏览:502
怎么查服务器同行fc号 浏览:1001
什么服务器云鸟最便宜 浏览:221
vs编译器反汇编 浏览:571