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

📄 键盘接口与编程.htm

📁 单片机快速入门
💻 HTM
📖 第 1 页 / 共 2 页
字号:
size=3>分析键的代码,某位被按下,则该位为</FONT><FONT size=3>1</FONT><FONT lang=ZH-CN face=宋体 
size=3>(因为在键盘程序中已取反)</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>JB 
ACC.3,KeyOver</FONT></P><FONT size=3>
<P align=justify>JB ACC.4,KeyUp</P>
<P align=justify>JB ACC.5,KeyDown</P>
<P align=justify>AJMP KEY_RET</P>
<P align=justify>KeyStart:</P></FONT>
<P align=justify><FONT size=3>SETB StartEnd ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>第一个键按下后的处理</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>AJMP 
KEY_RET</FONT></P><FONT size=3>
<P align=justify>KeyOver:</P></FONT>
<P align=justify><FONT size=3>CLR StartEnd ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>第二个键按下后的处理</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>AJMP 
KEY_RET</FONT></P>
<P align=justify><FONT size=3>KeyUp: SETB UpDown ;</FONT><FONT lang=ZH-CN 
face=宋体 size=3>第三个键按下后的处理</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>AJMP 
KEY_RET</FONT></P><FONT size=3>
<P align=justify>KeyDown:</P></FONT>
<P align=justify><FONT size=3>CLR UpDown ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>第四个键按下后的处理</FONT></P><FONT size=3>
<P align=justify>KEY_RET:RET</P>
<P align=justify>KEY:</P></FONT>
<P align=justify><FONT size=3>CLR F0 ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>清</FONT><FONT size=3>F0</FONT><FONT lang=ZH-CN face=宋体 
size=3>,表示无键按下。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>ORL 
P3,#00111100B ;</FONT><FONT lang=ZH-CN face=宋体 size=3>将</FONT><FONT 
size=3>P3</FONT><FONT lang=ZH-CN face=宋体 size=3>口的接有键的四位置</FONT><FONT 
size=3>1</FONT></P>
<P align=justify><FONT size=3>MOV A,P3 ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>取</FONT><FONT size=3>P3</FONT><FONT lang=ZH-CN face=宋体 
size=3>的值</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>ORL 
A,#11000011B ;</FONT><FONT lang=ZH-CN face=宋体 size=3>将其余</FONT><FONT 
size=3>4</FONT><FONT lang=ZH-CN face=宋体 size=3>位置</FONT><FONT 
size=3>1</FONT></P>
<P align=justify><FONT size=3>CPL A ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>取反</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>JZ K_RET 
;</FONT><FONT lang=ZH-CN face=宋体 size=3>如果为</FONT><FONT size=3>0</FONT><FONT 
lang=ZH-CN face=宋体 size=3>则一定无键按下</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>ACALL DELAY 
;</FONT><FONT lang=ZH-CN face=宋体 size=3>否则延时去键抖</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>ORL 
P3,#00111100B</FONT></P><FONT size=3>
<P align=justify>MOV A,P3</P>
<P align=justify>ORL A,#11000011B</P>
<P align=justify>CPL A</P>
<P align=justify>JZ K_RET</P></FONT>
<P align=justify><FONT size=3>MOV B,A ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>确实有键按下,将键值存入</FONT><FONT size=3>B</FONT><FONT lang=ZH-CN face=宋体 
size=3>中</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>SETB F0 
;</FONT><FONT lang=ZH-CN face=宋体 size=3>设置有键按下的标志</FONT></P><FONT size=3>
<P align=justify>K_RET: </P></FONT>
<P align=justify><FONT size=3>ORL P3,#00111100B ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>此处循环等待键的释放</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>MOV 
A,P3</FONT></P><FONT size=3>
<P align=justify>ORL A,#11000011B</P>
<P align=justify>CPL A</P></FONT>
<P align=justify><FONT size=3>JZ K_RET1 ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>直到读取的数据取反后为</FONT><FONT size=3>0</FONT><FONT lang=ZH-CN face=宋体 
size=3>说明键释放了,才从键盘处理程序中返回</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>AJMP 
K_RET</FONT></P><FONT size=3>
<P align=justify>K_RET1: </P>
<P align=justify>RET</P>
<P align=justify>;----------------------------------- </P></FONT>
<P align=justify><FONT size=3>D500MS: ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>流水灯的延迟时间</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>PUSH 
PSW</FONT></P><FONT size=3>
<P align=justify>SETB RS0</P>
<P align=justify>MOV R7,#200</P>
<P align=justify>D51: MOV R6,#250</P>
<P align=justify>D52: NOP</P>
<P align=justify>NOP</P>
<P align=justify>NOP</P>
<P align=justify>NOP</P>
<P align=justify>DJNZ R6,D52</P>
<P align=justify>DJNZ R7,D51</P>
<P align=justify>POP PSW</P>
<P align=justify>RET </P>
<P align=justify>;-----------------------------------</P>
<P align=justify>LAMP:</P></FONT>
<P align=justify><FONT size=3>JB StartEnd,LampStart ;</FONT><FONT lang=ZH-CN 
face=宋体 size=3>如果</FONT><FONT size=3>StartEnd=1</FONT><FONT lang=ZH-CN face=宋体 
size=3>,则启动</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>MOV 
P1,#0FFH</FONT></P>
<P align=justify><FONT size=3>AJMP LAMPRET ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>否则关闭所有显示,返回</FONT></P><FONT size=3>
<P align=justify>LampStart:</P></FONT>
<P align=justify><FONT size=3>JB UpDown,LAMPUP ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>如果</FONT><FONT size=3>UpDown=1</FONT><FONT lang=ZH-CN face=宋体 
size=3>,则向上流动</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>MOV 
A,LAMPCODE</FONT></P>
<P align=justify><FONT size=3>RL A ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>实际就是左移位而已</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>MOV 
LAMPCODE,A </FONT></P><FONT size=3>
<P align=justify>MOV P1,A</P>
<P align=justify>LCALL D500MS</P>
<P align=justify>AJMP LAMPRET</P>
<P align=justify>LAMPUP:</P>
<P align=justify>MOV A,LAMPCODE</P></FONT>
<P align=justify><FONT size=3>RR A ;</FONT><FONT lang=ZH-CN face=宋体 
size=3>向下流动实际就是右移</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3></FONT><FONT size=3>MOV 
LAMPCODE,A</FONT></P><FONT size=3>
<P align=justify>MOV P1,A</P>
<P align=justify>LCALL D500MS</P>
<P align=justify>LAMPRET: </P>
<P align=justify>RET</P>
<P align=justify>END</P></FONT><FONT lang=ZH-CN face=宋体 size=3>
<P 
align=justify>以上程序功能很简单,但它演示了一个键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按键反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家可以仔细考虑一下这些问题,再想想有什么好的解决办法。</P></FONT>
<P align=justify><FONT size=3>2</FONT><FONT lang=ZH-CN face=宋体 
size=3>、采用中断方式:如图</FONT><FONT size=3>4</FONT><FONT lang=ZH-CN face=宋体 
size=3>所示。各个按键都接到一个与非上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做相应的处理。</FONT></P>
<P align=center><A href="http://www.onestudy.net/"><FONT 
face=黑体>返回“一学网</FONT><FONT face="Times New Roman" color=#000000> </FONT><FONT 
face="Times New Roman"><FONT color=#000000>www.</FONT><FONT 
color=#ff0000>one</FONT><FONT color=#008000>study</FONT>.net</FONT><FONT 
face=黑体> ”首页</FONT></A></P>
<P align=justify> </P>
<P align=justify> </P></BODY></HTML>

⌨️ 快捷键说明

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