欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求51單片機矩陣鍵盤輸入,四位共陰數碼管簡易計算機程序及仿真 [打印本頁]

作者: ZnS丶    時間: 2017-4-21 10:58
標題: 求51單片機矩陣鍵盤輸入,四位共陰數碼管簡易計算機程序及仿真
要求能做兩位數的加減乘除

作者: cjjcjj1    時間: 2017-4-21 22:34
提示: 作者被禁止或刪除 內容自動屏蔽
作者: Bigbing1213    時間: 2017-4-22 05:40
/*********************************************************************************
*實驗名   :矩陣鍵盤掃描 數碼管顯示
*實驗效果        :按S1-S16矩陣按鍵,數碼管8位依次顯示0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
*
*********************************************************************************/
#include<reg52.h>
#include"bstv51.h"

uchar code table[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
                   0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
                   0x5e , 0x79 , 0x71 , 0x00};         //0-9&A-F&“不顯示”  字型碼

void delay(uint xms)        //延遲xms
{
    uint i,j;
        for(i=xms;i>0;i--)
          for(j=112;j>0;j--);
}

void display(uchar num)           //數碼管顯示函數
{
    P0=table[num];                 //段選
        DU=1;
        DU=0;
}

void keyscan4x4()
{
    uchar temp,key;


        ///////////////第一行掃描///////////////////
        P3=0xfe;//1111 1110 讓P3.0口輸出低
        temp=P3;
        temp=temp&0xf0;//1111 0000        位與操作 屏蔽后四位
        if(temp!=0xf0)
        {
            delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                    temp=P3;
                        switch(temp)
                        {
                          case 0xee:           //1110 1110 S1被按下
                               key=0;
                                   break;
                          case 0xde:                  //1101 1110  S2被按下
                                   key=1;
                                   break;
                          case 0xbe:                  //1011 1110  S3被按下
                                   key=2;
                                   break;
                          case 0x7e:                  //0111 1110  S4被按下
                                   key=3;
                                   break;
                        }
                        while(temp!=0xf0)
                        {
                            temp=P3;
                                temp=temp&0xf0;
                        }
                        display(key);
                }
        }
                        ///////////////第二行掃描///////////////////
        P3=0xfd;//1111 1101 讓P3.1口輸出低
        temp=P3;
        temp=temp&0xf0;//1111 0000        位與操作 屏蔽后四位
        if(temp!=0xf0)
        {
            delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                    temp=P3;
                        switch(temp)
                        {
                          case 0xed:           //1110 1101 S5被按下
                               key=4;
                                   break;
                          case 0xdd:                  //1101 1101  S6被按下
                                   key=5;
                                   break;
                          case 0xbd:                  //1011 1101  S7被按下
                                   key=6;
                                   break;
                          case 0x7d:                  //0111 1101  S8被按下
                                   key=7;
                                   break;
                        }
                        while(temp!=0xf0)
                        {
                            temp=P3;
                                temp=temp&0xf0;
                        }
                        display(key);
                }
         }
                        ///////////////第三行掃描///////////////////
        P3=0xfb;//1111 1011 讓P3.2口輸出低
        temp=P3;
        temp=temp&0xf0;//1111 0000        位與操作 屏蔽后四位
        if(temp!=0xf0)
        {
            delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                    temp=P3;
                        switch(temp)
                        {
                          case 0xeb:           //1110 1011 S9被按下
                               key=8;
                                   break;
                          case 0xdb:                  //1101 1011  S10被按下
                                   key=9;
                                   break;
                          case 0xbb:                  //1011 1011  S11被按下
                                   key=10;
                                   break;
                          case 0x7b:                  //0111 1011  S12被按下
                                   key=11;
                                   break;
                        }
                        while(temp!=0xf0)
                        {
                            temp=P3;
                                temp=temp&0xf0;
                        }
                        display(key);
                  }
                }

                        ///////////////第四行掃描///////////////////
        P3=0xf7;//1111 0111 讓P3.0口輸出低
        temp=P3;
        temp=temp&0xf0;//1111 0000        位與操作 屏蔽后四位
        if(temp!=0xf0)
        {
            delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                    temp=P3;
                        switch(temp)
                        {
                          case 0xe7:           //1110 0111 S13被按下
                               key=12;
                                   break;
                          case 0xd7:                  //1101 0111  S14被按下
                                   key=13;
                                   break;
                          case 0xb7:                  //1011 0111  S15被按下
                                   key=14;
                                   break;
                          case 0x77:                  //0111 0111  S16被按下
                                   key=15;
                                   break;
                        }
                        while(temp!=0xf0)
                        {
                            temp=P3;
                                temp=temp&0xf0;
                        }
                        display(key);

                 }
         }

}

void main()
{
    bstv51_init(); //學習板初始化
        P0=0;                 //位選 鎖存為8位同時顯示
        WE=1;
        WE=0;
        while(1)
        {
           keyscan4x4();
        }
}








/*********************************************************************
*
*                         bstv51.c
*
*********************************************************************
* 描    述: BST-V51開發板初始化
* 開發平臺: BST-V51開發板+KEIL C51
********************************************************************/

#include <reg52.h>/*包含51系統頭文件*/
#include "bstv51.h"/*包含BST-V51開發板頭文件*/

/*BST-V51主板初始化函數*/
void bstv51_init(void)
{
        /* 引腳方向、輸出初值定義 */
        FM=1;/*蜂鳴器*/
        EN=0;/*讓LCD1602數據口處于輸入狀態,相當于LCD1602使不能,讓其釋放數據總線*/
        CS=1;/*TF卡使不能*/
        RST=0;/*ds1302使不能*/
}






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1