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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1677|回復: 6
收起左側

關于51單片機控制矩陣程序,為什么上電就顯示8呢?

[復制鏈接]
ID:609989 發表于 2019-10-15 16:33 | 顯示全部樓層 |閱讀模式
如題。這個項目因為使用輸入口較多,所以用了矩陣控制。
但是 為什么:我上電開始讀數據,數碼管就會顯示“8”呢?我刪除掉初始化開始讀數據后,他就正常了。我不知道為什么,請指導下。大神們。
程序“我只放了矩陣這一塊”:
uchar keycl()
{
    uchar a,b;
    P2=0x0f;
    i=P2;//讀取P1低4位,放在i
    P2=0xf0;
    j=P2;//不用說也知道吧
    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);//函數返回值
}
“矩陣調用程序”
    ch451_init();                //顯示初始化
    ch451_write(0x0401);        //顯示開
    ch451_write(0x0600);        //閃爍全關
    while(1)
    {
   
         key=keyl();//讀鍵盤值,key=函數返回值
       ch451_write( CH451_DIG1|bc[key] );    //就是這一句,我上電后就會讀數據,會顯示“8”,我把這一句刪除掉就好了。
        if(key!=0xff)//有鍵按下么?
        {
            delayms(20);
             if(key!=0xff)//真的有么?有的 就繼續往下走
            {
            
                while(P2!=0xf0);//你松開了按鍵么
                do{delayms(20);}
                while(P2!=0xf0);//你真的松開了么
                ch451_write( CH451_DIG1|bc[key] );
            }
        }

回復

使用道具 舉報

ID:609989 發表于 2019-10-15 18:00 | 顯示全部樓層
上面有個地方錯了: uchar “keycl”()寫錯了,應該是key1.
回復

使用道具 舉報

ID:503018 發表于 2019-10-15 22:23 | 顯示全部樓層
有錯的地方多呀‘
回復

使用道具 舉報

ID:503018 發表于 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();
}
}
回復

使用道具 舉報

ID:235200 發表于 2019-10-15 22:58 | 顯示全部樓層
刪除那一句就沒有往顯示控制器CH451中送數據,當然就沒有顯示了,與調不調用矩陣鍵盤都沒關系,關鍵看數組be[key]存了什么值
回復

使用道具 舉報

ID:609989 發表于 2019-10-16 13:37 | 顯示全部樓層
csmyldl 發表于 2019-10-15 22:58
刪除那一句就沒有往顯示控制器CH451中送數據,當然就沒有顯示了,與調不調用矩陣鍵盤都沒關系,關鍵看數組be[k ...

恩,我在主程序運行時把“uchar key1();”加進去就好了。但是還是沒有弄別白,為什么上電key里面有數值。?
還有一個問題:我的板子P2口有輸出二極管顯示, P2=0xf0;(11110000)應該是低四位輸出低電平,我的二極管發亮,但是現在是低四位發亮,可是高四位的二極管似亮非亮感覺電壓不足的那種。我實際用電壓測了一下:單片機高四位電壓輸出是6.2V,我的發光二極管(5V串聯511的電阻和發光二極管),是不是我的單片機輸出端和二極管端出現了壓差導致呢?
回復

使用道具 舉報

ID:235200 發表于 2019-10-16 15:07 | 顯示全部樓層
這應該是讀矩陣鍵盤時影響了發光二極管的電壓,如果能夠鎖定二極管的供電電壓或者改變讀取矩陣鍵盤的時間,就不會出現這種情況了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 欧美 另类 日韩 | 男女爱爱网站 | 视频一区在线观看 | 在线观看中文字幕亚洲 | 成人在线不卡 | 久久一区精品 | 国产精品美女www爽爽爽视频 | 日韩中文字幕在线免费 | 黄色大片免费网站 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 草草视频在线观看 | 狠狠色综合欧美激情 | 精品久久久久久久人人人人传媒 | 国产日韩一区二区三区 | 久久99蜜桃综合影院免费观看 | 日本精品一区二区三区在线观看视频 | 欧美日韩国产传媒 | 国产精品一码二码三码在线 | 久久久久av | 五月天激情综合网 | 亚洲视频一区二区三区四区 | 99在线免费视频 | 就操在线 | 久久国产精品久久 | 青青草一区 | 五月婷婷激情 | 国产精品久久久久一区二区三区 | 97人人澡人人爽91综合色 | 欧美自拍一区 | www.一级毛片 | 日屁网站 | 国产精品久久久久久久久久免费看 | 久久一区二区视频 | 一级毛片网 | 午夜三级网站 | 久久精品国产99国产精品 | 国产精品美女一区二区 | 亚洲成人一区 | 美女亚洲一区 | 日韩在线免费观看视频 | 91精品国产综合久久小仙女图片 |