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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請大神們幫忙看看,單片機矩陣鍵盤簡單計算器問題,按下鍵盤,鍵值如何輸出?

[復制鏈接]
跳轉到指定樓層
樓主
ID:825447 發表于 2020-10-15 10:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*現在問題是按下鍵盤,鍵值如何輸出*/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                                                                                0x66,0x6d,0x7d,0x07,
                                                                                0x7f,0x6f};
int m , num , firstflot ;                                                        
void delay( uint m )                                        //延時函數
{
        uint x , y ;
        for( x = m ; x > 0 ; x--)
                for( y = 110 ; y > 0 ; y--);
}        


void keyscan()                                                        //掃描鍵盤
{
        int temp ;
        P2=0x7f;
        temp=P2;
        temp=temp&0x0f;                        //判斷第一行按鍵
        if(temp != 0x0f )
        {
                delay( 10 ) ;
                temp = P2 ;                //重讀P2口值
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch(temp)
                        {
                                case 0x77:        num=1;                                //1
                                                                                firstflot=1 ;
                                                                                break;               
                                case 0x7b:        num=2;                        //2
                                                                                firstflot=1 ;
                                                                                break;               
                                case 0x7d:        num=3;                        //3
                                                                                firstflot=1 ;
                                                                                break;
                                case 0x7e:  num = '+' ;                //+
                                                                                break;
                        }
                        while(temp != 0x0f)                        //等待按鍵釋放
                        {
                                temp = P2;
                                temp = temp & 0x0f;
                        }
                }
        }
        P2 = 0xbf ;                                                                //掃描第二行鍵盤
        temp = P2 ;
        temp = temp & 0x0f;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                //消抖
                temp = P2 ;
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xb7:        num=4;                                //4
                                                                                firstflot=1 ;               
                                                                                break;
                                case 0xbb:        num=5;                        //5
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xbd:        num=6;                        //6
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xbe:        num = '-' ;                //-
                                                                                break;
                        }
                while( temp != 0x0f )
                {
                        temp = P2 ;
                        temp = temp & 0x0f ;
                }
         }
}
        P2 = 0xdf ;                                        //掃描第三行鍵盤
        temp = P2 ;
        temp = temp & 0x0f ;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                        //消抖
                temp = P2 ;
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xd7:        num=7;                        //7
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xdb:  num=8;                        //8
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xdd:        num=9;                        //9
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xde:        num = '*'        ;        //*
                                                                                break;
                        }
                        while( temp != 0x0f )
                        {
                                temp = P2;
                                temp = temp & 0x0f ;
                        }
                }
        }
        P2 = 0xef ;                                                //掃描第四行鍵盤
        temp = P2 ;
        temp = temp & 0x0f ;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                //消抖
                temp = P2 ;
                temp = temp & 0x0f;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xe7:        num = '$' ;                //歸0
                                                                                break;
                                case 0xeb:        num = 0 ;                                                //0
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xed:        num = '=' ;                        //=
                                                                                break;
                                case 0xee:        num = '/' ;                                //除
                                                                                break;
                        }
                }
        }
//        return num ;
}
void jisuan()
{
        m=m*10+num;
        num=0;
}


void display(m)
{
        if(m<10)
        {
                P0=0x7f ;
                P1=table[m];
                delay(1);
        }
//        if(m>10&&m<100)
//        {
//                P0=0x7f;
//                P1=table[m%10];
//                delay(1);
//                P0=0xbf;
//                P1=table[m/10];
//                delay(1);
//        }
//        if(m>100&&m<1000)
//        {
//                P0=0xdf ;
//                P1=table[m/100];
//                delay(1);
//                P0=0xbf;
//                P1=table[m%100/10];
//                delay(1);
//                P0=0x7f ;
//                P1=table[m%100%10];
//                delay(1);
//        }
//        if(m>1000&&m<10000)
//        {
//                P0=0xef ;
//                P1=table[m/1000];
//                delay(1);
//                P0=0xdf ;
//                P1=table[m%1000/100];
//                delay(1);
//                P0=0xbf;
//                P1=table[m%1000%100/10];
//                delay(1);
//                P0=0x7f ;
//                P1=table[m%1000%100%10];
//                delay(1);
//        }
//        if(m>10000&&m<100000)
//        {
//                P0=0xf7 ;
//                P1=table[m/10000];
//                delay(1);
//                P0=0xef ;
//                P1=table[m%10000/1000];
//                delay(1);
//                P0=0xdf ;
//                P1=table[m%10000%1000/100];
//                delay(1);
//                P0=0xbf;
//                P1=table[m%10000%1000%100/10];
//                delay(1);
//                P0=0x7f ;
//                P1=table[m%10000%1000%100%10];
//                delay(1);
//        }
}




void main()
{
        while(1)
        {
                keyscan() ;
                jisuan() ;
                display(m) ;
        }
}
        
        

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

使用道具 舉報

沙發
ID:123289 發表于 2020-10-15 17:02 | 只看該作者
鍵值:你可以任意設置給出!
關鍵是你需要依據硬件連接關系,先識別到鍵按下去了(通過對接口的高低電平識別),而后就可以任意輸出一個自己定義的值。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线一区二区 | 亚洲伊人精品酒店 | 给我免费的视频在线观看 | 欧美一级淫片免费视频黄 | 91精品久久久久久久久久入口 | 久久久久久久久国产 | 偷拍第一页 | 亚洲精品成人在线 | 亚洲精品国产成人 | 国产成在线观看免费视频 | 精品产国自在拍 | 成人午夜网站 | 精品欧美一区二区精品久久 | 国产日韩久久久久69影院 | 久久久久久亚洲精品 | 中文字幕国产 | 国产真实精品久久二三区 | 国产日韩精品视频 | 亚洲欧洲精品成人久久奇米网 | 精品国产成人 | 国产综合久久 | 久久精品日| 99精品99 | 国产欧美精品一区二区 | 免费网站国产 | 久久国产亚洲 | 91av视频在线 | 蜜臀久久99精品久久久久久宅男 | 国产91精品久久久久久久网曝门 | 日本一区二区不卡 | 国产精品久久久久久妇女6080 | 国产性网 | 久久av一区 | 二区视频 | 国产91亚洲精品 | 久久精品欧美电影 | 亚洲精品99999 | 91人人爽 | 56pao在线| 色爱综合| 国产精品亚洲第一 |