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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

矩陣鍵盤程序,請幫忙修改程序,可送話費,可商量,多謝幫忙!

[復制鏈接]
跳轉到指定樓層
樓主
ID:47843 發表于 2015-7-2 22:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
#include <REG52.H>
#include "TM16681.h"  //4位數碼管H文件

/**********************************
宏定義字符串
**********************************/
#define keyport P2          //定義P2口為矩陣鍵盤輸入口

unsigned char xdata ComData[4];        //定義數組儲存鍵盤數據

void delayms(unsigned int count); //延時函數
unsigned char keyscan(void);          //反轉法矩陣鍵盤掃描函數
unsigned char keypro(void);                  //反轉法取得矩陣鍵盤鍵值轉換成0-15數值函數



/******************************************************

                主函數

*******************************************************/
void main(void)
{
        unsigned char i=0,keynum[4];
        unsigned int resuit;
       
        while(1)
        {

                keynum[i]=keypro();         //我的意思是把取得的按鍵值送數組保存
                i++;
                if(i>=4)                        //我的意思是要4個按鍵值分別送往千位,百位,十位,個位
                {                
                        i=0;

                        resuit=keynum[0]*1000+keynum[1]*100+keynum[2]*10+keynum[3];
                        //這句話的意思是從數組取數
               
                }
               
            NixieTube_DisplayIntegerNumber(resuit);//把取出來的數送數碼管顯示
                                                                                                   //可是出來的結果是按1顯示1111,按2顯示2222、.......
                                                                                                //松開按鍵回到顯示0,這不是我要的結果
        }

}
//請幫忙寫個函數:按鍵值存入4位數后鎖存,比如說0-9用來計數了,格式0000-9999任意數。那么10號按鍵取消后才能再輸入
//11號按鍵用來確定或調用數組數據的意思,可反復調用,按11號鍵反復把數組送別的函數中使用。
/****************************
  反轉法按鍵掃描函數,返回掃描值
******************************/
unsigned char keyscan(void)
{
        unsigned char num1;
        unsigned char KEY_h,KEY_l;//定義行列值中間變量
        P2=0xf0;     //這句話意思是讓行線輸出全為0
        if(P2!=0xf0) //不等于0就是有按鍵按下
                {
                        delayms(10);//延時去抖動
                        if((P2&0xf0)!=0x0f)//再次檢測有關按鍵按下
                                {
                                        KEY_l=P2&0xf0;//讀入列線值
                                        P2=0x0f;      //檢測行線值
                                        KEY_h=P2&0x0f;//讀入行線值
                                        num1=(KEY_l+KEY_h); //組合鍵值賦給num1
                                }
                }return num1;   //返回鍵盤碼值
}
/*****************************
按鍵值處理函數,返回掃描鍵值
********************************/
unsigned char keypro(void)
{
        switch(keyscan())//判斷讀入鍵值
                {
                        case 0xe7:return 0;break;
                        case 0xdd:return 1;break;         
                        case 0xbd:return 2;break;         
                        case 0x7d:return 3;break;         
                        case 0xdb:return 4;break;
                        case 0xbb:return 5;break;
                        case 0x7b:return 6;break;
                        case 0xd7:return 7;break;
                        case 0xb7:return 8;break;
                        case 0x77:return 9;break;  
                        case 0x7e:return 10;break;          
                        case 0xbe:return 11;break;
                        case 0xde:return 12;break;
                        case 0xee:return 13;break;
                        case 0xed:return 14;break;
                        case 0xeb:return 15;break;
                        default:return 0;break;           //如果沒有按鍵按下,送0
                }
}



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:83703 發表于 2015-7-12 11:21 | 只看該作者
#include <reg52.h>

sbit BUZZER=P3^7;

unsigned char second=0,count=0;          //設置初值
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//LED段碼表
bit RunFlag=0;

unsigned char KeyScan();
void delay(void);

void main(void)
{
        unsigned char KeyValue;
       
        TMOD=0x1;        //設置T0為定時器模式
        TH0=0x3c;        //設置T0為50ms定時長度
        TL0=0xb0;
        PT0=0;
        TR0=1;                //啟動T0
        ET0=1;                //T0中斷允許
        EA=1;                //CPU中斷允許
       
        while(1)
        {               
                P0=seg[second/10];        //顯示十位秒值       
                P2=seg[second%10];        //顯示個位秒值

                KeyValue=KeyScan();

                switch (KeyValue)
                {
                        case 0:
                                second=0;
                                break;
                        case 1:
                                second++;
                                break;
                        case 2:
                                second--;
                                break;
                        case 3:
                                RunFlag=~RunFlag;
                                break;
                        default:
                                break;
                }
        }
}

unsigned char KeyScan()
{
        unsigned char i,j,key=0x10;

        P1=0xf0;        //Yi=0;
        if ((P1 & 0xf0)!= 0xf0)        //有鍵按下?
        {
                delay();                          //去抖動
                for (i=0;i<4;i++)        //共掃描四行
                {
                         P1=(0xf0 | (~(0x01<<i)));
                        if ((P1 & 0xf0)!=0xf0)        //本行有鍵按下?
                        {
                                for (j=0;j<4;j++)
                                {
                                        if ((P1>>j & 0x10)==0x0)        //找到按鍵
                                        {
                                                key=i*4+j;
                                                break;
                                        }
                                }
                        }

                }                       
                P1=0xf0;
                while ((P1 & 0xf0)!= 0xf0);        //等待鍵抬起
                delay();                          //去抖動
        }
        return key;
}

void delay(void)
{
        unsigned char i,j;

        for (i=0;i<100;i++)
                for (j=0;j<100;j++);
}

void T0_INT() interrupt 1 using 1        //定時器T0 50ms 中斷
{
        TH0=0x3c;                //重置初值
        TL0=0xb0;

        if (RunFlag==0)
                return;

        count++;                //計數增量
        if (count==20)        //是否已到1s
        {
                count=0;        //清除計數值

                second++;        //秒增量
                if (second>=60)
                        second=0;

                if (second%5==0)
                        BUZZER=0;
                else
                        BUZZER=1;
        }
}

評分

參與人數 1威望 +50 黑幣 +50 收起 理由
admin + 50 + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区在线发布 | 日本精品一区二区三区四区 | 亚洲午夜视频在线观看 | 国产农村妇女精品一二区 | 免费看a | 中文字幕三区 | 黄色三级在线播放 | 亚洲伊人久久综合 | 欧美韩一区二区三区 | 精品久久久久久亚洲综合网 | 亚洲高清中文字幕 | 亚洲国产成人精品在线 | 久久久性色精品国产免费观看 | 91视频播放| 中文字幕一区在线观看视频 | 国产成人99久久亚洲综合精品 | 国产毛片久久久久久久久春天 | 一区二区av | 久久综合伊人一区二区三 | 一区二区三区国产在线观看 | 中文字幕精品视频 | 久草在线免费资源 | 国产精品无码专区在线观看 | 日韩手机视频 | 免费一级毛片 | 亚洲一区二区三 | 午夜看电影在线观看 | 综合色婷婷 | 国产精品 亚洲一区 | 精品欧美一区二区三区久久久 | 欧美久久一区二区 | 国产福利视频网站 | 欧美一区二区在线 | 高清国产一区二区 | 日韩 欧美 二区 | 日韩欧美操| 热久久久久 | 99久久婷婷国产综合精品首页 | 波多野结衣亚洲 | 97色免费视频 | 免费黄色特级片 |