黄金会员
 
主题
帖子
积分9859
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
|
发段自己写的
;;;;24C01两字节读写实验;;;
;;;;12MHZ晶振;;;;;;;
;;;;1602 4线驱动;;;;
SDA24 EQU P0.1
SCLK24 EQU P0.0
E BIT P0.2
RS BIT P0.3
DB07 EQU P0
ORG 0000H
AJMP MAIN
ORG 0080H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:mov sp,#60h
ACALL ys45 ;lcd初始化
acall ys45
acall ys45
acall ys45
MOV a,#03H
acall xzl
ACALL YS45
MOV a,#33H
acall xzl
MOV a,#02H
acall xzl
mov a,#101000b ;4BIT ,2行显示
acall xzl
mov a,#01h ;清屏
acall xzl
acall ys45
mov a,#00000010b ;光标复位
acall xzl
MOV A,#00000110B ;地址增量1,字符不移动
acall xzl
mov a,#00001111b ;显示开,光标有,光标闪
acall xzl
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 31H,#0cH
MOV 32H,#0fH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;将32H,32H内容写入2401的00H,01H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ACALL STAR
MOV A,#0A0H
ACALL WT
MOV A,#00H
ACALL WT
MOV A,31H
ACALL WT
MOV A,32H
ACALL WT
ACALL STOP
acall delay ;这个延时很重要。刚开始没延时读老是出错
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;读2401 00H和01H内容并存入单片机33H,34H单元
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ACALL STAR ;
MOV A,#0A0H
ACALL WT
MOV A,#00H
ACALL WT
ACALL STAR
MOV A,#0A1H ;
ACALL WT
acall rd24
mov 33h,a
acall xack
acall rd24
mov 34h,a
acall stop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;在1602上显示33H和34H内容
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,#80H ;1602显示首址
ACALL XZL
MOV A,33H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL XSJ
MOV A,34H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL XSJ
AJMP $
TAB: DB "0123456789ABCDEF"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;读2401子程序,出口A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RD24: MOV R7,#8 ;8个位
CLR A
SETB SDA24 ;
RD000:SETB SCLK24
MOV C,SDA24
acall DELAY2
CLR SCLK24
RLC A
DJNZ R7,RD000
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;开始条件
star: setb SDA24 ;时钟线高电平时,数据线由高到低跳变
setb SCLK24
acall DELAY2
clr SDA24
clr SCLK24
ret
;;;;;;;;;;;;;;;;;;;;;;;;;
;停止条件
STOP: clr SDA24 ;时钟线高电平时,数据线由低到高跳变
setb SCLK24
acall DELAY2
setb SDA24
RET
;;;;;;;;;;;;;;;;;;;;;;;;
;;判断2401有无应答信号
;;;;;;;;;;;;;;;;;;;;;;;;;;
ACK: setb sda24 ;设P0.0为输入
setb SCLK24
JB SDA24,$ ;判断2401有无应答信号
clr SDA24
clr SCLK24
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;
XACK: clr sda24 ;给2401一个应答信号
setb sclk24
acall DELAY2
clr sclk24
ret
;;;;;;;;;;;;;;;;;;;;;;;;;
;;写2401子程序,入口A
;;;;;;;;;;;;;;;;;;;;;;;;
WT: mov r7,#8
clr c
WT1: rlc a
mov SDA24,c
SETB SCLK24
acall DELAY2
CLR SCLK24
djnz r7,WT1
acall ack
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;1602写指令子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
xzl:mov 40h,a
orl a,#0fh ;初始化中用的写指令
mov db07,a
acall xzl0
mov a,40h
swap a
orl a,#0fh
mov db07,a
acall xzl0
MOV A,40H
ret
xzl0:clr rs
clr e
acall delay
setb e
ret
;;;;;;;;;;;;;;;;;;;;;;;;
;;1602写数据子程序
;;;;;;;;;;;;;;;;;;;;;;;;
xsj:mov 40h,a ;写数据
orl a,#0fh
mov db07,a
acall xsj1
mov a,40h
swap a
orl a,#0fh
mov db07,a
acall xsj1
MOV A,40H
ret
xsj1:setb rs
clr e
acall delay
setb e
ret
delay:mov r7,#100 ;延时1.3MS(延时太短的话1602初始化可能通不过)
d1: mov r6,#10
djnz r6,$
djnz r7,d1
ret
ys45:mov r7,#0bh ;延时
ys1: mov r6,#0cbh
djnz r6,$
djnz r7,ys1
ret
DELAY2: NOP ;延时
NOP
NOP
NOP
nop
RET
END
|
|