单片机试验数码管上如何显示数字

2024-12-18 14:02:31
推荐回答(2个)
回答1:

  解决方法:
  试验数码管上显示数字( 单片机直接实现位选 共阴极) 。
  解决方式:
  连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 。
  代码:

  #include
  #define uint unsigned int
  #define uchar unsigned char
  void delay(uint z)
  {
  uint x,y;
  for(x=z;x>0;x--)
  {
  for(y=0;y<113;y++)
  {
  }
  }
  }
  unsigned int code dbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
  unsigned int code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
  void main()
  {
  while(1)
  {
  P1=dbit[4];
  P0=num[9];
  }
  }

  位定义
  #include
  #include
  #define uint unsigned int
  #define uchar unsigned char
  sbit LSA=P2^2;
  sbit LSB=P2^3;
  sbit LSC=P2^4;
  uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  void delay(uint z)
  {
  uint x,y;
  for(x=z;x>0;x--)
  {
  for(y=0;y<113;y++)
  {
  }
  }
  }
  void main()
  {
  while(1)
  {
  LSA=0;
  LSB=0;
  LSC=0;
  P0=num[6];
  delay(2);
  LSA=1;
  LSB=0;
  LSC=0;
  P0=num[6];
  delay(2);
  }
  }

  //让八个数码管全部亮并且从0~9循环
  #include
  #include
  #define uint unsigned int
  #define uchar unsigned char
  uchar num;
  uchar wnum=0x00;
  uchar code dbit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段选,选择要显示的数字
  //uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位数码管
  void delay(uint z)
  {
  uint x,y;
  for(x=z;x>0;x--)
  {
  for(y=0;y<113;y++)
  {
  }
  }
  }
  void main()
  {
  P1=wnum;
  while(1)
  {
  for(num=0;num<10;num++)
  {
  P0=dbit[num];
  delay(500);
  }
  }
  }

回答2:

0x7f的8位二进制数是01111111,与字模相与(&)之后会亮,这说明共阳LED数码管小数点属于字模编码的最高位,如果最高位为0小数点则亮。而字模编码的小数点默认都是不亮的。如数字0的字模~0x3F按位取反后的二进制数是11000000,最高位为1小数点不亮,那么11000000与上述01111111相与的结果是01000000,最高位变为0小数点也就亮了。还有:
数字1的字模~0x06按位取反后的二进制数是11111001,最高位为1;
数字2的字模~0x5B按位取反后的二进制数是10100100,最高位为1;
。。。。。。
其它的字模你自己看看最高位都是1。