久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
關(guān)于單片機(jī)模擬鍵盤初始化的問題
[打印本頁]
作者:
yzcook
時(shí)間:
2018-4-24 14:52
標(biāo)題:
關(guān)于單片機(jī)模擬鍵盤初始化的問題
剛開始學(xué)習(xí)PS2協(xié)議,寫了PS2設(shè)備發(fā)送到PC的函數(shù),和PS2設(shè)備接收PC的函數(shù), 但是在開機(jī)自檢的時(shí)候出了問題,我認(rèn)為是接收函數(shù) 可能寫錯(cuò)了。然后我用串口監(jiān)測接收,按理來說我按下cap鍵,設(shè)備應(yīng)該會(huì)接收到PC發(fā)送過來的命令吧,但是卻沒有。所有想請(qǐng)大佬幫我看下,哪里出錯(cuò)了
作者:
yzcook
時(shí)間:
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);
}
}
作者:
yzcook
時(shí)間:
2018-4-24 14:54
這是我的發(fā)送函數(shù)
發(fā)送應(yīng)該是沒有問題的
因?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();
}
作者:
yzcook
時(shí)間:
2018-4-24 14:55
這是我的接收函數(shù)
感覺在這里出了問題
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è)位都檢測時(shí)鐘線是否被拉低
{
ps2_send(0xfe);
return 0;
}
//======================================================
Delay20us();
PS2_CLK = 0;
Delay40us();
PS2_CLK = 1;
Delay20us();
PARITY = PS2_DAT;
if(!PS2_CLK) //每讀完一個(gè)位都檢測時(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;
}
作者:
yzcook
時(shí)間:
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不都為低,表明沒有命令
command = ps2_rec();
// SendStr("pass");
switch(command)
{
case 0xff: //復(fù)位命令
ps2_send(0xfa);
delay_ms(50);
ps2_send(0xaa); //自檢通過返回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è)置缺省值和停止鍵盤 ,等待進(jìn)一步命令
ps2_send(0xfa);
break;
case 0xf4: //重新使能鍵盤
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;
}
作者:
yzcook
時(shí)間:
2018-4-25 08:09
有沒有大神能解答下
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩欧美国产精品一区二区三区
|
一级高清视频
|
超碰人人人人
|
久久久精彩视频
|
美女亚洲一区
|
av资源中文在线天堂
|
精品国产欧美
|
日韩精品极品视频在线观看免费
|
91新视频
|
青青久久av北条麻妃海外网
|
国产精品免费一区二区三区
|
成人伊人
|
中文字幕在线观看国产
|
亚洲国产精品一区二区久久
|
日韩一二区
|
99草免费视频
|
毛片入口
|
国产乱码精品1区2区3区
|
国产日韩久久久久69影院
|
日韩av在线一区
|
91成人在线
|
国产高清一区二区三区
|
午夜网
|
天堂成人国产精品一区
|
www视频在线观看
|
亚洲欧洲色视频
|
午夜不卡福利视频
|
亚洲精品麻豆
|
欧美精品乱码久久久久久按摩
|
毛片免费在线
|
免费在线成人
|
在线观看国产精品一区二区
|
国产一区电影
|
国产91黄色
|
中文字幕日韩欧美一区二区三区
|
蜜桃五月天
|
亚洲国产成人精品女人久久久
|
亚洲国产精品久久久久秋霞不卡
|
日韩欧美一区二区三区免费观看
|
欧美午夜一区二区三区免费大片
|
成人免费看黄网站在线观看
|