LCD显示程序Word文档格式.docx
《LCD显示程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《LCD显示程序Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![LCD显示程序Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/7/d6e3c9b7-31e5-4f1f-bd1c-3a98be674e14/d6e3c9b7-31e5-4f1f-bd1c-3a98be674e141.gif)
NOP
**************************************************
读出转换后的温度值
GET_TEMPER:
SETBDQ;
定时入口
BCD:
LCALLINIT_1820
JBFLAG1,S22
LJMPBCD;
若DS18B20不存在则返回
S22:
LCALLDELAY1
MOVA,#0CCH;
跳过ROM匹配------0CC命令
LCALLWRITE_1820
MOVA,#44H;
发出温度转换命令
LCALLWRITE_1820
LCALLD100MS
CBA:
LCALLINIT_1820
JBFLAG1,ABC
LJMPCBA
ABC:
LCALLDELAY1
MOVA,#0CCH;
跳过ROM匹配
MOVA,#0BEH;
发出读温度命令
LCALLREAD_18200;
READ_1820
RET
**************************************************************
读DS18B20的程序,从DS18B20中读出一个字节的数据
READ_1820:
MOVR2,#8
RE1:
CLRC
SETBDQ
NOP
CLRDQ
MOVR3,#7
DJNZR3,$
MOVC,DQ
MOVR3,#23
RRCA
DJNZR2,RE1
******************************************************
写DS18B20的程序
WRITE_1820:
WR1:
MOVR3,#6
MOVDQ,C
DJNZR2,WR1
RET
****************************************************
读DS18B20的程序,从DS18B20中读出两个字节的温度数据
****************************************************
READ_18200:
MOVR4,#2;
将温度高位和低位从DS18B20中读出
MOVR1,#36H;
低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
RE01:
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
将从DS18B20中读出的温度数据进行转换
TEMPER_COV:
MOVA,#0F0H
ANLA,TEMPER_L;
舍去温度低位中小数点后的四位温度数值
SWAPA
MOVTEMPER_NUM,A;
得到低四位
MOVA,TEMPER_L
JNBACC.3,TEMPER_COV1;
四舍五入去温度值
INCTEMPER_NUM
TEMPER_COV1:
MOVA,TEMPER_H
ANLA,#07H
ORLA,TEMPER_NUM;
得到高四位,再与低四位相或得到值
保存变换后的温度数据
LCALLBIN_BCD
将16进制的温度数据转换成压缩BCD码
BIN_BCD:
MOVA,TEMPER_NUM
MOVB,#10
DIVAB
MOVTEMPER_SHI,A
MOVTEMPER_GE,B
DS18B20初始化程序
INIT_1820:
MOVR0,#250
TSR1:
DJNZR0,TSR1;
延时520us
MOVR0,#25H;
96US-25H
TSR2:
DJNZR0,TSR2
JNBDQ,TSR3;
如D0为低则复位成功,DS18B20存在
LJMPTSR4;
延时
TSR3:
SETBFLAG1;
置标志位,表示DS1820存在
LJMPTSR5
TSR4:
CLRFLAG1;
清标志位,表示DS1820不存在
LJMPTSR7
TSR5:
MOVR0,#06BH;
200US
TSR6:
DJNZR0,TSR6;
TSR7:
SETBDQ;
拉高总线
*************************************************
数码显示程序
液晶显示程序
LCDDISP:
movp1,#01h;
清屏
callenrw
movp1,#38h;
设为8位,5*7字 型两行
movp1,#0Ch
movp1,#06h
movp1,#80h
movdptr,#yjtab
callrwram
movp1,#0C0h
movdptr,#yjtab1
W_TEM:
movp1,#0CCh
MOVDPTR,#ASCII
MOVA,TEMPER_SHI
MOVCA,@A+DPTR
MOVP1,A
setbrs
clrrw
clre
callD500us
setbe
MOVA,TEMPER_GE
setbe
RET
enrw:
clrrs
ret
rwram:
movr1,#00h
a1:
mova,r1
movca,@a+dptr
callrwram2
incr1
cjnea,#00h,a1
rwram2:
movp1,a
**************R***********************************
延时子程序
D500us:
MOVR6,#250;
延时500us
DJNZR6,$
DELAY1:
MOVR7,#20H
DJNZR7,$
D100MS:
MOVR6,#200
D2:
MOVR5,#250
DJNZR5,$
DJNZR6,D2
yjtab:
db'
XRFMCS-51'
00h
yjtab1:
db'
temperature:
**`C'
ASCII:
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
end
只是LCD1602的代码
多功能51单片机开发板
LCD1602测试程序
RSEQUP2.0
RWEQUP2.1
EEQUP2.2
LDATAEQUP1
MAIN:
MOVR0,#00H;
R0:
每行显示字符的个数
MOVR1,#80H;
寄存器地址
MOVA,#38H;
设置显示(16×
2)
ACALLWIR
MOVA,#0EH;
开显示,显示光标,光标不闪烁
ACALLWIR
MOVA,#06H;
整屏显示不移动
MOVA,#01H;
显示清屏
MOVDPTR,#LCD
LOOP0:
MOVA,R1;
写地址
INCR1;
地址加一
CJNER1,#90H,TT;
判断第一行写完没有
MOVR1,#0C0H;
若写完,R1=第二行地址
TT:
MOVA,R0
ACALLWDR
INCR0;
计数R0加1
LCALLDELAY1
CJNER0,#20H,LOOP0;
R1不等于32则继续
RE:
AJMPRE
WIR:
ACALLBUSY;
写指令寄存器子程序
CLRE;
初始化
CLRRS
CLRRW
SETBE
MOVLDATA,A
CLRE
WDR:
写数据寄存器子程序
SETBRS
BUSY:
PUSHACC;
检测忙信号子程序
ISBUSY:
CLRE
SETBRW
MOVA,LDATA
JBACC.7,ISBUSY;
ACC.7=1,说明忙
POPACC
ACALLDELAY1
DELAY1:
MOVR6,#5;
D0:
MOVR7,#248
DJNZR7,$
DJNZR6,D0
DELAY2:
MOVR5,#2
D1:
MOVR3,#245
D2:
MOVR4,#245
DJNZR4,$
DJNZR3,D2
DJNZR5,D1
LCD:
DB'
MCS-51TEST'
DB'
XuRuiFeng'
END