各位大佬,我想通过8255的A口接键盘控制B,C口的高低电平,该怎么改程序?

各位大佬,我想通过8255的A口接键盘控制B,C口的高低电平,该怎么改程序?,各位大佬,我想通过8255的A口接键盘控制B,C口的高低电平(例如,第一个按键按下后,PB0变为低电平…

各位大佬,我想通过8255的A口接键盘控制B,C口的高低电平,该怎么改程序?,各位大佬,我想通过8255的A口接键盘控制B,C口的高低电平(例如,第一个按键按下后,PB0变为低电平,再按一下,PB0变为高电平),我应该怎么该程序


1.JPG

  1. #include<reg52.h>
  2. #include<absacc.h>
  3. #define PA XBYTE[0x7cff]   //A口地址定义
  4. #define PB XBYTE[0x7dff]   //B口地址定义
  5. #define PC XBYTE[0x7eff]   //C口地址定义
  6. #define COM XBYTE[0x7fff]  //控制地址定义
  7. void DelayM(unsigned int x)  //延时子程序
  8. {
  9.   unsigned char t;
  10.         while(x–)
  11.         {
  12.           for(t=0;t<120;t++);
  13.         }
  14. }
  15. unsigned char keyscan(void)  //键盘扫描
  16. {
  17.         unsigned temp,keynum;
  18.         PA=0xfe;
  19.         temp=PA;
  20.         temp=temp&0xf0;
  21.         if(temp!=0xf0)
  22.         {
  23.                 DelayM(20);
  24.                 temp=PA;
  25.                 temp=temp&0xf0;
  26.                 if(temp!=0xf0)
  27.                 {
  28.                         temp=PA;
  29.                         switch(temp)
  30.                         {
  31.                                 case 0xee:keynum=0;PB=0xfe;break;
  32.                           case 0xde:keynum=1;PB=0xfd;break;
  33.                                 case 0xbe:keynum=2;PB=0xfb;break;
  34.                                 case 0x7e:keynum=3;PB=0xf7;break;
  35.                         }
  36.                         while((temp&0xf0)!=0xf0)
  37.                         {
  38.                                 temp=PA;
  39.                         }
  40.                 }
  41.         }
  42.         
  43.         PA=0xfd;
  44.         temp=PA;
  45.         temp=temp&0xf0;
  46.         if(temp!=0xf0)
  47.         {
  48.                 DelayM(20);
  49.                 temp=PA;
  50.                 temp=temp&0xf0;
  51.                 if(temp!=0xf0)
  52.                 {
  53.                         temp=PA;
  54.                         switch(temp)
  55.                         {
  56.                                 case 0xed:keynum=4;PB=0xef;break;
  57.                           case 0xdd:keynum=5;PB=0xdf;break;
  58.                                 case 0xbd:keynum=6;PB=0xbf;break;
  59.                                 case 0x7d:keynum=7;PB=0x7f;break;
  60.                         }
  61.                         while((temp&0xf0)!=0xf0)
  62.                         {
  63.                                 temp=PA;
  64.                         }
  65.                 }
  66.         }
  67.         
  68.         PA=0xfb;
  69.         temp=PA;
  70.         temp=temp&0xf0;
  71.         if(temp!=0xf0)
  72.         {
  73.                 DelayM(20);
  74.                 temp=PA;
  75.                 temp=temp&0xf0;
  76.                 if(temp!=0xf0)
  77.                 {
  78.                         temp=PA;
  79.                         switch(temp)
  80.                         {
  81.                                 case 0xeb:keynum=8;PC=0xfe;break;
  82.                                 case 0xdb:keynum=9;PC=0xfd;break;
  83.                                 case 0xbb:keynum=10;PC=0xfb;break;
  84.                                 case 0x7b:keynum=11;PC=0xf7;break;
  85.                         }
  86.                         while((temp&0xf0)!=0xf0)
  87.                         {
  88.                                 temp=PA;
  89.                         }
  90.                 }
  91.         }
  92.         
  93.         PA=0xf7;
  94.         temp=PA;
  95.         temp=temp&0xf0;
  96.         if(temp!=0xf0)
  97.         {
  98.                 DelayM(20);
  99.                 temp=PA;
  100.                 temp=temp&0xf0;
  101.                 if(temp!=0xf0)
  102.                 {
  103.                         temp=PA;
  104.                         switch(temp)
  105.                         {
  106.                                 case 0xe7:keynum=12;PC=0xef;break;
  107.                                 case 0xd7:keynum=13;PC=0xdf;break;
  108.                                 case 0xb7:keynum=14;PC=0xbf;break;
  109.                                 case 0x77:keynum=15;PC=0x7f;break;
  110.                         }
  111.                         while((temp&0xf0)!=0xf0)
  112.                         {
  113.                                 temp=PA;
  114.                         }
  115.                 }
  116.         }
  117. }
  118. void main()
  119. {
  120.   COM=0x90;  //方式0,A口为输入,B,C口为输出
  121.         PA=0xff;
  122.         PB=0xff;
  123.   PC=0xff;
  124.   while(1)
  125.   {
  126.     keyscan();
  127.   }
  128. }

复制代码

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115