立即注册 登录
返回首页

uid:267547的个人空间

日志

51单片机 手机键盘

已有 488 次阅读2017-12-27 10:37

#include<reg52.h>
#include<absacc.h>
#include<stdio.h>
#define at8255_PA   XBYTE[0xD1FF]
#define at8255_PB   XBYTE[0xD2FF]
#define at8255_PC   XBYTE[0xD5FF]
#define at8255_CON  XBYTE[0xD7FF]
#define uchar unsigned char
#define uint unsigned int 
char code dis[11]={0xA0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0xff};
uchar KeyNumber=0;
uchar temp=1;
uchar flag=0,flagnum=0;
uchar a[3]={0};
uchar wait_time=0;
uchar count=0;
uchar num=0;
void Init_8255();
void Init_timer();
void delay(uchar k);
void display();
void GetKeyNumber();

void Init_8255()
{
    at8255_CON=0x81;
at8255_PA=0xff;
at8255_PB=0xff;
}
void Init_timer()
{
    TMOD=0X11;
ET0=1;
TH0=(65535-15536)/256;
TL0=(65535-15536)%256;
EA=1;
}
void delay(uchar k)
{
    uchar i,j;
for(j=k;j>0;j--)
 for(i=120;i>0;i--);
}
void display()
{
    at8255_PB=dis[a[0]%10];
at8255_PA=0xdf;
delay(0);
at8255_PA=0xff;
at8255_PB=dis[a[0]/10];
at8255_PA=0xef;
delay(0);
at8255_PA=0xff;
at8255_PB=dis[a[1]%10];
at8255_PA=0xf7;
delay(0);
at8255_PA=0xff;
at8255_PB=dis[a[1]/10];
at8255_PA=0xfb;
delay(0);
at8255_PA=0xff;
at8255_PB=dis[a[2]%10];
at8255_PA=0xfd;
delay(0);
at8255_PA=0xff;
at8255_PB=dis[a[1]/10];
at8255_PA=0xfe;
delay(0);
at8255_PA=0xff;
}
void GetKeyNumber()
{
    uchar i,j=0x80,k;
uchar keytab[9]={0x28,0x48,0x88,0x24,0x44,0x84,0x22,0x42,0x82};
at8255_PC=0x00;
for(i=0;i<3;i++)
{
  at8255_PC=j;
  k=at8255_PC;
  k=k&0x0f;
  if(k!=0)
  {
     delay(1);
 k=at8255_PC;
 k=k&0x0f;
 while(at8255_PC&0x0f);
 break;
  }
  j=j>>1;
  delay(0);
}
k=k+j;
for(i=0;i<9;i++)
{
  if(keytab[i]==k)
  {   
      TR0=0;
  count=0;
  wait_time=0;
  if(flagnum==0)
  {
     flagnum=k;
 a[num]=i*3+temp;
 temp++;
  }
  else if(flagnum!=k)
  {
     flagnum=k;
 flag=1;
 if(temp>3)
 {
   temp=1;
++num;
 }
 if(num==3)
 {
   a[0]=i*3+temp;
 }
 else
 {
   a[num]=i*3+temp;
 }
 if(a[num]==27)
 {
   a[num]=26;
temp++;
 }
  }
  else
  {
     if(temp>3)
 {
   temp=1;
a[num]=i*3+temp;
 }
 if(a[num]==27)
 {
   a[num]=26;
temp++;
 }
  }
}
}
}
void main()
{
   Init_8255();
   Init_timer();
   while(1)
   {
      while(wait_time<3&flag==0)
 GetKeyNumber();
 display();
   }
   if(flag==1);
   else
   {
      num++;
      flag=0;
      temp=1;
      TR0=0;
      wait_time=0;
      count=0;
      if(num>=3)
      num=0;
   }
}
void Timer0_Ser() interrupt 1
{
   TH0=(65535-15536)/256;
   TL0=(65535-15536)%256;
   count++;
   if(count==20)
   {
      count=0;
 wait_time++;
   }
}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部