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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1564|回復: 6
打印 上一主題 下一主題
收起左側(cè)

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:609989 發(fā)表于 2019-10-15 16:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題。這個項目因為使用輸入口較多,所以用了矩陣控制。
但是 為什么:我上電開始讀數(shù)據(jù),數(shù)碼管就會顯示“8”呢?我刪除掉初始化開始讀數(shù)據(jù)后,他就正常了。我不知道為什么,請指導下。大神們。
程序“我只放了矩陣這一塊”:
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);//函數(shù)返回值
}
“矩陣調(diào)用程序”
    ch451_init();                //顯示初始化
    ch451_write(0x0401);        //顯示開
    ch451_write(0x0600);        //閃爍全關
    while(1)
    {
   
         key=keyl();//讀鍵盤值,key=函數(shù)返回值
       ch451_write( CH451_DIG1|bc[key] );    //就是這一句,我上電后就會讀數(shù)據(jù),會顯示“8”,我把這一句刪除掉就好了。
        if(key!=0xff)//有鍵按下么?
        {
            delayms(20);
             if(key!=0xff)//真的有么?有的 就繼續(xù)往下走
            {
            
                while(P2!=0xf0);//你松開了按鍵么
                do{delayms(20);}
                while(P2!=0xf0);//你真的松開了么
                ch451_write( CH451_DIG1|bc[key] );
            }
        }

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

使用道具 舉報

沙發(fā)
ID:609989 發(fā)表于 2019-10-15 18:00 | 只看該作者
上面有個地方錯了: uchar “keycl”()寫錯了,應該是key1.
回復

使用道具 舉報

板凳
ID:503018 發(fā)表于 2019-10-15 22:23 | 只看該作者
有錯的地方多呀‘
回復

使用道具 舉報

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

使用道具 舉報

5#
ID:235200 發(fā)表于 2019-10-15 22:58 | 只看該作者
刪除那一句就沒有往顯示控制器CH451中送數(shù)據(jù),當然就沒有顯示了,與調(diào)不調(diào)用矩陣鍵盤都沒關系,關鍵看數(shù)組be[key]存了什么值
回復

使用道具 舉報

6#
ID:609989 發(fā)表于 2019-10-16 13:37 | 只看該作者
csmyldl 發(fā)表于 2019-10-15 22:58
刪除那一句就沒有往顯示控制器CH451中送數(shù)據(jù),當然就沒有顯示了,與調(diào)不調(diào)用矩陣鍵盤都沒關系,關鍵看數(shù)組be[k ...

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

使用道具 舉報

7#
ID:235200 發(fā)表于 2019-10-16 15:07 | 只看該作者
這應該是讀矩陣鍵盤時影響了發(fā)光二極管的電壓,如果能夠鎖定二極管的供電電壓或者改變讀取矩陣鍵盤的時間,就不會出現(xiàn)這種情況了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九爱这里只有精品 | 女同av亚洲女人天堂 | 伊人久久大香线 | 成人福利网 | 中文字幕一区二区三区精彩视频 | 国产成人短视频在线观看 | 四虎永久免费在线 | 二区三区av | 在线播放一区二区三区 | 福利精品 | 国产福利在线 | av网站免费观看 | 五月激情综合网 | 亚洲网在线 | 欧美一卡二卡在线 | 国产视频一区在线 | 精精国产xxxx视频在线播放 | 日本高清在线一区 | 在线观看中文字幕av | 999久久久免费精品国产 | 99热精品在线观看 | 欧美最猛黑人xxxx黑人 | 中文字幕乱码亚洲精品一区 | 成人小视频在线免费观看 | 亚洲性人人天天夜夜摸 | 九九热在线精品视频 | 国产精品美女久久久久久久久久久 | 在线观看视频福利 | 欧美一区二区三区 | 免费看a| 成人国产精品久久 | 男人天堂av网站 | 亚av在线| 天堂一区 | 亚洲精品久久久一区二区三区 | 国产高清视频在线播放 | 亚洲一区视频在线 | 水蜜桃久久夜色精品一区 | 九一精品 | 亚洲一区视频在线 | 美日韩免费 |