欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 關(guān)于51單片機(jī)控制矩陣程序,為什么上電就顯示8呢? [打印本頁(yè)]

作者: baiyun1234    時(shí)間: 2019-10-15 16:33
標(biāo)題: 關(guān)于51單片機(jī)控制矩陣程序,為什么上電就顯示8呢?
如題。這個(gè)項(xiàng)目因?yàn)槭褂幂斎肟谳^多,所以用了矩陣控制。
但是 為什么:我上電開(kāi)始讀數(shù)據(jù),數(shù)碼管就會(huì)顯示“8”呢?我刪除掉初始化開(kāi)始讀數(shù)據(jù)后,他就正常了。我不知道為什么,請(qǐng)指導(dǎo)下。大神們。
程序“我只放了矩陣這一塊”:
uchar keycl()
{
    uchar a,b;
    P2=0x0f;
    i=P2;//讀取P1低4位,放在i
    P2=0xf0;
    j=P2;//不用說(shuō)也知道吧
    a=i+j;//行+列
        switch(a)//16種情況
        {
            case 0x7e:b=0;break;
            case 0xbe:b=1;break;
            case 0xde:b=2;break;
            case 0xee:b=3;break;
            case 0x7d:b=4;break;
            case 0xbd:b=5;break;
            case 0xdd:b=6;break;
            case 0xed:b=7;break;
            case 0x7b:b=8;break;
            case 0xbb:b=9;break;
            case 0xdb:b=10;break;
            case 0xeb:b=11;break;
            case 0x77:b=12;break;
            case 0xb7:b=13;break;
            case 0xd7:b=14;break;
            case 0xe7:b=15;break;
            default:b=0xff ;break;
    }
       return(b);//函數(shù)返回值
}
“矩陣調(diào)用程序”
    ch451_init();                //顯示初始化
    ch451_write(0x0401);        //顯示開(kāi)
    ch451_write(0x0600);        //閃爍全關(guān)
    while(1)
    {
   
         key=keyl();//讀鍵盤值,key=函數(shù)返回值
       ch451_write( CH451_DIG1|bc[key] );    //就是這一句,我上電后就會(huì)讀數(shù)據(jù),會(huì)顯示“8”,我把這一句刪除掉就好了。
        if(key!=0xff)//有鍵按下么?
        {
            delayms(20);
             if(key!=0xff)//真的有么?有的 就繼續(xù)往下走
            {
            
                while(P2!=0xf0);//你松開(kāi)了按鍵么
                do{delayms(20);}
                while(P2!=0xf0);//你真的松開(kāi)了么
                ch451_write( CH451_DIG1|bc[key] );
            }
        }


作者: baiyun1234    時(shí)間: 2019-10-15 18:00
上面有個(gè)地方錯(cuò)了: uchar “keycl”()寫錯(cuò)了,應(yīng)該是key1.
作者: 無(wú)線強(qiáng)大    時(shí)間: 2019-10-15 22:23
有錯(cuò)的地方多呀‘
作者: 無(wú)線強(qiáng)大    時(shí)間: 2019-10-15 22:24
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                    0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,
                                        0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P0=table[num];
dula=1;
dula=0;
}
void matrixkeyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee: key=0;
           break;
case 0xde: key=1;
           break;
case 0xbe: key=2;
           break;
case 0x7e: key=3;
           break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed: key=4;
           break;
case 0xdd: key=5;
           break;
case 0xbd: key=6;
           break;
case 0x7d: key=7;
           break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:  key=8;
            break;
case 0xdb:  key=9;
            break;
case 0xbb:  key=10;
            break;
case 0x7b:  key=11;
            break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:  key=12;
            break;
case 0xd7:  key=13;
            break;
case 0xb7:  key=14;
            break;
case 0x77:  key=15;
            break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
P0=0;
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
while(1)
{
matrixkeyscan();
}
}

作者: csmyldl    時(shí)間: 2019-10-15 22:58
刪除那一句就沒(méi)有往顯示控制器CH451中送數(shù)據(jù),當(dāng)然就沒(méi)有顯示了,與調(diào)不調(diào)用矩陣鍵盤都沒(méi)關(guān)系,關(guān)鍵看數(shù)組be[key]存了什么值
作者: baiyun1234    時(shí)間: 2019-10-16 13:37
csmyldl 發(fā)表于 2019-10-15 22:58
刪除那一句就沒(méi)有往顯示控制器CH451中送數(shù)據(jù),當(dāng)然就沒(méi)有顯示了,與調(diào)不調(diào)用矩陣鍵盤都沒(méi)關(guān)系,關(guān)鍵看數(shù)組be[k ...

恩,我在主程序運(yùn)行時(shí)把“uchar key1();”加進(jìn)去就好了。但是還是沒(méi)有弄?jiǎng)e白,為什么上電key里面有數(shù)值。?
還有一個(gè)問(wèn)題:我的板子P2口有輸出二極管顯示, P2=0xf0;(11110000)應(yīng)該是低四位輸出低電平,我的二極管發(fā)亮,但是現(xiàn)在是低四位發(fā)亮,可是高四位的二極管似亮非亮感覺(jué)電壓不足的那種。我實(shí)際用電壓測(cè)了一下:?jiǎn)纹瑱C(jī)高四位電壓輸出是6.2V,我的發(fā)光二極管(5V串聯(lián)511的電阻和發(fā)光二極管),是不是我的單片機(jī)輸出端和二極管端出現(xiàn)了壓差導(dǎo)致呢?
作者: csmyldl    時(shí)間: 2019-10-16 15:07
這應(yīng)該是讀矩陣鍵盤時(shí)影響了發(fā)光二極管的電壓,如果能夠鎖定二極管的供電電壓或者改變讀取矩陣鍵盤的時(shí)間,就不會(huì)出現(xiàn)這種情況了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1