单片机
返回首页

课程设计:矩阵键盘扫描显示(c51反转法)

2016-09-13 来源:eefocus

课程设计:矩阵键盘扫描显示(c51反转法) - gududesiling - suixin

 

//矩阵键盘扫描程序

//采用翻转识别法(相对代码少一些)

 

#include

#define uchar unsigned char

#define uint unsigned int

uchar key=0;

 

//共阳数码管编码如下(0-15)

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

 

//函数声明

void display(uchar Duan_value);

void delay(uchar t);

void key_scan();

 

void main()

{

       while(1)

       {

              display(key);//显示按键值

              key_scan();    //按键扫描

       }

}

 

//延时函数

void delay(uchar t)

{

 uchar x,y;

 for(x=t;t>0;t--)

      for(y=111;y>0;y--);

}

 

//数码管扫描函数

void display(uchar value)

{

        P2=table[value];

}

 

//按键扫描函数

void key_scan()

{

       uchar m0,m1;

       uchar temp;   

 

       P1=0xf0;//这样设置是为了能使低四位将高四位拉低,释放时自动拉高高四位 

       temp=P1;      

       if(temp!=0xf0)

       {             

              delay(10);         //延时,去除抖动

              if(temp!=0xf0)

              {    

                     m0=temp;       //获得按键的列号        

                     P1=0x0f;

                     temp=P1;

                     if(temp!=0x0f)

                     {    

                            m1=temp;       //获得按键的行号号    

                         temp=m0|m1;   //获得最终的号

                     }    

                  switch(temp)

                     {

                          case 0xee:key=0;break;

                            case 0xde:key=1;break;

                            case 0xbe:key=2;break;

                            case 0x7e:key=3;break;

                                  

                            case 0xed:key=4;break;

                            case 0xdd:key=5;break;

                            case 0xbd:key=6;break;

                            case 0x7d:key=7;break;

                                  

                            case 0xeb:key=8;break;

                            case 0xdb:key=9;break;

                            case 0xbb:key=10;break;

                            case 0x7b:key=11;break;

                                      

                         case 0xe7:key=12;break;

                         case 0xd7:key=13;break;

                         case 0xb7:key=14;break;

                            case 0x77:key=15;break;

                     }

 

                    do{

                             temp=P1;      //消除按起抖动

                            temp&=0X0f;

                     }while(temp!=0x0f);

              }

       }

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用数字电路CD4069制作的万能遥控轻触开关

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章