- 首页
-
- 问答
-
-
-
-
-
-
匿名用户
只是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 ;计数R0加1 LCALL DELAY1 CJNE R0,#20H,LOOP0 ;R1不等于32则继续 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
-
-
-
aa7ef3097d72
DS18B20温度传感器、LCD1602液晶显示的代码;XRF多功能51单片机开发板;DS18B20测温程序(液晶显示,可测量0-99度);************************************************************************** ;************************************************************** TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区TEMPER_H EQU 35H ;TEMPER_NUM EQU 60H;温度值存储TEMPER_GE EQU 61HTEMPER_SHI EQU 62HTEMPER_SAVE EQU 63HFLAG1 BIT 00HFLAG2 BIT 01HRS BIT p2.0;液晶控制接口RW BIT p2.1E BIT p2.2DQ BIT p3.5;单总线口 ORG 0000H AJMP MAIN ORG 0030HMAIN: 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;;**************************************************** ;将16进制的温度数据转换成压缩BCD码 ;;****************************************************BIN_BCD: MOV A,TEMPER_NUMMOV B,#10DIV ABMOV TEMPER_SHI,AMOV TEMPER_GE,BRET;****************************************************;DS18B20初始化程序 ;;****************************************************INIT_1820: SETB DQ NOP CLR DQ MOV R0,#250TSR1: DJNZ R0,TSR1 ; 延时520us SETB DQ MOV R0,#25H ;96US-25H TSR2: DJNZ R0,TSR2 JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在 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;设为8位,5*7字 型两行 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 rwramW_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 RETenrw:clr rs clr rw clr e call D500us setb e retrwram:mov r1,#00ha1: mov a,r1 movc a,@a+dptr call rwram2 inc r1 cjne a,#00h,a1 retrwram2:mov p1,a setb rs clr rw clr e call D500us setb e ret;**************R***********************************;延时子程序;*************************************************D500us:MOV R6,#250;延时500usDJNZ R6,$ RET DELAY1:MOV R7,#20H DJNZ R7,$ RET D100MS: MOV R6,#200D2: MOV R5,#250 DJNZ R5,$ DJNZ R6,D2 RETyjtab: db ' XRF MCS-51 ',00hyjtab1:db 'temperature:**`C',00hASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H end
-
求购