为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

LCD显示程序

2017-09-27 14页 doc 30KB 36阅读

用户头像

is_037433

暂无简介

举报
LCD显示程序LCD显示程序 ;************************************************************************** ;************************************************************** TEMPER_L EQU 36H ;DS18B20 从中读回高位,低位暂存区TEMPER_H EQU 35H ; TEMPER_NUM EQU 60H; 温度值存储 TEMPER_GE EQU 61H TEMPER_SHI E...
LCD显示程序
LCD显示程序 ;************************************************************************** ;************************************************************** TEMPER_L EQU 36H ;DS18B20 从中读回高位,低位暂存区TEMPER_H EQU 35H ; TEMPER_NUM EQU 60H; 温度值存储 TEMPER_GE EQU 61H TEMPER_SHI EQU 62H TEMPER_SAVE EQU 63H FLAG1 BIT 00H FLAG2 BIT 01H RS BIT p2.0; 液晶控制接口 RW BIT p2.1 E BIT p2.2 DQ BIT p3.5; 单总线口 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV SP,#70H LCALL GET_TEMPER LCALL TEMPER_COV LCALL LCDDISP lcall d100ms lcall d100ms LJMP MAIN NOP ;************************************************** ; 读出转换后的温度值 ;************************************************** GET_TEMPER: SETB DQ ; 定时入口 BCD: LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ; DS18B20 若不存在则返回 S22: LCALL DELAY1 MOV A,#0CCH ; ROM------0CC 跳过匹配命令 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 LCALL D100MS CBA:LCALL INIT_1820 JB FLAG1,ABC LJMP CBA ABC:LCALL DELAY1 MOV A,#0CCH ; ROM 跳过匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 ;READ_1820 RET ;************************************************************** ;DS18B20,DS18B20 读的程序从中读出一个字节的数据 ;************************************************************** READ_1820: MOV R2,#8 RE1: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE1 RET ;****************************************************** ;DS18B20 写的程序 ;****************************************************** WRITE_1820: MOV R2,#8 CLR C WR1: CLR DQ MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET ;**************************************************** ;DS18B20,DS18B20 读的程序从中读出两个字节的温度数据 ;**************************************************** READ_18200: MOV R4,#2 ; DS18B20 将温度高位和低位从中读出 MOV R1,#36H ; 36H(TEMPER_L),35H(TEMPER_H) 低位存入高位存入 RE00: MOV R2,#8 RE01: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;;**************************************************** ;DS18B20 将从中读出的温度数据进行转换 ;;**************************************************** TEMPER_COV: MOV A,#0F0H ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP A MOV TEMPER_NUM,A ; 得到低四位 MOV A,TEMPER_L JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值INC TEMPER_NUM TEMPER_COV1: MOV A,TEMPER_H ANL A,#07H SWAP A ORL A,TEMPER_NUM ; 得到高四位,再与低四位相或得到值MOV TEMPER_NUM,A ; 保存变换后的温度数据 LCALL BIN_BCD RET ;;**************************************************** ;16BCD 将进制的温度数据转换成压缩码 ;;**************************************************** BIN_BCD: MOV A,TEMPER_NUM MOV B,#10 DIV AB MOV TEMPER_SHI,A MOV TEMPER_GE,B RET ;**************************************************** ;DS18B20 初始化程序 ;;**************************************************** INIT_1820: SETB DQ NOP CLR DQ MOV R0,#250 TSR1: DJNZ R0,TSR1 ; 520us 延时 SETB DQ MOV R0,#25H ;96US-25H TSR2: DJNZ R0,TSR2 JNB DQ,TSR3;D0DS18B20 如为低则复位成功,存在 LJMP TSR4 ; 延时 TSR3: SETB FLAG1 ; ,DS1820 置标志位表示存在LJMP TSR5 TSR4: CLR FLAG1 ; ,DS1820 清标志位表示不存在LJMP TSR7 TSR5: MOV R0,#06BH ;200US TSR6: DJNZ R0,TSR6 ; 延时 TSR7: SETB DQ ; 拉高总线 RET ;************************************************* ; 数码显示程序 ;************************************************* ;************************************************* ; 液晶显示程序 ;************************************************* LCDDISP: mov p1,#01h; 清屏 call enrw mov p1,#38h;857 设为位,,字 型两行 call enrw mov p1,#0Ch call enrw mov p1,#06h call enrw mov p1,#80h call enrw mov dptr,#yjtab call rwram mov p1,#0C0h call enrw mov dptr,#yjtab1 call rwram W_TEM: mov p1,#0CCh call enrw MOV DPTR,#ASCII MOV A,TEMPER_SHI MOVC A,@A+DPTR MOV P1,A setb rs clr rw clr e call D500us setb e MOV DPTR,#ASCII MOV A,TEMPER_GE MOVC A,@A+DPTR MOV P1,A setb rs clr rw clr e call D500us setb e RET enrw:clr rs clr rw clr e call D500us setb e ret rwram:mov r1,#00h a1: mov a,r1 movc a,@a+dptr call rwram2 inc r1 cjne a,#00h,a1 ret rwram2:mov p1,a setb rs clr rw clr e call D500us setb e ret ;**************R*********************************** ; 延时子程序 ;************************************************* D500us: MOV R6,#250;500us 延时 DJNZ R6,$ RET DELAY1:MOV R7,#20H DJNZ R7,$ RET D100MS: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,$ DJNZ R6,D2 RET yjtab: db ' XRF MCS-51 ',00h yjtab1:db 'temperature:**`C',00h ASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H end LCD1602 只是的代码 ;51 多功能单片机开发板 ;LCD1602 测试程序 RS EQU P2.0 RW EQU P2.1 E EQU P2.2 LDATA EQU P1 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#00H ;R0 :每行显示字符的个数 MOV R1,#80H ; 寄存器地址 MOV A,#38H ;16×2 设置显示() ACALL WIR MOV A,#0EH ; 开显示,显示光标,光标不闪烁 ACALL WIR MOV A,#06H ; 整屏显示不移动 ACALL WIR MOV A,#01H ; 显示清屏 ACALL WIR MOV DPTR,#LCD LOOP0: MOV A,R1 ; 写地址 ACALL WIR INC R1 ; 地址加一 CJNE R1,#90H,TT ; 判断第一行写完没有 MOV R1,#0C0H ;R1 若写完,,第二行地址 TT: MOV A,R0 MOVC A,@A+DPTR ACALL WDR INC R0 ;R01 计数加 LCALL DELAY1 CJNE R0,#20H,LOOP0 ;R132 不等于则继续 RE: AJMP RE WIR: ACALL BUSY ; 写指令寄存器子程序 CLR E ; 初始化 CLR RS CLR RW SETB E MOV LDATA,A CLR E RET WDR: ACALL BUSY ; 写数据寄存器子程序 CLR E SETB RS CLR RW SETB E MOV LDATA,A CLR E RET BUSY: PUSH ACC ; 检测忙信号子程序 ISBUSY:CLR E CLR RS SETB RW SETB E MOV A,LDATA JB ACC.7,ISBUSY ;ACC.7=1 ,说明忙 POP ACC ACALL DELAY1 RET DELAY1:MOV R6,#5 ; 延时子程序 D0: MOV R7,#248 DJNZ R7,$ DJNZ R6,D0 RET DELAY2:MOV R5,#2 D1: MOV R3,#245 D2: MOV R4,#245 DJNZ R4,$ DJNZ R3,D2 DJNZ R5,D1 RET LCD:DB ' MCS-51 TEST ' DB ' Xu Rui Feng ' END
/
本文档为【LCD显示程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索