久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2397|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)模擬鍵盤(pán)初始化的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:305998 發(fā)表于 2018-4-24 14:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
50黑幣
剛開(kāi)始學(xué)習(xí)PS2協(xié)議,寫(xiě)了PS2設(shè)備發(fā)送到PC的函數(shù),和PS2設(shè)備接收PC的函數(shù), 但是在開(kāi)機(jī)自檢的時(shí)候出了問(wèn)題,我認(rèn)為是接收函數(shù) 可能寫(xiě)錯(cuò)了。然后我用串口監(jiān)測(cè)接收,按理來(lái)說(shuō)我按下cap鍵,設(shè)備應(yīng)該會(huì)接收到PC發(fā)送過(guò)來(lái)的命令吧,但是卻沒(méi)有。所有想請(qǐng)大佬幫我看下,哪里出錯(cuò)了

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:305998 發(fā)表于 2018-4-24 14:54 | 只看該作者
這是我的主函數(shù)

#include <reg51.h>
#include "ps2.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include<intrins.h>
sbit BEEP = P1^7;


void  main ( )
{       


        ConfigUART(9600);

       
        while(1)
        {

                        ps2_rec();
                        receive_process();//處理PC命令
//                delay_ms(5000);

       
               
               


               
        }  

}
回復(fù)

使用道具 舉報(bào)

板凳
ID:305998 發(fā)表于 2018-4-24 14:54 | 只看該作者
這是我的發(fā)送函數(shù)
發(fā)送應(yīng)該是沒(méi)有問(wèn)題的
因?yàn)槲野l(fā)送0x58 能實(shí)現(xiàn)讓燈亮



void  ps2_send(unsigned char value)
{
        unsigned char  i;
        unsigned char  char_temp,temp;
        unsigned char PARITY = 1 ;
        temp = value;
        last_s = value;
        for(i=0;i<8;i++)                                  
        {
                char_temp = temp&0x01;                          //奇效驗(yàn),找出發(fā)送的數(shù)據(jù)中1的個(gè)數(shù),如果為偶數(shù),則置標(biāo)志位為1,反之為0
                if(char_temp == 0x01)
                {
                         PARITY = !PARITY;
                }
                temp = temp>>1;
        }
       
        PS2_CLK = 1;
        PS2_DAT = 1;
        while(!PS2_CLK)  //等待clock為高
        {       
                PS2_CLK = 1;
                PS2_DAT = 1;
                Delay50us();       
        }       
                PS2_CLK = 1;
                PS2_DAT = 1;
                if(PS2_CLK)
                {
                        if(PS2_DAT)
                        {

                                PS2_DAT = 0; //PC在PS2_CLK的下降沿讀取數(shù)據(jù),起始位
                                Delay20us();
                                PS2_CLK = 0;
                                Delay40us();
       
                                for (i=0; i<8;i++) //發(fā)送數(shù)據(jù)位
                                {
                                        PS2_CLK = 1;
                                        Delay20us();
                                        char_temp = value&0x01;
                                        if(char_temp == 0x01)
                                                PS2_DAT = 1;
                                        else
                                                PS2_DAT = 0;
                                        char_temp = 0;
                                        Delay20us();                               
                                        PS2_CLK = 0;       
                                        Delay40us();
                                        value = value>>1;
                                }       
                                       
                                        PS2_CLK = 1;
                                        Delay20us();                                       
                                        PS2_DAT = PARITY; //發(fā)送奇校驗(yàn)
                                        Delay20us();
                                        PS2_CLK = 0;
                                        Delay40us();                               

                                        PS2_CLK = 1;
                                        Delay20us();                                       
                                        PS2_DAT = 1; // 發(fā)送停止位
                                        Delay20us();
                                        PS2_CLK = 0;
                                        Delay40us();
       
                                        PS2_CLK = 1;

                        }
                }

         Delay50us();
       
}

回復(fù)

使用道具 舉報(bào)

地板
ID:305998 發(fā)表于 2018-4-24 14:55 | 只看該作者
這是我的接收函數(shù)
感覺(jué)在這里出了問(wèn)題



