zhuww 发表于 2022-5-5 21:33

为什么按第二次后数码管示数不改变

为什么按第二次后数码管示数不改变

zhuww 发表于 2022-5-5 21:37


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint xms)
{
      uint i,j;
      for(i=xms;i>0;i--)
                for(j=110;j>0;j--);    //延时
}
void display(uchar num)
{
      while(1)
      {
      uchar hang,lie;
      hang=num/10;
      lie=num%10;
      
      P1=table;
      duan=1;
      duan=0;
      P1=0Xfd;      
      wei=1;
      wei=0;
      delay(10);               

      P1=table;
      duan=1;
      duan=0;
    P1=0Xfe;      
      wei=1;      
      wei=0;
      delay(10);
      }
                                          //数码显示被按键的位置
}
void matrixkeyscan()          //确定被按下按键的位置
{
      uchar temp,key;
      P3=0xfe;
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xee:key=0;break;
                              case 0xde:key=1;break;
                              case 0xbe:key=2;break;
                              case 0x7e:key=3;break;
                        }
                        while(temp!=0xf0)
                        {
                              temp=P3;
                              temp=temp&0xf0;
                        }
                        display(key);
                }
      }
      P3=0xfd;
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xed:key=10;break;
                              case 0xdd:key=11;break;
                              case 0xbd:key=12;break;
                              case 0x7d:key=13;break;
                        }
                        while(temp!=0xf0)
                        {
                              temp=P3;
                              temp=temp&0xf0;
                        }
                        display(key);
                }
      }
      P3=0xfb;
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xeb:key=20;break;
                              case 0xdb:key=21;break;
                              case 0xbb:key=22;break;
                              case 0x7b:key=23;break;
                        }
                        while(temp!=0xf0)
                        {
                              temp=P3;
                              temp=temp&0xf0;
                        }
                        display(key);
                }
      }
      P3=0xf7;
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xe7:key=30;break;
                              case 0xd7:key=31;break;
                              case 0xb7:key=32;break;
                              case 0x77:key=33;break;
                        }
                        while(temp!=0xf0)
                        {
                              temp=P3;
                              temp=temp&0xf0;
                        }
                        display(key);
                }
      }
}
void main()
{
      while(1)
      {
      matrixkeyscan();
      }
}

zhenykun 发表于 2022-5-5 21:39

你邀请我来看看你的程序。但我写的话,不会用高校或书本上那些误人子弟的方法,而是用中断扫描或定时扫描来编写。

chuxh 发表于 2022-5-5 21:41

我才看了看,display()退不出来吧?当然第二次显示不了

zhuww 发表于 2022-5-5 21:43

确实是这样的

zwll 发表于 2022-5-5 21:45

这个是典型的数码管显示吧 楼主有什么问题吗

dingy 发表于 2022-5-5 21:47

这个是典型的数码管显示吧 楼主有什么问题吗

pengf 发表于 2022-5-5 21:50


没检测到按键

zhuww 发表于 2022-5-5 21:52

唉,还是没有什么结果,算了,多谢大家啦

cyclefly 发表于 2022-5-6 11:07

没有响应到按键

tpgf 发表于 2022-6-1 12:54

每次都是第一次好用是吗

drer 发表于 2022-6-1 13:31

貌似用的是轮询模式是吗

qcliu 发表于 2022-6-1 13:46

用中断试试看

coshi 发表于 2022-6-1 14:04

需要确认一下卡在哪一步了

kxsi 发表于 2022-6-1 14:13

这个代码应该需要进行完善

wiba 发表于 2022-6-1 14:22

书本上有很多是很值得借鉴的
页: [1]
查看完整版本: 为什么按第二次后数码管示数不改变