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

📄

📁 单片机应用PS-2键盘的实例
💻
📖 第 1 页 / 共 2 页
字号:
                              <P>Delay400Ms(); //启动等待,等LCM讲入工作状态<BR>LCMInit(); 
                              //LCM初始化 <BR>Delay5Ms(); //延时片刻(可不要)</P>
                              <P>DisplayListChar(0, 0, 
                              cdle_net);<BR>DisplayListChar(0, 1, 
                              email);<BR>ReadDataLCM();//测试用句无意义<BR>for 
                              (TempCyc=0; TempCyc&lt;10; 
                              TempCyc++)<BR>Delay400Ms(); 
                              //延时<BR>DisplayListChar(0, 1, Cls); <BR><BR>IT1 = 
                              0; //设外部中断1为低电平触发<BR>EA = 1;<BR>EX1 = 1; //开中断</P>
                              <P>do<BR>{<BR>if 
                              (BF)<BR>Decode(KeyV);<BR>else<BR>EA = 1; 
                              //开中断<BR>}<BR>while(1);<BR>}</P>
                              <P>//写数据<BR>void WriteDataLCM(unsigned char WDLCM) 
                              <BR>{<BR>ReadStatusLCM(); //检测忙<BR>LCM_Data = 
                              WDLCM;<BR>LCM_RS = 1;<BR>LCM_RW = 0;<BR>LCM_E = 0; 
                              //若晶振速度太高可以在这后加小的延时<BR>LCM_E = 0; //延时<BR>LCM_E = 
                              1;<BR>}</P>
                              <P>//写指令<BR>void WriteCommandLCM(unsigned char 
                              WCLCM,BuysC) //BuysC为0时忽略忙检测<BR>{<BR>if (BuysC) 
                              ReadStatusLCM(); //根据需要检测忙<BR>LCM_Data = 
                              WCLCM;<BR>LCM_RS = 0;<BR>LCM_RW = 0; <BR>LCM_E = 
                              0;<BR>LCM_E = 0;<BR>LCM_E = 1; <BR>}</P>
                              <P>//读数据<BR>unsigned char 
                              ReadDataLCM(void)<BR>{<BR>LCM_RS = 1; <BR>LCM_RW = 
                              1;<BR>LCM_E = 0;<BR>LCM_E = 0;<BR>LCM_E = 
                              1;<BR>return(LCM_Data);<BR>}</P>
                              <P>//读状态<BR>unsigned char 
                              ReadStatusLCM(void)<BR>{<BR>LCM_Data = 0xFF; 
                              <BR>LCM_RS = 0;<BR>LCM_RW = 1;<BR>LCM_E = 
                              0;<BR>LCM_E = 0;<BR>LCM_E = 1;<BR>while (LCM_Data 
                              &amp; Busy); //检测忙信号<BR>return(LCM_Data);<BR>}</P>
                              <P>void LCMInit(void) //LCM初始化<BR>{<BR>LCM_Data = 
                              0;<BR>WriteCommandLCM(0x38,0); 
                              //三次显示模式设置,不检测忙信号<BR>Delay5Ms(); 
                              <BR>WriteCommandLCM(0x38,0);<BR>Delay5Ms(); 
                              <BR>WriteCommandLCM(0x38,0);<BR>Delay5Ms(); </P>
                              <P>WriteCommandLCM(0x38,1); 
                              //显示模式设置,开始要求每次检测忙信号<BR>WriteCommandLCM(0x08,1); 
                              //关闭显示<BR>WriteCommandLCM(0x01,1); //显示清屏 
                              <BR>WriteCommandLCM(0x06,1); // 
                              显示光标移动设置<BR>WriteCommandLCM(0x0F,1); // 
                              显示开及光标设置<BR>}</P>
                              <P>//按指定位置显示一个字符<BR>void DisplayOneChar(unsigned 
                              char X, unsigned char Y, unsigned char 
                              DData)<BR>{<BR>Y &amp;= 0x1;<BR>X &amp;= 0xF; 
                              //限制X不能大于15,Y不能大于1<BR>if (Y) X |= 0x40; 
                              //当要显示第二行时地址码+0x40;<BR>X |= 0x80; 
                              //算出指令码<BR>WriteCommandLCM(X, 1); 
                              //发命令字<BR>WriteDataLCM(DData); //发数据<BR>}</P>
                              <P>//按指定位置显示一串字符<BR>void DisplayListChar(unsigned 
                              char X, unsigned char Y, unsigned char code 
                              *DData)<BR>{<BR>unsigned char ListLength;</P>
                              <P>ListLength = 0;<BR>Y &amp;= 0x1;<BR>X &amp;= 
                              0xF; //限制X不能大于15,Y不能大于1<BR>while 
                              (DData[ListLength]&gt;0x19) //若到达字串尾则退出<BR>{<BR>if 
                              (X &lt;= 0xF) 
                              //X坐标应小于0xF<BR>{<BR>DisplayOneChar(X, Y, 
                              DData[ListLength]); 
                              //显示单个字符<BR>ListLength++;<BR>X++;<BR>}<BR>}<BR>}</P>
                              <P>//5ms延时<BR>void Delay5Ms(void)<BR>{<BR>unsigned 
                              int TempCyc = 5552;<BR>while(TempCyc--);<BR>}</P>
                              <P>//400ms延时<BR>void 
                              Delay400Ms(void)<BR>{<BR>unsigned char TempCycA = 
                              5;<BR>unsigned int 
                              TempCycB;<BR>while(TempCycA--)<BR>{<BR>TempCycB=7269;<BR>while(TempCycB--);<BR>};<BR>}</P>
                              <P>void Keyboard_out(void) interrupt 2<BR>{<BR>if 
                              ((IntNum &gt; 0) &amp;&amp; (IntNum &lt; 9))<BR>{ 
                              <BR>KeyV = KeyV &gt;&gt; 1; 
                              //因键盘数据是低&gt;&gt;高,结合上一句所以右移一位<BR>if (Key_Data) 
                              KeyV = KeyV | 0x80; 
                              //当键盘数据线为1时为1到最高位<BR>}<BR>IntNum++;<BR>while 
                              (!Key_CLK); //等待PS/2CLK拉高</P>
                              <P>if (IntNum &gt; 10)<BR>{<BR>IntNum = 0; 
                              //当中断11次后表示一帧数据收完,清变量准备下一次接收<BR>BF = 1; 
                              //标识有字符输入完了<BR>EA = 0; //关中断等显示完后再开中断 
                              (注:如这里不用BF和关中断直接调Decode()则所Decode中所调用的所有函数要声明为再入函数)<BR>}<BR>}</P>
                              <P>void Decode(unsigned char ScanCode) 
                              //注意:如SHIFT+G为12H 34H F0H 34H F0H 
                              12H,也就是说shift的通码+G的通码+shift的断码+G的断码<BR>{<BR>unsigned 
                              char TempCyc; </P>
                              <P>if (!Key_UP) //当键盘松开时<BR>{<BR>switch 
                              (ScanCode)<BR>{<BR>case 0xF0 : // 
                              当收到0xF0,Key_UP置1表示断码开始<BR>Key_UP = 
1;<BR>break;</P>
                              <P>case 0x12 : // 左 SHIFT<BR>Shift = 
                              1;<BR>break;</P>
                              <P>case 0x59 : // 右 SHIFT<BR>Shift = 
                              1;<BR>break;</P>
                              <P>default: <BR>if (DisNum &gt; 
                              15)<BR>{<BR>DisplayListChar(0, 1, 
                              Cls);//清LCD第二行<BR>DisNum = 0; <BR>}<BR>if(!Shift) 
                              //如果SHIFT没按下<BR>{<BR>for (TempCyc = 
                              0;(UnShifted[TempCyc][0]!=ScanCode)&amp;&amp;(TempCyc&lt;59); 
                              TempCyc++); //查表显示<BR>if (UnShifted[TempCyc][0] == 
                              ScanCode) DisplayOneChar(DisNum, 1, 
                              UnShifted[TempCyc][1]);<BR>DisNum++;<BR>} <BR>else 
                              //按下SHIFT<BR>{<BR>for(TempCyc = 0; 
                              (Shifted[TempCyc][0]!=ScanCode)&amp;&amp;(TempCyc&lt;59); 
                              TempCyc++); //查表显示<BR>if (Shifted[TempCyc][0] == 
                              ScanCode) DisplayOneChar(DisNum, 1, 
                              Shifted[TempCyc][1]);<BR>DisNum++;<BR>}</P>
                              <P>break;<BR>}<BR>}<BR>else<BR>{ <BR>Key_UP = 
                              0;<BR>switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 
                              34H 那么第二个34H不会被处理<BR>{<BR>case 0x12 : // 左 
                              SHIFT<BR>Shift = 0;<BR>break;</P>
                              <P>case 0x59 : // 右 SHIFT<BR>Shift = 
                              0;<BR>break;<BR>}<BR>}<BR>BF = 0; //标识字符处理完了<BR>} 
                              <BR><BR>scancodes.h</P>
                              <P>unsigned char code UnShifted[59][2] = 
                              {<BR>0x1C, 'a',<BR>0x32, 'b',<BR>0x21, 
                              'c',<BR>0x23, 'd',<BR>0x24, 'e',<BR>0x2B, 
                              'f',<BR>0x34, 'g',<BR>0x33, 'h',<BR>0x43, 
                              'i',<BR>0x3B, 'j',<BR>0x42, 'k',<BR>0x4B, 
                              'l',<BR>0x3A, 'm',<BR>0x31, 'n',<BR>0x44, 
                              'o',<BR>0x4D, 'p',<BR>0x15, 'q',<BR>0x2D, 
                              'r',<BR>0x1B, 's',<BR>0x2C, 't',<BR>0x3C, 
                              'u',<BR>0x2A, 'v',<BR>0x1D, 'w',<BR>0x22, 
                              'x',<BR>0x35, 'y',<BR>0x1A, 'z',<BR>0x45, 
                              '0',<BR>0x16, '1',<BR>0x1E, '2',<BR>0x26, 
                              '3',<BR>0x25, '4',<BR>0x2E, '5',<BR>0x36, 
                              '6',<BR>0x3D, '7',<BR>0x3E, '8',<BR>0x46, 
                              '9',<BR>0x0E, '`',<BR>0x4E, '-',<BR>0x55, 
                              '=',<BR>0x5D, '\\',<BR>0x29, ' ',<BR>0x54, 
                              '[',<BR>0x5B, ']',<BR>0x4C, ';',<BR>0x52, 
                              '\'',<BR>0x41, ',',<BR>0x49, '.',<BR>0x4A, 
                              '/',<BR>0x71, '.',<BR>0x70, '0',<BR>0x69, 
                              '1',<BR>0x72, '2',<BR>0x7A, '3',<BR>0x6B, 
                              '4',<BR>0x73, '5',<BR>0x74, '6',<BR>0x6C, 
                              '7',<BR>0x75, '8',<BR>0x7D, '9',<BR>};</P>
                              <P>unsigned char code Shifted[59][2] = {<BR>0x1C, 
                              'A',<BR>0x32, 'B',<BR>0x21, 'C',<BR>0x23, 
                              'D',<BR>0x24, 'E',<BR>0x2B, 'F',<BR>0x34, 
                              'G',<BR>0x33, 'H',<BR>0x43, 'I',<BR>0x3B, 
                              'J',<BR>0x42, 'K',<BR>0x4B, 'L',<BR>0x3A, 
                              'M',<BR>0x31, 'N',<BR>0x44, 'O',<BR>0x4D, 
                              'P',<BR>0x15, 'Q',<BR>0x2D, 'R',<BR>0x1B, 
                              'S',<BR>0x2C, 'T',<BR>0x3C, 'U',<BR>0x2A, 
                              'V',<BR>0x1D, 'W',<BR>0x22, 'X',<BR>0x35, 
                              'Y',<BR>0x1A, 'Z',<BR>0x45, '0',<BR>0x16, 
                              '1',<BR>0x1E, '2',<BR>0x26, '3',<BR>0x25, 
                              '4',<BR>0x2E, '5',<BR>0x36, '6',<BR>0x3D, 
                              '7',<BR>0x3E, '8',<BR>0x46, '9',<BR>0x0E, 
                              '~',<BR>0x4E, '_',<BR>0x55, '+',<BR>0x5D, 
                              '|',<BR>0x29, ' ',<BR>0x54, '{',<BR>0x5B, 
                              '}',<BR>0x4C, ':',<BR>0x52, '"',<BR>0x41, 
                              '&lt;',<BR>0x49, '&gt;',<BR>0x4A, '?',<BR>0x71, 
                              '.',<BR>0x70, '0',<BR>0x69, '1',<BR>0x72, 
                              '2',<BR>0x7A, '3',<BR>0x6B, '4',<BR>0x73, 
                              '5',<BR>0x74, '6',<BR>0x6C, '7',<BR>0x75, 
                              '8',<BR>0x7D, '9',<BR>};<BR></P>
                              <P> </P></TD></TR></TBODY></TABLE></TD></TR>
                    <TR>
                      <TD vAlign=top align=middle>
                        <SCRIPT language=JavaScript src=""></SCRIPT>
                      </TD></TR></TBODY></TABLE><!-- #EndEditable --></TD>
                <TD width=5><IMG height=1 src="单片机应用PS-2键盘的实例.files/zo.gif" 
                  width=1></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
    <TD>&nbsp;</TD></TR></TBODY></TABLE><!-- #BeginLibraryItem "/Library/页尾.lbi" -->
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD>&nbsp;</TD>
    <TD width=760>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD bgColor=#cccc99 colSpan=4 height=1><IMG height=1 
            src="单片机应用PS-2键盘的实例.files/zo.gif" width=1></TD></TR>
        <TR>
          <TD height=18>&nbsp;&nbsp; <SPAN class=T12_B1>最佳浏览 
            800*600  </SPAN>访问量:<SPAN class=T1_B2>
            <SCRIPT src="单片机应用PS-2键盘的实例.files/mystat.htm">
			</SCRIPT>
             </SPAN></TD>
          <TD>
            <DIV align=right><FONT color=#ffffff>~~~~scangoole~~~~</FONT> 
            Copyright(C) 2001-2004 <FONT color=#333399>www.<FONT 
            color=#cc0033>cdle</FONT>.net</FONT> All rights reserved.</DIV></TD>
          <TD width=1 bgColor=#cccc99><IMG 
          src="单片机应用PS-2键盘的实例.files/zo.gif"></TD>
          <TD width=18>
            <DIV align=center><A 
            href="http://www.cdle.net/alldata/mywz/04030701_1.htm#TOP"><IMG 
            height=9 alt="GOTO TOP" src="单片机应用PS-2键盘的实例.files/go1.gif" width=6 
            align=middle border=0></A></DIV></TD></TR></TBODY></TABLE></TD>
    <TD>&nbsp;</TD></TR></TBODY></TABLE><!-- #EndLibraryItem --><!-- #EndTemplate --></BODY></HTML>

⌨️ 快捷键说明

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