打印

关于串行键盘164

[复制链接]
1534|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CHUANDAOXY|  楼主 | 2007-4-11 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
错在那里?
#include  <reg51.h>
#include   <intrins.h>
unsigned char get_char(void);                  

void delay(void);

  main()
{
unsigned char keybuf [16],count;                                     
                    
    SCON=0;                                                                        
    ES=0;                                     
    EA=0;
    count=0;

    while (count<16) keybuf [count++], get_char();  
}
    
  unsigned char get_char(void)
    {                                               
       unsigned char key_code,column=0,mask=0x00;
       TI=0;
       SBUF=mask;
       while (TI==0);
                 
   while(1) {
   while((P3^4&P3^5)!=0);
   delay( );
   if((P3^4&P3^5)==0)continue ;
   else break;
   }
                 
   mask=0xfe;
   while(1)
   {
    TI=0;
    SBUF=mask ;
    while(TI==0);
    if((P3^4&P3^5)!=0)
    {
    mask= _crol_(mask,1);                       
    column||
    if(column>=8) column=0;
    continue;
    }
      else break;
     }
       if(P3^4==0) key_code=column ;
       else     key_code=8+column;
       return(key_code);
     }

      void delay(void)
       {
          unsigned int I= 10;                         /*延时10ms*/
          while (I--);            /*两减号间只能有一个空格*/
       } 

相关帖子

沙发
ayb_ice| | 2007-4-11 10:10 | 只看该作者

随便说说

  164一次只能输出一位0,然后读P00,P01口的状态,Q0为0,则检测0,8键,Q1为0则检测1,9键,读8次就可以扫描所有按键...
简单看了一下你的程序好象不对....
 unsigned char get_char(void)
    {                                               
       unsigned char key_code,column=0,mask=0x00;
       TI=0;
       SBUF=mask;
       while (TI==0);...
你每使Q0~Q7全部为0,不可能检测是哪个按键...
示意代码如下:
unsigned char code _164_OUT[] = {~1,~2,~4,~8,~16,~32,~64,~128};

unsigned char scan_key(void)
{
    unsigned char i;
    unsigned char key_num;

    for(i=0; i<8; i++){
        TI = 0;
        SBUF = _164_OUT;
        while(!TI);
        TI = 0;
        if(P10 && P11){
            continue;
        }
        if(!P10 && !P11){
            return TWO_KEY_PUSH;
        }
        if(!P10){
            return (key_num = 0+i);

        }else if(!P11){
            return (key_num = 0+8);
        }
    }
    return NO_KEY_PUSH;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

853

主题

1042

帖子

4

粉丝