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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3832|回復: 1
打印 上一主題 下一主題
收起左側

51單片機矩陣鍵盤16個鍵值控制數碼管的輸出0000到1111

[復制鏈接]
跳轉到指定樓層
樓主
如何用矩陣鍵盤的16個鍵值對應四段數碼管顯示0000到1111?我寫的一個子函數 dectobin(int n)是先十進制轉化成二進制,再放到數組里,數組里對應鍵值得2進制數,然后再數碼管上顯示出來,我仿真不出來 求解



#include <reg51.h>
#define GPIO_DIG P0
#define GPIO_KEY P1
#define GPIO_PLACE P2

unsigned char code DIG_CODE[2]={0xc0,0xf9};//0xc0 0cf9
unsigned char code DIG_PLACE[4]={0xfe,0xfd,0xfb,0xf7};//fe fd fb f7
unsigned char KeyState;//×′ì¬
unsigned char DigplayDate[4];//????????4????
unsigned char SHUZU[4];
unsigned char KeyValue;//????????????

void Delay10ms(unsigned int c);
void KeyDown();
void dectobin(int n);//?????????
void DigDisplay();//??????


void main(void)
{
        KeyState=0;
        while(1)
        {
                KeyDown();
         
                if(KeyState==1)
                {
                         dectobin(KeyValue);
                        /*DigplayDate[3]=SHUZU[0];
                        DigplayDate[2]=SHUZU[1];
                        DigplayDate[1]=SHUZU[2];
                        DigplayDate[0]=SHUZU[3];
                       
                        *///KeyState=0;
                }
                DigDisplay();
        }
KeyState=0;
}



void DigDisplay()//???????
{
        unsigned char i;
        unsigned int j;
        unsigned char DigplayDate[4];
        for(i=0;i<4;i++)
        {
    if(SHUZU[i]==0)
           DigplayDate[i] = DIG_CODE[0];       
                else
           DigplayDate[i] = DIG_CODE[1];
                GPIO_PLACE=DIG_PLACE[i]; //????
                GPIO_DIG=DigplayDate[i];//????
                Delay10ms(1);
                j=10;
                while(j--);
                GPIO_DIG=0xff;//??
  }
       
}


void KeyDown(void)
{
        unsigned int a=0;

        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
          {
                Delay10ms(1);
                a++;       
                a=0;
                if(GPIO_KEY!=0x0f)
                {
                        KeyState=1;//óD°′¼ü°′ÏÂ
                        //2aêÔáD
                        GPIO_KEY=0X0F;
//                         Delay10ms(1);
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=4;break;
                                case(0X0d): KeyValue=8;break;
                                case(0X0e):        KeyValue=12;break;
//                                default:        KeyValue=17;        //¼ì2a3ö′í»Ø¸′17òa˼êǰÑêyÂë1üè«Ãeμô¡£
                        }
                        //2aêÔDD
                        GPIO_KEY=0XF0;
//                        Delay10ms(1);
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue+3;break;
                                case(0Xb0):        KeyValue=KeyValue+2;break;
                                case(0Xd0): KeyValue=KeyValue+1;break;
                                case(0Xe0):        KeyValue=KeyValue;break;
//                                default:        KeyValue=17;
                        }
                        while((a<50)&&(GPIO_KEY!=0xf0))         //°′¼üËéêÖ¼ì2a
                        {
                                Delay10ms(1);
                                a++;
                        }
                        a=0;
                }
        }
}


void dectobin(int n)
{
        int i,temp,j=0;
        temp=n;
        for(i=0;i<4;i++)
        {
                if(temp==0)
                SHUZU[i]=0;
                else
                {
                        j=temp%2;
                        SHUZU[i]=j;
                  temp=temp/2;
                }
               
        }
          
               
}


void Delay10ms(unsigned int c)   //?? 0us
{
    unsigned char a, b;

        //--c???????????????,???for???????????--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                        }         
        }      
}

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

使用道具 舉報

沙發
ID:111634 發表于 2018-11-2 21:26 | 只看該作者
本帖最后由 zl2168 于 2018-11-3 08:42 編輯

實例75  4×4矩陣式鍵盤
Proteus仿真一下,確認有效。

實例75 4×4矩陣式鍵盤.rar (44.8 KB, 下載次數: 33)


實例76  8279擴展8×8鍵盤
實例76 8279擴展鍵盤和顯示.rar (125.29 KB, 下載次數: 5)
實例77  74HC595+165擴展8×8鍵盤
實例77 74LS595 165擴展8×8鍵盤.rar (65.99 KB, 下載次數: 4)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1.書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人av| 亚洲区一 | 亚洲免费在线视频 | 91久久国产 | 欧美日韩综合 | 亚洲黄色视屏 | 久久国产精品一区二区 | 欧美成人一区二区三区 | 午夜二区| 免费看91| 亚洲第一成人av | 一本大道久久a久久精二百 欧洲一区二区三区 | 久久综合婷婷 | 日本不卡一区二区三区 | 亚洲一区二区三区视频免费观看 | 奇米影视在线 | 成人久草| 国产精品亚洲综合 | 国产在线aa | 97在线超碰 | 狠狠天天 | 国产精品美女www爽爽爽 | 欧美mv日韩mv国产网站91进入 | 亚洲一区二区三区四区五区中文 | 国产成人精品综合 | 国产91丝袜在线播放 | 日韩欧美在线不卡 | 久久久久国产精品午夜一区 | 一区影院 | 热re99久久精品国产99热 | 91精品国产综合久久久久 | 久久久久国产精品 | 新疆少妇videos高潮 | 国产激情偷乱视频一区二区三区 | 亚洲国产精品成人久久久 | 日韩av第一页 | 国产精品福利在线 | 欧美不卡| 久久久精 | 亚洲v区| 国产午夜在线 |