|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我用51系列的单片机,用周立功7289来作键盘显示电路.但我的程序只能让LED显示我发送去的指令,无法让LED显示所按的键的编号.
一下时我用的程序,求高手指点.
BIT_CNT DATA 30H
DELAY1 DATA 31H
DECIMAL DATA 32H
REC_BUF DATA 20H
SEND_BUF DATA 21H
DELAY DATA 22H
CS BIT P0.1
CLK BIT P0.2
DIO BIT P0.3
KEY BIT P0.4
ORG 0000H
AJMP RESET
ORG 0060H
RESET:
SETB CS
SETB KEY
SETB DIO
MOV DELAY,#25 ;延时
MOV DELAY1,#100
RST_DELAY1:
DJNZ DELAY1,RST_DELAY1
DJNZ DELAY,RST_DELAY1
MOV SEND_BUF,#10100100B ;初始化
CALL SEND
SETB CS
MAIN_LP:
JB KEY,MAIN_LP
MOV SEND_BUF,#00010101B ;有按键时,读键盘
CALL SEND
CALL RECEIVE ;
SETB CS
MOV B,#10 ;10进制转换
MOV A,REC_BUF
DIV AB
MOV DECIMAL,A
MOV SEND_BUF,#10100001B ;左移2次
CALL SEND
SETB CS
MOV SEND_BUF,#10100001B
CALL SEND
SETB CS
MOV SEND_BUF,#10000001B ;下载数据并译码
CALL SEND
MOV SEND_BUF,DECIMAL ;发送十位显示
CALL SEND
SETB CS
MOV SEND_BUF,#10000000B ;下载数据并译码
CALL SEND
MOV SEND_BUF,B ;发送个位显示
CALL SEND
SETB CS
MAIN_LP2:
JNB KEY,MAIN_LP2 ;等按键松开
AJMP MAIN_LP
;-----------------------------------------
;发送一个字节到zlg7289A,高位在前.
;-----------------------------------------
SEND:
MOV BIT_CNT,#8 ;发送8位
CLR CS
CALL LONG_DELAY ;延时50us
SEND_LP:
MOV A,SEND_BUF
RLC A
MOV SEND_BUF,A
MOV DIO,C
NOP
NOP
SETB CLK
CALL SHORT_DELAY ;延时10us
CLR CLK
CALL SHORT_DELAY ;延时10us
DJNZ BIT_CNT,SEND_LP
CLR DIO
RET
;-------------------------------------
;接受一个字节从zlg7289A,高位在前.
;-------------------------------------
RECEIVE:
MOV BIT_CNT,#8 ;发送8位
SETB DIO
CALL LONG_DELAY ;延时50us
RECEIVE_LP:
SETB CLK
CALL SHORT_DELAY ;延时10us
MOV C,DIO
MOV A,REC_BUF
RLC A
MOV REC_BUF,A
CLR CLK
CALL SHORT_DELAY ;延时10us
DJNZ BIT_CNT,RECEIVE_LP
CLR DIO
RET
LONG_DELAY:
MOV DELAY,#25
DJNZ DELAY,$
RET
SHORT_DELAY:
MOV DELAY,#5
DJNZ DELAY,$
RET
|
|