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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5777|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

各位大神,這個(gè)是4*4矩陣鍵盤按鍵值數(shù)碼管顯示的程序 幫忙解釋一下代碼的意思(詳...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:217769 發(fā)表于 2017-7-8 22:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define SCANPORT P1
sbit spk=P3^0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                                         0x6d,0x7d,0x07,0x7f,0x6f,
                                         0x77,0x7c,0x39,0x5e,0x79,
                                         0x71};
uchar uca_LineScan[4]={0xEF,0xDF,0xBF,0x7F};
uchar ucKeyScan()
{
        uchar Temp=0;                                 
        uchar ucRow=0,ucLine=0;            

        for(ucLine=0;ucLine<4;ucLine++)       
                {
                        SCANPORT=uca_LineScan[ucLine];                          
                        Temp=SCANPORT & 0x0F;                                         
                        if(Temp!=0x0F)                 
                                {                                                                         
                                switch(Temp)
                                        {
                                        case 0x0E: ucRow=10;break;                 
                                        case 0x0D: ucRow=20;break;
                                        case 0x0B: ucRow=30;break;
                                        case 0x07: ucRow=40;break;
                                        default:   ucRow=50;break;
                                        }
                                break;
                                }
                }

        SCANPORT=0x0F;                                         
        return ucRow+ucLine+1;                         
}
void vKeyProcess(unsigned char ucKeyCode)
{
               
        switch(ucKeyCode)
                {
                case 11:P0=table[0];spk=1;break;                                                          //'7'
                case 12:P0=table[1];spk=1;break;                                                          //'8'
                case 13:P0=table[2];spk=1;break;
                case 14:P0=table[3];spk=1;break;
                                                          
                case 21:P0=table[4];spk=1;break;                                                          //'4'
                case 22:P0=table[5];spk=1;break;                                                          //'5'
                case 23:P0=table[6];spk=1;break;
                case 24:P0=table[7];spk=1;break;
                                                  
                case 31:P0=table[8];spk=1;break;                                                          //'1'
                case 32:P0=table[9];spk=1;break;                                                          //'2'
                case 33:P0=table[10];spk=1;break;
                case 34:P0=table[11];spk=1;break;

                case 41:P0=table[12];spk=1;break;                                  //'3'
                case 42:P0=table[13];spk=1;break;
                case 43:P0=table[14];spk=1;break;                                                  //'0'
                case 44:P0=table[15];spk=1;break;                                                          //'+'

                default:break;
                }
}
void main()
{
        spk=0;
        P0=0;
       
        while(1)
        {
                vKeyProcess(ucKeyScan());
                spk=0;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:211467 發(fā)表于 2017-7-10 14:11 | 只看該作者
#include<reg51.h>        //頭文件
#define uchar unsigned char     //宏定義 uchar代替unsigned char
#define uint unsigned int    //宏定義 uint 代替unsigned int
#define SCANPORT P1  //宏定義SCANPORT代替P1口
sbit spk=P3^0;    //P3.0蜂鳴器輸出
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                                         0x6d,0x7d,0x07,0x7f,0x6f,
                                         0x77,0x7c,0x39,0x5e,0x79,
                                         0x71};            //數(shù)組顯示0~F
uchar uca_LineScan[4]={0xEF,0xDF,0xBF,0x7F};  //數(shù)組定義4顯示
uchar ucKeyScan()
{
        uchar Temp=0;                                 
        uchar ucRow=0,ucLine=0;            

        for(ucLine=0;ucLine<4;ucLine++)          //循環(huán)4次
                {
                        SCANPORT=uca_LineScan[ucLine];                              //每次循環(huán)時(shí)P1依次顯示數(shù)組uca_LineScan的4個(gè)數(shù)字
Temp=SCANPORT & 0x0F;                                            //P1高4位清零,低四位不變。并把此值賦給Temp
                        if(Temp!=0x0F)                   //如果有按鍵按下,低四位會(huì)變化,進(jìn)入IF語(yǔ)句
                                {                                                                        
                                switch(Temp)             //4個(gè)按鍵按下ucRow顯示不同的值
{
                                        case 0x0E: ucRow=10;break;                    
                                        case 0x0D: ucRow=20;break;
                                        case 0x0B: ucRow=30;break;
                                        case 0x07: ucRow=40;break;
                                        default:   ucRow=50;break;
                                        }
                                break;
                                }
                }

        SCANPORT=0x0F;                                            //P01高4位清零,使他不影響下次的按鍵顯示
return ucRow+ucLine+1;                            //3個(gè)數(shù)相加,按鍵按下 (沒有電路圖),可能是這個(gè)數(shù)字,僅寫出第一次循環(huán)的數(shù)字,共4次循環(huán),
                                                      0001 0000+0000 0000+0000 0001=0x11
                                                      0010 0000+0000 0000+0000 0001=0x21
                                                      0011 0000+0000 0000+0000 0001=0x31
                                                      0100 0000+0000 0000+0000 0001=0x41
                                                    (。。。0x12,0x22,0x32,0x42
                                                       ......
                                                         ....                               )
}
void vKeyProcess(unsigned char ucKeyCode)
{
               
        switch(ucKeyCode)                         顯示一個(gè)數(shù)字,蜂鳴器響
    {
                case 11:P0=table[0];spk=1;break;                                                          //'7'
                case 12:P0=table[1];spk=1;break;                                                          //'8'
                case 13:P0=table[2];spk=1;break;
                case 14:P0=table[3];spk=1;break;
                                                         
                case 21:P0=table[4];spk=1;break;                                                          //'4'
                case 22:P0=table[5];spk=1;break;                                                          //'5'
                case 23:P0=table[6];spk=1;break;
                case 24:P0=table[7];spk=1;break;
                                                  
                case 31:P0=table[8];spk=1;break;                                                          //'1'
                case 32:P0=table[9];spk=1;break;                                                          //'2'
                case 33:P0=table[10];spk=1;break;
                case 34:P0=table[11];spk=1;break;

                case 41:P0=table[12];spk=1;break;                                  //'3'
                case 42:P0=table[13];spk=1;break;
                case 43:P0=table[14];spk=1;break;                                                  //'0'
                case 44:P0=table[15];spk=1;break;                                                          //'+'

                default:break;
                }
}
void main()
{
        spk=0;
        P0=0;
        
        while(1)
        {
                vKeyProcess(ucKeyScan());    //進(jìn)入顯示子程序
                spk=0;                //關(guān)閉蜂鳴器
        }
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2017-7-10 18:05 | 只看該作者
樓上注釋的很好,略做補(bǔ)充。
for(ucLine=0;ucLine<4;ucLine++) //行掃描1~4次,一旦行、列條件滿足立即跳出循環(huán)
{
        SCANPORT=uca_LineScan[ucLine]; //每次循環(huán)時(shí)P1依次置數(shù),數(shù)組uca_LineScan的4個(gè)數(shù)字,判斷行碼
        Temp=SCANPORT & 0x0F;          //P1高4位清零,低四位不變。并把此值賦給Temp
        if(Temp!=0x0F)                 //如果有按鍵按下,低四位會(huì)變化,進(jìn)入IF語(yǔ)句
        {                                                                        
                switch(Temp)             //4個(gè)按鍵按下ucRow顯示不同的值,判斷列碼
                ......
                break;                                        //獲取有效鍵值即跳出for循環(huán)
        }
        ......
}
return ucRow+ucLine+1;;                //返回鍵值=列值+行值+1(行值0~3,所以要+1)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九色综合网 | 一级毛片色一级 | av片在线免费看 | 亚洲成人精品一区 | 99精品视频在线 | 欧美日韩中文字幕在线 | 国产婷婷精品av在线 | 91极品欧美视频 | 国产亚洲精品美女久久久久久久久久 | 国产一区二区三区免费视频 | 欧美日韩精品一区 | 精品国产免费一区二区三区五区 | 亚洲视频二区 | 中文字幕蜜臀av | 国产aⅴ爽av久久久久久久 | 一二三四av | 午夜在线影院 | 亚洲日本欧美 | 日韩乱码在线 | 嫩草视频在线看 | 免费一看一级毛片 | 日韩免费| 在线欧美小视频 | 欧美日韩在线一区二区三区 | 午夜免费观看体验区 | 99精品视频网| 国产亚洲精品美女久久久久久久久久 | 国产亚洲一区二区精品 | 一区二区三区四区在线视频 | 黑人精品欧美一区二区蜜桃 | 中文在线日韩 | 看av网址| 好姑娘影视在线观看高清 | 久草网免费| 久久久精品一区二区三区 | 精品视频一区二区三区在线观看 | 久久久久久蜜桃一区二区 | 国产精品色哟哟网站 | 看一级毛片 | 欧美一级二级三级视频 | 国产精久久久 |