一个别人调试好的8255程序、希望对你有所帮助。
祝你好运~~
- 8255扫描键盘、显示程序
- 利用8255可编程并行口做一个扫描键盘实验,
- 把按键输入的键码,显示在由8279控制的七段数码管上。
- 8255PA口做键盘输入线,PB口作扫描线。
- D8255 EQU 8506H ;8255状态/数据口地址
- D8255A EQU 8500H ;8255 PA口地址
- D8255B EQU 8502H ;8255 PB口地址
- Z8279 EQU 8701H ;8279状态口地址
- D8279 EQU 8700H ;8279数据口地址
- DISPTR EQU 08H ;当前显示位置
- KEYVAL EQU 09H ;读到的键码
- ORG 0000H
- LJMP START
- ORG 0040H
- MAIN:
- MOV SP,#60H
- LCALL DELAY ;延时
- MOV DISPTR,#30H ;显示缓冲区头指针
- MOV DPTR,#D8255
- MOV A,#90H ;置8255状态
- ;方式0,PB,PC口输出,PA口输入
- MOVX @DPTR,A
- MOV DPTR,#Z8279 ;置8279命令字
- MOV A,#0D3H
- MOVX @DPTR,A ;清LED显示
- MOV A,#00H
- MOVX @DPTR,A
- MOV A,#38H
- MOVX @DPTR,A
- MOV A,#0D1H
- KB_DIS:
- LCALL RD_KB ;读键盘
- MOV A,#0FFH
- CJNE A,KEYVAL,DISBUF ;判读到键
- SJMP KB_DIS ;没有则继续读键
- DISBUF:
- LCALL DISP ;把键移入显存
- LCALL DELAY ;延时消抖
- LCALL DELAY
- SJMP KB_DIS
- DISP: ;显存依次前移
- MOV R1,#31H ;在最后加入新键值
- MOVE:
- MOV A,@R1
- DEC R1
- MOV @R1,A
- INC R1
- INC R1
- CJNE R1,#38H,MOVE
- MOV 37H,KEYVAL
- MOV KEYVAL,#0FFH
- MOV DPTR,#Z8279
- MOV A,#90H
- MOVX @DPTR,A
- MOV R0,#08H
- MOV R1,#30H
- MOV DPTR,#D8279
- LP: MOV A,@R1
- MOVX @DPTR,A
- INC R1
- DJNZ R0,LP
- RET
- RD_KB: ;键盘扫描
- MOV A,#02H ;扫描第一行
- MOV DPTR,#D8255B
- MOVX @DPTR,A
- MOV DPTR,#D8255A
- MOVX A,@DPTR
- MOV R1,#00H
- CJNE A,#0FFH,KEYCAL ;判键是否按下
- MOV A,#01H ;扫描第二行
- MOV DPTR,#D8255B
- MOVX @DPTR,A
- MOV DPTR,#D8255A
- MOVX A,@DPTR
- MOV R1,#08H
- CJNE A,#0FFH,KEYCAL
- SJMP NOKEY ;无键按下
- KEYCAL: ;计算键码
- MOV R0,#08H
- SHIFT:
- RRC A
- JNC CALC
- INC R1
- DJNZ R0,SHIFT
- CALC: ;换算显示码
- MOV DPTR,#DL_DAT
- MOV A,R1
- MOVC A,@A+DPTR
- MOV KEYVAL,A
- RET
- NOKEY: MOV KEYVAL,#0FFH ;返回无键标志
- RET
- DELAY: MOV R0,#0H ;延时子程序
- DELAY1: MOV R1,#0H
- DJNZ R1,$
- DJNZ R0,DELAY1
- RET
- DL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7
- DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F
- END
复制代码
参考:
http://zhidao.baidu.com/question/54173658.html?fr=qrl
http://www.wm15.cn/Article/shiyan/200708/669.html |