unsigned char ps2_rec( )//返回接收到的字節(jié),接收錯(cuò)誤則返回0
{
        unsigned char i,STOPBIT;
        unsigned char PARITY,temp ;

        PS2_CLK = 1;
        PS2_DAT = 1;
        Delay100us();
  PS2_DAT = 0;
        PS2_CLK = 1;       
        if (PS2_DAT)//PS2_DAT應(yīng)該為低        如果此時(shí)PS2_DAT為高,則退出并發(fā)送錯(cuò)誤狀態(tài)字0xfe
        {
                ps2_send(0xfe);
                return 0;
        }

        else
        {       
                Delay40us();
                for(i=0;i<8;i++)
                {
                        Delay20us();
                        PS2_CLK = 0;
                        Delay40us();
                        PS2_CLK = 1;
                        Delay20us();
                        temp = temp>>1;
                        if(PS2_DAT)
                        {               
                                temp |=0x80;               
                        }

                }
//                SendByte(0X30+temp);
//                delay_ms(3000);
                        if(!PS2_CLK)        //每讀完一個(gè)位都檢測(cè)時(shí)鐘線是否被拉低
                                {
                                                ps2_send(0xfe);      
                                                return 0;            
                                }
//======================================================                       
                        Delay20us();
                        PS2_CLK = 0;
                        Delay40us();
                        PS2_CLK = 1;       
                        Delay20us();
                        PARITY = PS2_DAT;
                        if(!PS2_CLK)        //每讀完一個(gè)位都檢測(cè)時(shí)鐘線是否被拉低
                                {
                                                ps2_send(0xfe);      
                                                return 0;            
                                }       
//                        SendByte(0x30+PARITY);
        //        SendStr("4");
//======================================================       
                        Delay20us();
                        PS2_CLK = 0;
                        Delay40us();
                        PS2_CLK = 1;
                        Delay20us();
                        STOPBIT = PS2_DAT;
                        if(!PS2_CLK)//接收停止位,此時(shí)PS2_DAT應(yīng)該為高,否則發(fā)送0xfe報(bào)錯(cuò)
                        {
                                ps2_send(0xfe);
                                return 0;
                        }
//======================================================
                               
                        Delay15us();
                        PS2_DAT = 0;
                        Delay5us();
                        PS2_CLK = 0;
                        Delay40us();
                        PS2_CLK = 1;
                        Delay5us();
                        PS2_DAT = 1;
                        ACC = temp;
                        SendByte(P);

                        if(P == PARITY)            //進(jìn)行奇校驗(yàn)            
        {
//                                        ps2_send(0xfe);
          return 0;
        }
//                        SendStr("0x33");
                Delay40us();
                Delay5us();
        }
//        SendByte(0X30+temp);
        return temp;
        }
回復(fù)

使用道具 舉報(bào)

5#
ID:305998 發(fā)表于 2018-4-24 14:56 | 只看該作者
這是命令處理函數(shù)


unsigned char receive_process()
{
  unsigned char  command,led_rec;
//  if(!KB_START())  return;//如果當(dāng)前的PS2_CLK和PS2_DAT不都為低,表明沒(méi)有命令
        command = ps2_rec();
//        SendStr("pass");
        switch(command)
        {
                case 0xff:   //復(fù)位命令
                        ps2_send(0xfa);
                        delay_ms(50);
                  ps2_send(0xaa); //自檢通過(guò)返回0xaa
                                                                //執(zhí)行復(fù)位
                break;
                case 0xfe:
                        ps2_send(0xfa);
                        ps2_send(last_s);                                        //發(fā)送上一次的命令
                        break;
                case 0xf6:  //設(shè)置缺省值
                        ps2_send(0xfa);
                       
                break;
                case 0xf5:  //設(shè)置缺省值和停止鍵盤(pán) ,等待進(jìn)一步命令
                        ps2_send(0xfa);
               
               
                break;
                case 0xf4:  //重新使能鍵盤(pán)
                        ps2_send(0xfa);  
               
               
                break;
                case 0xf3:        //設(shè)置機(jī)打速率和延遲
                        ps2_send(0xfa);
                       
               
                break;
                case 0xee://回應(yīng)命令
                        ps2_send(0xee);
               
                case 0xed: //指示燈參數(shù)
                        ps2_send(0xfa);                               
                        led_rec = ps2_rec();
                        SendByte(led_rec);
                        ps2_send(0xfa);               
                break;
                default:
                        ps2_send(0xfa); //對(duì)于其他命令發(fā)送完成標(biāo)志
                break;
                       
               
        }
        return command;
}
回復(fù)

使用道具 舉報(bào)

6#
ID:305998 發(fā)表于 2018-4-25 08:09 | 只看該作者
有沒(méi)有大神能解答下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久一区二区三区 | 精品久久99 | 99精品国产一区二区青青牛奶 | 久久宗合色 | 亚洲伊人久久综合 | 在线观看成人精品 | 成人av在线播放 | 成年人网站国产 | 国产一区在线免费观看视频 | 成人一区二 | 亚洲精品成人 | 在线观看免费av片 | 久久亚洲国产精品日日av夜夜 | 午夜精品一区二区三区在线播放 | 在线精品亚洲欧美日韩国产 | 成人看片在线观看 | 一区二区三区视频免费观看 | 日韩成人精品在线 | 日韩在线 | 国产精品久久久久久久久久免费 | 99国产精品久久久久 | 黄色免费网站在线看 | 91深夜福利视频 | 日韩成人一区 | 在线看91| 日本不卡一区二区 | 午夜精品一区二区三区在线观看 | 欧美日韩亚洲一区 | av一区二区在线观看 | 韩日免费视频 | 不卡在线一区 | 亚洲一区二区视频在线播放 | 日韩精品一区二区三区中文字幕 | 久久精彩视频 | 91久久精品国产91久久 | 久久精品国产亚洲 | 国产精品国产三级国产播12软件 | 亚洲欧洲中文 | 亚洲精品国产成人 | 欧亚av在线| 草在线|