搜索
bottom↓
回复: 1

现做了一个4*4键盘扫描程序(P3口低4位为行线,高4位为列线,P1口用于显示),用C语言编写的

[复制链接]

出0入0汤圆

发表于 2009-3-31 11:40:36 | 显示全部楼层 |阅读模式
#include "reg51.h"
char code keycode[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
char code segcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
delay(int  x)       
  { int i,j;
   for(i=1;i<x;i++)
     for(j=1;j<140;j++);
   }
main()
{unsigned char temp,t;
int n;
  P1=0X00;
  P3=0xfe;                 
while(1)
   { t=P3;         
           temp=P3&0xf0;
        if(temp!=0xf0)
         { delay(5);
           temp=P3&0xf0;       
          if (temp!=0xf0)
            { do
                  { if (P3==keycode[n])
                     break;
                        n++;
                   }while(n<16);
                 
               
                  delay(5);
                   P1=segcode[n];
                 } }
           n++;
           P3=t;
           P3=P3<<1|0X01;
           if(P3==0xef)
             {P3=0XFE; n=0;}
          

        }  }
下面程序为非循环的
#include "reg51.h"
char code keycode[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
char code segcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
delay(int  x)       
  { int i,j;
   for(i=1;i<x;i++)
     for(j=1;j<140;j++);
   }
main()
{unsigned char temp,t;
int num;

while(1)
  {P3=0Xfe;
    temp=P3&0xf0;
      if(temp!=0xf0)
          {
          delay(5);
          if(temp!=0xf0)
          {temp=P3;
           switch(temp)
            {   case 0xee:num=0;
                    break;
                case 0xde:num=1;
                    break;
                case 0xbe:num=2;
                    break;
                case 0x7e:num=3;
                    break;
             }
                     
        P1=segcode[num];
      
           }  
         }
        P3=0Xfd;
         temp=P3&0xf0;
        if(temp!=0xf0)
         {delay(5);
          if(temp!=0xf0)
          {temp=P3;
           switch(temp)
            {   case 0xed:num=4;
                    break;
                case 0xdd:num=5;
                    break;
                case 0xbd:num=6;
                    break;
                case 0x7d:num=7;
                    break;
                }
             P1=segcode[num];
      
           }
         }
        P3=0Xfb;
          temp=P3&0xf0;
        if(temp!=0xf0)
         {delay(5);
          if(temp!=0xf0)
          {temp=P3;
           switch(temp)
            {   case 0xeb:num=8;
                    break;
                case 0xdb:num=9;
                    break;
                case 0xbb:num=10;
                    break;
                case 0x7b:num=11;
                    break;
                }
             P1=segcode[num];
      
           }
         }
        P3=0Xf7;
          temp=P3&0xf0;
        if(temp!=0xf0)
         {delay(5);
          if(temp!=0xf0)
          {temp=P3;
           switch(temp)
            {   case 0xe7:num=12;
                    break;
                case 0xd7:num=13;
                    break;
                    case 0xb7:num=14;
                    break;
                        case 0x77:num=15;
                    break;
                }
                                 
        P1=segcode[num];
      
           }
         }
}           }

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-4-9 15:52:53 | 显示全部楼层
关注中
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 06:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表