当前位置: 代码迷 >> 单片机 >> 51两位数码管展示
  详细解决方案

51两位数码管展示

热度:119   发布时间:2016-04-28 14:50:43.0
51两位数码管显示
#include<reg52.h>
#include<intrins.h>
void scan ();
void delay(int x);
void display(int x);
int num=0;//存放按键次数
sbit p3_4=P3^4;
sbit p2_0=P2^0;
sbit p2_1=P2^1;
int code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

main()
{
  P1=0xfe;
  while(1)
  {
  scan();
  display(num);
  }
}
void scan()
{
  if(p3_4==0)
     {
  delay(10);
  if(p3_4==0) 
     {
  P1=_crol_(P1,1);
  num++;
  while(!p3_4);
 }   
}
}
void delay(int x)
{
   int i,j;
   for(i=x;i>0;i--)
       for(j=110;j>0;j--);
}
void display(int x)//请看这个函数
{
  int ge,shi;
  ge=x%10;
  shi=x/10;
  p2_0=0;  //开启位选
  P0=table[ge];//按一次后为什么是十位加一,而且进位到个位了呢,个位和十位反了,是程序不对还是原理图我看的不对求指教
  p2_0=1;
  p2_1=0;
  P0=table[shi];
  p2_1=1;
}

------解决思路----------------------
程序似乎没错,那就是数码管的pin脚搞反了吧
------解决思路----------------------
你的图显示,P2_0控制最左边的数码管,P2_1控制第二个,我们看到的两位数,不是左边是十位,右边是个位吗。就是高位在左,低位在右,你的明显就是把弄反了,程序里面弄反了。
------解决思路----------------------
两位弄反了 修改一下就好
------解决思路----------------------
这个不需要提问吧,自己调试下就好了。
  相关解决方案