⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机坐标8255扫描键盘、显示实验.htm

📁 http://www.edacn.net/cgi-bin/forums.cgi?forum=7&topic=9127下,则R3~R0的输出信号中会有一个为1,但我们还是是无法确定哪一个键被按下,必須要
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                  face=黑体>实验程序框图</FONT></A><FONT face=宋体><BR><IMG 
                  src="单片机坐标8255扫描键盘、显示实验.files/200412868324999.jpg"><IMG 
                  src="单片机坐标8255扫描键盘、显示实验.files/200412868332999.jpg"></FONT></P>
                  <P>源代码:</P>
                  <P>D8255&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  8506H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;8255状态/数据口地址<BR>D8255A&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  8500H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;8255 PA口地址<BR>D8255B&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  8502H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;8255 PB口地址<BR>Z8279&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  8701H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;8279状态口地址<BR>D8279&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  8700H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;8279数据口地址<BR>DISPTR&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  08H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;当前显示位置<BR>KEYVAL&nbsp; EQU&nbsp;&nbsp;&nbsp;&nbsp; 
                  09H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;读到的键码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ORG&nbsp;&nbsp;&nbsp;&nbsp; 
                  0000H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LJMP&nbsp;&nbsp;&nbsp; 
                  START<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ORG&nbsp;&nbsp;&nbsp;&nbsp; 
                  0040H<BR>START:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  SP,#60H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL&nbsp;&nbsp; 
                  DELAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;延时<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DISPTR,#30H&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;显示缓冲区头指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#D8255<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#90H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;置8255状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;方式0,PB,PC口输出,PA口输入<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#Z8279&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;置8279命令字<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#0D3H<BR>&nbsp;&nbsp;&nbsp;&nbsp; MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;清LED显示<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#00H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#38H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#0D1H<BR>KB_DIS:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL&nbsp;&nbsp; 
                  RD_KB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;读键盘<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#0FFH<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  CJNE&nbsp;&nbsp;&nbsp; A,KEYVAL,DISBUF 
                  ;判读到键<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SJMP&nbsp;&nbsp;&nbsp; 
                  KB_DIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;没有则继续读键<BR>DISBUF:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL&nbsp;&nbsp; 
                  DISP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;把键移入显存<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL&nbsp;&nbsp; 
                  DELAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;延时消抖<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL&nbsp;&nbsp; 
                  DELAY<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SJMP&nbsp;&nbsp;&nbsp; 
                  KB_DIS<BR>DISP:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;显存依次前移<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1,#31H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;在最后加入新键值<BR>MOVE:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,@R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  DEC&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  @R1,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  CJNE&nbsp;&nbsp;&nbsp; 
                  R1,#38H,MOVE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  37H,KEYVAL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  KEYVAL,#0FFH<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#Z8279<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#90H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  R0,#08H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1,#30H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#D8279<BR>LP:&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,@R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  DJNZ&nbsp;&nbsp;&nbsp; 
                  R0,LP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RET<BR>RD_KB:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;键盘扫描<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#02H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;扫描第一行<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#D8255B<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#D8255A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  A,@DPTR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1,#00H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  CJNE&nbsp;&nbsp;&nbsp; A,#0FFH,KEYCAL&nbsp; 
                  ;判键是否按下<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,#01H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;扫描第二行<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#D8255B<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  @DPTR,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#D8255A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX&nbsp;&nbsp;&nbsp; 
                  A,@DPTR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1,#08H<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  CJNE&nbsp;&nbsp;&nbsp; 
                  A,#0FFH,KEYCAL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SJMP&nbsp;&nbsp;&nbsp; 
                  NOKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;无键按下<BR>KEYCAL:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;计算键码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  R0,#08H<BR>SHIFT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RRC&nbsp;&nbsp;&nbsp;&nbsp; 
                  A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  JNC&nbsp;&nbsp;&nbsp;&nbsp; 
                  CALC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp;&nbsp;&nbsp;&nbsp; 
                  R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  DJNZ&nbsp;&nbsp;&nbsp; 
                  R0,SHIFT<BR>CALC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;换算显示码<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  DPTR,#DL_DAT<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  A,R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVC&nbsp;&nbsp;&nbsp; 
                  A,@A+DPTR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  KEYVAL,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RET<BR>NOKEY:&nbsp; MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                  KEYVAL,#0FFH&nbsp;&nbsp;&nbsp; 
                  ;返回无键标志<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RET<BR>DELAY:&nbsp; MOV&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -