搜索
bottom↓
回复: 1

把为一体数码管+矩阵键盘 求指教!!!

[复制链接]

出0入0汤圆

发表于 2012-3-29 22:29:32 | 显示全部楼层 |阅读模式
想要实现按一个按键然后在八位数码管上显示,按第二个按键的时候第一个移位,显示两个数,就好比如计算器,请各位大侠指教指教。。。。。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar num2,j;
uchar jianzhi[8];
uchar code num_table[10]={0xc0,0xF9,         //共阳数码管0~9字形码         p;0x8c E;0x86
                                                0xA4,0xB0,0x99,0x92,
                                                0x82,0xF8,0x80,0x90,};
/******延时函数************/
void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
      for(y=110;y>0;y--) ;
}
void init()
{
}
/**********3x4矩阵键盘扫描函数*********/
uchar keyscan()
{
    uchar temp,num; //num的初值要为无键盘按下时的返回值
/*********扫描第一行****************/
          P3=0xfe;                          //第一行键盘扫描
          temp=P3;
          temp=temp&0xf0;           //判断是否有键按下,有则往下
          while(temp!=0xf0)                                                                                                       
          {
            delay(5);                        //延时,再判断
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)         //确定有,则往下判断位置
                {
                        temp=P3;
                          switch(temp)
                        {
                                case 0xee:num=1;
                                        break;
                                case 0xde:num=2;
                                        break;
                                case 0xbe:num=3;
                                        break;
                        }
                                while(temp!=0xf0)                //松手判断
                                {
                                  temp=P3;
                                  temp=temp&0xf0;
                                }
             }
           }
          P3=0xfd;                                                //第二行扫描开始。。。
          temp=P3;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                          switch(temp)
                        {
                                case 0xed:num=4;
                                        break;
                                case 0xdd:num=5;
                                        break;
                                case 0xbd:num=6;
                                        break;
                        }
                                while(temp!=0xf0)
                                {
                                  temp=P3;
                                  temp=temp&0xf0;
                                }
                }
          }
          P3=0xfb;                                        //第三行扫描开始。。。
          temp=P3;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                          switch(temp)
                        {
                                case 0xeb:num=7;
                                        break;
                                case 0xdb:num=8;
                                        break;
                                case 0xbb:num=9;
                                        break;
                        }
                                while(temp!=0xf0)
                                {
                                  temp=P3;
                                  temp=temp&0xf0;
                                }
                }
          }
          P3=0xf7;                                        //第四行扫描开始。。。
          temp=P3;
          temp=temp&0xf0;
          while(temp!=0xf0)
          {
            delay(5);
                temp=P3;
                temp=temp&0xf0;
                while(temp!=0xf0)
                {
                        temp=P3;
                          switch(temp)
                        {
                                case 0xe7:num=10;
                                        break;
                                case 0xd7:num=0;
                                        break;
                                case 0xb7:num=12;
                                        break;
                        }
                                while(temp!=0xf0)
                                {
                                  temp=P3;
                                  temp=temp&0xf0;
                                }
                }
          }
return num;
}
void mima(uchar t)
{
                if(t>=0&&t<8)
           {   
             jianzhi[j++]=t;                             
           }

}
void main()
{         
        uchar i,t;
        init();
        P2=0x00;
        while(1)
        {
               
                num2=keyscan();
                mima(num2);
                P0=t;        

                P2=i;
                i<<=1;
                if(i==0x00)
                i=0x01;
               
        }
}

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-3-29 22:32:12 | 显示全部楼层
第一次发帖   不好意思   不知道怎么添加附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

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

GMT+8, 2024-5-20 03:03

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

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