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

📄 ——isp1016实现机载导航系统的键盘控制.htm

📁 网上收集的关于嵌入式开发的文档。拿来共享!
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                <TD align=middle width="33%">X X X</TD>
                <TD align=middle width="33%">0 0 0 0</TD>
                <TD align=middle width="34%"> </TD></TR></TBODY></TABLE>
            <P 
            style="TEXT-INDENT: 30px">显然,KBC的编程可以有2种模式,一种是软件查询,另一种是中断驱动。由于本系统采用WindowNT为运行环境,KBC对应用程序透明,所以,将INT请求直接和CPU的某一空闲中断(IRQ9)相连接,以便使驱动程序能将KBC作为一个设备打开。在初始化加载时,应将对应中断触发设置为电平敏感。其VC核心代码如下:</P>
            <P style="TEXT-INDENT: 30px">#define SReg 0x401 //键盘状态寄存器地址</P>
            <P style="TEXT-INDENT: 30px">#define DReg 0x400 //键盘数据寄存器地址</P>
            <P style="TEXT-INDENT: 30px">…</P>
            <P style="TEXT-INDENT: 30px">BYTE SR,Key,Row,Col;<IMG height=298 
            hspace=1 src="——isp1016实现机载导航系统的键盘控制.files/8c.gif" width=307 
            align=right vspace=1 border=0></P>
            <P style="TEXT-INDENT: 30px">…</P>
            <P style="TEXT-INDENT: 30px">SR=inp(SReg)&amp;0x1f;</P>
            <P style="TEXT-INDENT: 30px">//读数据寄存器,低6位有效</P>
            <P style="TEXT-INDENT: 30px">Col=Key&gt;&gt;3;</P>
            <P style="TEXT-INDENT: 30px">//右移3位,提取按键列值</P>
            <P style="TEXT-INDENT: 30px">Row=Key &amp; 0x07;//提取按键行值</P>
            <P style="TEXT-INDENT: 30px">}</P>
            <P 
            style="TEXT-INDENT: 30px">至此,就可根据Row和Col的值将它翻译为某一标准键,并存入NT键盘缓冲区。</P>
            <P style="TEXT-INDENT: 0px"><B>3 KBC内部逻辑设计</B></P>
            <P 
            style="TEXT-INDENT: 30px">内部控制逻辑设计的关键是掌握按键识别原理。图3所示是其键盘识别原理图。设计时,可将按键设置在行线、列线的交点上。行线通过上拉电阻接到VCC(+5V),无按键时处于高电平。有按键时行线电平状态由列线决定。所有列线均为高则行线高,任一列线为低则行线低。KBC处理的核心就在于确认某一行线为低时,能定位出对应的列线。</P>
            <P style="TEXT-INDENT: 30px">3.1 输出扫描线(SL3..SL0)</P>
            <P 
            style="TEXT-INDENT: 30px">在设计输出扫描线时,可以使用一个2-Bit状态机Q5[L1..0]来依次轮流使扫描线输出为低电平。驱动时钟的周期为640ms,亦即每即扫描线持续640ms的低电平。将状态机的状态编码值和当前周期为低电平的扫描线序号对应起来,即可简化后续处理。图4是扫描线输出波形。注意,无论何种按键组合,在任一状态,有且仅有一个扫描线为低电平,否则后续处理将无法正确识别。<BR><IMG 
            height=285 hspace=20 src="——isp1016实现机载导航系统的键盘控制.files/8d.gif" 
            width=521 vspace=10 border=0><BR></SPAN>&nbsp;&nbsp;&nbsp; <SPAN 
            class=main1>3.2 键盘编码</P>
            <P 
            style="TEXT-INDENT: 30px">处理回复线(RL4..RL0)时,应该对其中为低电平的行线进行编码。5个行线需要3-Bit寄存器,记为[RQ5..RQ0],其真值表如下:</P>
            <P style="TEXT-INDENT: 30px">[RL4..RL0] -&gt;[RQ2..0]</P>
            <P style="TEXT-INDENT: 30px">----------------</P>
            <P style="TEXT-INDENT: 30px">[H,H,H,H,L] -&gt;[0,0,0];0</P>
            <P style="TEXT-INDENT: 30px">[H,H,H,L,H] -&gt;[0,0,1];1</P>
            <P style="TEXT-INDENT: 30px">[H,H,L,H,H] -&gt;[0,1,0];2</P>
            <P style="TEXT-INDENT: 30px">[H,L,H,H,H] -&gt;[0,1,1];3</P>
            <P style="TEXT-INDENT: 30px">[L,H,H,H,H] -&gt;[1,0,0];4</P>
            <P 
            style="TEXT-INDENT: 30px">当KBC确认是有效按键后,应把行列编码值放入缓冲,以供CPU读取,其逻辑表达如下:</P>
            <P 
            style="TEXT-INDENT: 30px">式中,[KSL1,KSL0]是记录有效按键的扫描线编码,即当时的[QSL1..0]状态。</P>
            <P style="TEXT-INDENT: 30px">3.3 CPU的读操作</P>
            <P 
            style="TEXT-INDENT: 30px">CPU读状态寄存器时,系统把中断请求寄存器INT的值送出,而读数据寄存器时,它将把FIFO缓冲的按键值送出,处理CPU读操作的表达式如下:</P>
            <P style="TEXT-INDENT: 30px">[D4..D0].oe=!CS &amp; !RD; 
            //寄存器由三态控制</P>
            <P style="TEXT-INDENT: 30px">[D4..D0]=(!A0 &amp; [FIFO4..FIFO0])# 
            //A0=0:送按键数据</P>
            <P style="TEXT-INDENT: 30px">(A0 &amp; [L,L,L,L,INT]); 
