按下16个矩阵键盘依次在数码管上显示1-16的平方。

xiunet   2009-12-9 22:19 楼主
按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4...
我写了第3行的检测,就是说:按键按下的话 ,会显示:16   25  36   49:
但是我在实验板上运行的时候,高位的数字只会闪一下就不见了,只有个位的数字。求大家说说原因,或给个检测的程序。
下面是我写的程序:
#include
#define uchar unsigned char
#define uint  unsigned int
uchar num,temp,num1;
uchar i=0,j=0;
uchar code table[]={0x02,0X9F,0x25,0x0D,0x99,0x49,0x40,0x1F,0x00,0x08 };//0~~~9.
void delayms(uint i)   //延时
{
  uint j;
  for(;i>0;i--)
    for(j=100;j>0;j--);
}


main()
{

while(1)
{
   P1=0Xfb;
   temp=P1;
   temp=temp&0xf0;
   if(temp!=0xf0)
   {
             delayms(5);
          while(temp!=0xf0)
          {
                   temp=P1;
                 switch(temp)
                 {
                   case 0xeb: num=2 , num1=7 ;               
                        break;
                   case 0xdb: num=3 , num1=6 ;               
                        break;
                   case 0xbb: num=4,  num1=7;               
                        break;
                  case  0x7b: num=5,  num1=10;               
                        break;
                }
                  while(temp!=0xf0)   //松手检测
                   {
                             temp=P1;
                          temp=temp&0xf0;
                   }
                   P2=0X03;       //打开十位的数码管
                   P0=table[num-1];  //P0是送具体的数字
                   delayms(50) ;
                   P2=0x01;         //个位的数码管
                   P0=table[num1-1];
                   delayms(50);
         }
   }

}
}

回复评论 (5)

应该是数码管显示延时不好,时间间隔太长了,貌似是没4ms闪烁一下人眼就分辨不出来数码管是不是在闪动了,具体忘了~停电睡觉咯~
点赞  2009-12-9 22:46
每4ms
点赞  2009-12-9 22:47
但是我在实验板上运行的时候,高位的数字只会闪一下就不见了,只有个位的数字。求大家说说原因


高位只会闪下,就不亮了。 一般应该是 你LED显示保持时间不够。

你的LED的刷新频率和显示保持时间,再好好调下,应该没问题吧
点赞  2009-12-9 23:44
刷新时间没有设定好
点赞  2009-12-10 09:09
引用: 引用 3 楼 kyzf 的回复:
但是我在实验板上运行的时候,高位的数字只会闪一下就不见了,只有个位的数字。求大家说说原因


高位只会闪下,就不亮了。 一般应该是 你LED显示保持时间不够。

你的LED的刷新频率和显示保持时间,再好好调下,应该没问题吧


:我改了时间 也不行啊,
点赞  2009-12-10 13:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复