欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
各位大佬,我想通過8255的A口接鍵盤控制B,C口的高低電平,該怎么改程序?
[打印本頁]
作者:
qwerwcnm
時間:
2021-1-15 10:27
標題:
各位大佬,我想通過8255的A口接鍵盤控制B,C口的高低電平,該怎么改程序?
各位大佬,我想通過8255的A口接鍵盤控制B,C口的高低電平(例如,第一個按鍵按下后,PB0變?yōu)榈碗娖剑侔匆幌拢琍B0變?yōu)楦唠娖剑覒?yīng)該怎么該程序
1.JPG
(172.36 KB, 下載次數(shù): 45)
下載附件
2021-1-15 10:25 上傳
#include<reg52.h>
#include<absacc.h>
#define PA XBYTE[0x7cff] //A口地址定義
#define PB XBYTE[0x7dff] //B口地址定義
#define PC XBYTE[0x7eff] //C口地址定義
#define COM XBYTE[0x7fff] //控制地址定義
void DelayM(unsigned int x) //延時子程序
{
unsigned char t;
while(x--)
{
for(t=0;t<120;t++);
}
}
unsigned char keyscan(void) //鍵盤掃描
{
unsigned temp,keynum;
PA=0xfe;
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
DelayM(20);
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=PA;
switch(temp)
{
case 0xee:keynum=0;PB=0xfe;break;
case 0xde:keynum=1;PB=0xfd;break;
case 0xbe:keynum=2;PB=0xfb;break;
case 0x7e:keynum=3;PB=0xf7;break;
}
while((temp&0xf0)!=0xf0)
{
temp=PA;
}
}
}
PA=0xfd;
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
DelayM(20);
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=PA;
switch(temp)
{
case 0xed:keynum=4;PB=0xef;break;
case 0xdd:keynum=5;PB=0xdf;break;
case 0xbd:keynum=6;PB=0xbf;break;
case 0x7d:keynum=7;PB=0x7f;break;
}
while((temp&0xf0)!=0xf0)
{
temp=PA;
}
}
}
PA=0xfb;
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
DelayM(20);
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=PA;
switch(temp)
{
case 0xeb:keynum=8;PC=0xfe;break;
case 0xdb:keynum=9;PC=0xfd;break;
case 0xbb:keynum=10;PC=0xfb;break;
case 0x7b:keynum=11;PC=0xf7;break;
}
while((temp&0xf0)!=0xf0)
{
temp=PA;
}
}
}
PA=0xf7;
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
DelayM(20);
temp=PA;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=PA;
switch(temp)
{
case 0xe7:keynum=12;PC=0xef;break;
case 0xd7:keynum=13;PC=0xdf;break;
case 0xb7:keynum=14;PC=0xbf;break;
case 0x77:keynum=15;PC=0x7f;break;
}
while((temp&0xf0)!=0xf0)
{
temp=PA;
}
}
}
}
void main()
{
COM=0x90; //方式0,A口為輸入,B,C口為輸出
PA=0xff;
PB=0xff;
PC=0xff;
while(1)
{
keyscan();
}
}
復(fù)制代碼
作者:
munuc_w
時間:
2021-1-16 16:11
在此提供一點思路,供參考。
u8 temp;
if(k1)//k1按下
temp++;
if(temp >1)
temp = 0;
if(temp==1)
PB &= 0xfe;//PB0輸出低電平,LED亮
else
PB |= 0x01;//PB0輸出高電平,LED滅
作者:
suncat0504
時間:
2021-1-16 19:00
我查了8255的資料,感覺你使用好像有問題。如果想作為掃描鍵盤用,你應(yīng)該使用PC口作為鍵盤矩陣使用。掃描矩陣要求一部分輸出,一部分輸入。
對8255,在設(shè)置好控制字后,是沒法讓PA口的一部分成為輸出,而另一部分成為輸出。PB也是一樣的。只有PC口是允許一部分成為輸入、而另一部分成為輸出的。
你的程序中,在設(shè)置控制字時,應(yīng)使
1、PA口作為輸出口,PB口作為輸出口。
2、PC7-PC4作為輸出、PC3-PC0作為輸入;或者PC7-PC4作為輸入、PC3-PC0作為輸出;
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1