如果我在不同的端口中有七个段引脚,该怎么办?

时间:2019-07-01 08:47:21

标签: mplab xc8 seven-segment-display

在我的电路中,有7个段引脚位于不同的端口,例如:Seg A至SegD(在RA0至RA4中)SegE(在RF1中)SegF(RG4)SegG(RG3)。我可以一一设置位来计数0到9。我需要计数0-9999,但是ı无法存储值。我该怎么做才能满足我的要求?

#include "mcc_generated_files/mcc.h"
#define DISP1 RD7
#define DISP2 RD6
#define DISP3 RD5
#define DISP4 RD4
#define SEGA  RA0
#define SEGB  RA1
#define SEGC  RA2
#define SEGD  RA3
#define SEGE  RF1
#define SEGF  RG4
#define SEGG  RG3
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();



  TRISD = 0x00; // Set All Pins To Be Output Pins
  PORTD = 0x00; // Initially Clear All The 8-Pins
  while(1)
  {
       SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=1;SEGF=1;SEGG=0;DISP4=1;//0
      __delay_ms(500);

          SEGA=0;SEGB=1;SEGC=1;SEGD=0;SEGE=0;SEGF=0;SEGG=0;DISP4=1;//1
      __delay_ms(500);

          SEGA=1;SEGB=1;SEGC=0;SEGD=1;SEGE=1;SEGF=0;SEGG=1;DISP4=1;//2
      __delay_ms(500);

      SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=0;SEGF=0;SEGG=1;DISP4=1;//3
      __delay_ms(500);

      SEGA=0;SEGB=1;SEGC=1;SEGD=0;SEGE=0;SEGF=1;SEGG=1;DISP4=1;//4
      __delay_ms(500);

      SEGA=1;SEGB=0;SEGC=1;SEGD=1;SEGE=0;SEGF=1;SEGG=1;DISP4=1;//5
      __delay_ms(500);

      SEGA=1;SEGB=0;SEGC=1;SEGD=1;SEGE=1;SEGF=1;SEGG=1;DISP4=1;//6
      __delay_ms(500);

      SEGA=1;SEGB=1;SEGC=1;SEGD=0;SEGE=0;SEGF=0;SEGG=0;DISP4=1;//7
      __delay_ms(500);
     SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=1;SEGF=1;SEGG=1;DISP4=1;//8
      __delay_ms(500);

      SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=0;SEGF=1;SEGG=1;DISP4=1;//9
      __delay_ms(500);


  }

1 个答案:

答案 0 :(得分:0)

一些提示:

如果要使用4位数字,则必须多路复用显示。

在表格中定义每个数字:

const uint8_t LEDTable[10] = {0b00111111,   //led drive for 0
                              0b00000110,   //led drive for 1
                              ....
                              0b01101101};   //led drive for 9

在中断例程中执行多路复用。 在中断中,必须为每个数字进行输出:
一个

迅雷...

每个数字的输出如下:

SEGA = (value & 0x01) ? 1:0;
SEGB = (value & 0x02) ? 1:0;
SEGC = (value & 0x04) ? 1:0;
SEGD = ...