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

QQ登錄

只需一步,快速開始

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

需要一份詳細(xì)的程序解釋

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
100黑幣
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^0;
sbit K1 = P3^7;

uchar code DSY_CODE[]=
{
        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e
};
uchar Pre_KeyNO = 16,KeyNO = 16;

void DelayMS(uint ms)//延時(shí)函數(shù)
{
        uchar t;
        while(ms--)
        {
                 for(t=0;t<120;t++);
        }
}

void Keys_Scan()
{
        uchar Tmp;
        P1 = 0x0f;
        DelayMS(1); //利用短延時(shí)來消抖
        Tmp = P1 ^ 0x0f;
        switch(Tmp)
        {
                 case 1: KeyNO = 0; break;//列檢測(cè)
                case 2: KeyNO = 1; break;
                case 4: KeyNO = 2; break;
                case 8: KeyNO = 3; break;
                default: KeyNO = 16;
        }
        P1 = 0xf0;
        DelayMS(1);
        Tmp = P1 >> 4 ^ 0x0f;//向后移4位,求出P1的值
        switch(Tmp)
        {
                 case 1: KeyNO += 0; break;//行檢測(cè)
                case 2: KeyNO += 4; break;
                case 4: KeyNO += 8; break;
                case 8: KeyNO += 12;
        }
}

void Beep()
{
        uchar i;
        for(i=0;i<50;i++)
        {
                 DelayMS(1);
                BEEP = ~BEEP;
        }
        BEEP = 0;
}

void main()
{
        P0 = 0x00;
        P2 = 0x00;
        while(1)
        {
                 P1 = 0xf0;
                if(P1 != 0xf0)
                {
                   Keys_Scan();
                        P0 = 0x3f;//0
                        P2 = ~DSY_CODE[KeyNO];//0~f
                        Beep();
                        DelayMS(100);
                }
                if(K1==0)
                {
                     while(K1==0);
                     while(1)
                     {
                       P1 = 0xf0;
                       if(P1 != 0xf0)
                       if(KeyNO<10)
                       {
                          Keys_Scan();
                          P0 = 0x3f;
                          P2 = ~DSY_CODE[KeyNO];
                          Beep();
                          DelayMS(100);
                       }
                       else
                       {
                          Keys_Scan();
                          P0 = 0x06;//1
                          P2 = ~DSY_CODE[KeyNO-10];//0~6
                          Beep();
                          DelayMS(100);
                       }
                       if(K1==0)
                       {
                          while(K1==0);
                             break;
                       }
                     }
                }  
               
        }
}


QQ圖片20180510202329.png (64.34 KB, 下載次數(shù): 58)

QQ圖片20180510202329.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表