⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5255_control_key.c

📁 5255控制按键,并且用八段数码管显示.用51做控制,5255作键的采集和显示
💻 C
字号:
#include<stdio.h>
#include<reg52.h>
#include <absacc.h>
#define PA XBYTE[0x8000]
#define PB XBYTE[0x8001]
#define PC XBYTE[0x8002]
#define COM XBYTE[0x8003]
unsigned int data ledtable[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10},keytable[4][6]={{7,8,9,10,16,17},{4,5,6,11,18,19},{1,2,3,12,20,21},{0,15,14,13,22,23}};
unsigned int i;
/*===================延迟子程序============*/
void delay(void)
{
   unsigned char j,k;
	for(j=20;j>0;j--)
		for(k=248;k>0;k--);
}
/*===========数码管显示子程序===============*/
void ledplay(int b)
{
    unsigned int m,x[6];
    for(i=0;i<6;i++)
    {
        x[i]=b%10;
        b=b/10;
    }
    for(i=0;i<6;i++)
    {
        x[i]=ledtable[x[i]];
    }
    m=0xdf;
    for(i=6;i>0;i--)
    {
        PA=x[i-1];
        PC=m;
        delay();
        PC=0xff;
        PA=0xff;
        m=(m>>1)|(0x80);
     }
}
/*=============测试按键===========*/
unsigned char testkey(void)
{
    PC=0;
   if((PB&0x0f)!=0x0f)
         return(1);
    else
         return(0);
}

/*===============得到键值==========*/
unsigned int getkey(void)
{
    unsigned int x,y,m;
	m=0xfe;
    PC=m;
    while((PB&0x0f)==0x0f)           //键盘扫描
    {
	    m=(m<<1)|0x01;
		PC=m;
	}
    y=m;
    x=PB;
    for(i=0;(x&0x01)!=0;i++)         
           x>>=1;
    x=3-i;                            //行数
    for(i=0;(y&0x01)!=0;i++)
           y>>=1;
    y=5-i;                            //列数
    while(testkey());                 //等待按键释放
    return(keytable[x][y]);           //查表得键值
}



/*===========main============*/
main()
{
    unsigned int num=0;
    COM=0x82;
    while(1)
    {
       if(testkey())                  //测试按键
       {
           delay();                  //延时去抖动
           if(testkey())
               num=getkey();          //得按键值
       }
       ledplay(num);                  //LED显示
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -