首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
PS/2键盘调通了,发上来大家分享一下!
来源:本站整理  作者:佚名  2011-12-16 06:31:36



上周了半天没啥眉目,原来是我把上的跳线接错了,害的我周末都没过好,郁闷!
今天早上无意间用万用表测了一下管脚才发现跳线接错了,呵呵!
所以嘛!兄弟们调试的时候,如果按键盘没反应,看看是不是跳线接错了!
  PS2键盘协议






看完后,有人可能觉得这程序是网上已经有的,没错是网上的,我只做了修修改改,使它能在咱们的上运行,能够适合,去去了解。如果有的人,会明白有时候网上的程序本身没有错误,但是运行的自己的硬件上就达不到预期的效果,或者就没法实现想要的,出了问题也没法去问人家,因为代码可能发了好长时间了,人家有可能已经忘了!
所以我发这个程序是我参考网上的程序,并且我已经在咱们免费的PCB上调试好的,我的目的是让初学者能够更好的认识,更清楚的熟悉PS2协议,同时也让高手们以后编程序时直接复制过去用就可以了,把主要精力用在其他方面。就这点目的,要不我也不会费这么大劲儿发上来,当然欢迎大家拍砖,对我也是一种鞭策!
贴上代码:
#include <AT89X52.H>
#include <INTRINS.H>
#define Sel_one P1_0
#define Sel_two P1_1
#define Sel_three P1_2
#define Sel_four P1_3
#define LEDData P0
#define KB_CLK P3_3
#define KB_DATA P3_4
#defineOFF 0x0b
unsigned char code led[]={0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x00};
unsigned char LedUpdataWord;
////////////////////////////////////
void delay(unsigned char k)  //k ms延时
{
        unsigned char j;
        for(;k!=0;k--)
        {
                for(j=20;j!=0;j--)
                continue;
        }
}
void Timer1Init()
{
        TMOD=0x01;
        TH0=(65536-15000)/256;
        TL0=(65536-15000)%256;
        TR0=1;
        ET0=1;
        EA=1;
}
unsigned char Key_SCAN(void)
{
        unsigned char i,KeyData;
        KB_CLK=1;   //给高电平,将控制权交给键盘
        KB_DATA=1;
        KeyData=0;
        while(KB_CLK);   //读取信号
        EA=0;            //为防止影响键盘时序,关闭总中断
        for(i=0;i<8;i++)
        {
           KeyData>>=1;
           while(!KB_CLK); //等待下降沿
           while(KB_CLK);
           _nop_();
           if(KB_DATA)
           {
            KeyData|=0x80; //低位在前
           }
        }
        while(!KB_CLK);   //校验位
        while(KB_CLK);  
        while(!KB_CLK);   //停止位
        while(KB_CLK);
        while(!KB_CLK);
        EA=1;              //键值扫描完毕,开启总中断
        return KeyData;
}

unsigned char Decode(unsigned char Mydata)    //键码解析
{
        switch(Mydata)
        {
           case 0x45: return 0;break;
           case 0x16: return 1;break;
           case 0x1e: return 2;break;
           case 0x26: return 3;break;
           case 0x25: return 4;break;
           case 0x2e: return 5;break;
           case 0x36: return 6;break;
           case 0x3d: return 7;break;
           case 0x3e: return 8;break;
           case 0x46: return 9;break;
           default: return 0xff; break;
        }
}
void display(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4)
{
        Sel_one=0;
        LedData=led[a4];;
        delay(10);
        Sel_one=1;
        Sel_two=0;
        LedData=led[a3];
        delay(10);
        Sel_two=1;
        Sel_three=0;
        LedData=led[a2];
        delay(10);
        Sel_three=1;
        Sel_four=0;
        LedData=led[a1];
    delay(10);
        Sel_four=1;
}
main()
{
        unsigned char KeyCode;
        Timer1Init();
        LedUpdataWord=0;
        while(1)
        {
                KeyCode=Decode(Key_Scan()); //扫描,解码
                if(KeyCode!=0xff) LedUpdataWord=KeyCode;    //更新led显示
        }
}
void t0(void) interrupt 1 using 0
{
        TH0=(65536-15000)/256;
        TL0=(65536-15000)%256;
        display(LedUpdataWord,LEDOFF,LEDOFF,LEDOFF);
}

源代码下载:http://www.wang1jin.com/bbs/viewthread.php?tid=407&extra=page%3D1

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:17,281.25000 毫秒