//A0=1;送状态</P>
            <P style="TEXT-INDENT: 30px">INT.ar=!Reset #(!CS&amp;!RD &amp; 
            !A0);//读数据寄存器时应撤销中断</P>
            <P style="TEXT-INDENT: 30px">3.4 键盘处理状态机</P>
            <P 
            style="TEXT-INDENT: 30px">该状态处理机是KBC处理的核心。图5是其状态转移图,其驱动时钟应该比扫描周期快而且应该是它的整数倍。此处采用的80ms时钟周期是扫描周期的8倍。下面讨论其状态转移条件。<BR><IMG 
            height=272 hspace=40 src="——isp1016实现机载导航系统的键盘控制.files/8e.gif" 
            width=466 vspace=10 border=0><BR></SPAN>&nbsp;&nbsp;&nbsp; <SPAN 
            class=main1>S0:复位状态</P>
            <P style="TEXT-INDENT: 30px">1.记录当前扫描周期</P>
            <P style="TEXT-INDENT: 30px">2.if若有低电平的回复线then S1 else S0;</P>
            <P style="TEXT-INDENT: 30px">S1:</P>
            <P style="TEXT-INDENT: 30px">1. 启动延时(去抖)计数器,延时10.24ms</P>
            <P style="TEXT-INDENT: 30px">2. 无条件进入下一状态S2</P>
            <P style="TEXT-INDENT: 30px">S2:去抖状态</P>
            <P style="TEXT-INDENT: 30px">if去抖正确then S3</P>
            <P style="TEXT-INDENT: 30px">else S0</P>
            <P style="TEXT-INDENT: 30px">S3:确认状态</P>
            <P style="TEXT-INDENT: 30px">1. 将有效键值打入FIFO缓冲</P>
            <P style="TEXT-INDENT: 30px">2. 设置</P>
            <P style="TEXT-INDENT: 0px"><B>4 改进建议</B></P>
            <P 
            style="TEXT-INDENT: 30px">上述KBC完全可以满足一般系统对键盘的要求,但仍然可以改进以使之更加智能化。例如使CPU能够对KBC的读操作和写入控制字进行适当控制、使KBC可处理组合按键和按键连击、增加KBC多字节的缓冲等。上述功能完全可以根据设计者系统和应用程序的要求进行改进。本设计源代码使用的是ABLE硬件描述语言,对此感兴趣的同志可以和作者进行联系。 
            </SPAN></P>
            <P></P></DIV></TD></TR>
        <TR>
          <TD align=middle height=15>
            <TABLE cellSpacing=0 cellPadding=0 align=center border=0>
              <TBODY>
              <TR>
                <TD>
                  <DIV></DIV></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD align=right height=2>
            <TABLE cellSpacing=0 cellPadding=0 width="80%" border=0>
              <TBODY>
              <TR>
                <TD width=75>【<A href="javascript:doPrint();">打印本稿</A>】</TD>
                <TD width=8></TD>
                <TD width=75>
                  <P>【<A 
                  href="http://www.21ic.com/new_info/news/review.asp?title=isp1016实现机载导航系统的键盘控制target=" 
                  _blank?>发表评论</A>】</P></TD>
                <TD width=10></TD>
                <TD width=79>【<A 
                  href="http://www.21ic.com/new_info/news/sendmail.asp?num=isp1016实现机载导航系统的键盘控制">推荐</A>】</TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD align=right height=2></TD></TR>
        <TR>
          <TD align=right height=2><A href="javascript:window.close();"><IMG 
            height=20 src="——isp1016实现机载导航系统的键盘控制.files/close_c.gif" width=77 
            border=0 name=Image161></A><FONT 
        color=#ffffff>----</FONT></TD></TR></TBODY></TABLE><BR><BR>
      <TABLE cellSpacing=0 cellPadding=0 width=520 align=center border=0>
        <TBODY>
        <TR>
          <TD vAlign=bottom align=middle width=114 bgColor=#999a76 
            height=1><IMG height=1 src="——isp1016实现机载导航系统的键盘控制.files/blank.gif" 
            width=1></TD>
          <TD width=466 height=1></TD></TR>
        <TR>
          <TD align=middle width=114 bgColor=#ece8db height=19>相关新闻</TD>
          <TD width=466 height=19></TD></TR>
        <TR bgColor=#999a76>
          <TD colSpan=2 height=1><IMG height=1 
            src="——isp1016实现机载导航系统的键盘控制.files/blank.gif" width=1></TD></TR>
        <TR>
          <TD colSpan=2 height=1></TD></TR></TBODY></TABLE>
      <TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width=520 
      align=center border=0>
        <TBODY>
        <TR>
          <TD vAlign=top>
            <TABLE class=RelatedTable width="100%" border=0>
              <TBODY>
              <TR class=RelatedTr>
                <TD class=RelatedTd>
                  <SCRIPT language=javascript 
                  src="——isp1016实现机载导航系统的键盘控制.files/about.htm"></SCRIPT>
                </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR></TD>
    <TD vAlign=top align=middle width=150 bgColor=#ece8db height=2>
      <TABLE cellSpacing=0 cellPadding=1 width="100%" border=0>
        <TBODY>
        <TR>
          <TD bgColor=#000000>
            <TABLE cellSpacing=0 cellPadding=2 width=150 bgColor=#ece8db 
            border=0>
              <TBODY>
              <TR>
                <TD>
                  <META content="Microsoft FrontPage 5.0" name=GENERATOR>
                  <META content=FrontPage.Editor.Document name=ProgId>
                  <P><A href="http://www.21ic.com/custom/tek/tek.htm"><IMG 
                  src="——isp1016实现机载导航系统的键盘控制.files/tek.gif" 
                  border=0></A></P><BR><BR><A href="http://www.hhcn.com/" 
                  target=_blank><IMG 
                  src="——isp1016实现机载导航系统的键盘控制.files/hh_logo.gif"></A> </TD></TR>
              <TR>
                <TD 
  height=5></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=766 align=center border=0>
  <TBODY>
  <TR>
    <TD vAlign=top colSpan=6></TD></TR>
  <TR>
    <TD vAlign=top colSpan=6 height=10></TD></TR>
  <TR>
    <TD vAlign=top bgColor=#999999 colSpan=6 height=2></TD></TR>
  <TR>
    <TD class=stxt vAlign=center align=middle colSpan=6 
height=6></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=766 align=center border=0>
  <TBODY>
  <TR>
    <TD class=s width=973 height=12></TD></TR>
  <TR>
    <TD class=s width=973 height=20>
      <DIV align=center><FONT face="Arial, Helvetica, sans-serif"><!--start copyright-->
      <DIV align=center><FONT color=black>
      <TABLE cellSpacing=0 cellPadding=0 width=600 align=center border=0>
        <TBODY>
        <TR>
          <TD align=middle width="100%" colSpan=2><BR>Better View:800*600 Best 
            View:1024x768 为了本系统能够更好的为您服务,请使用IE4.0或以上版本浏览器 
            <BR><BR>版权所有(C)21IC中国电子网 电话:010-82357510, 82357511 传真: 010-82357512 
          </TD></TR></TBODY></TABLE><!--start copyright--></FONT></DIV></FONT></DIV></TD></TR></TBODY></TABLE><BR></BODY></HTML>

⌨️ 快捷键说明

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