帮忙看看这个程序是什么问题

2020-02-09 09:27发布

164和138控制数码管 显示为全8加小数点 是不是串口数据转换的问题 真诚请教 谢谢
#include <pic.h>
#include <math.h>

__CONFIG(0xd822);

#define data RC7   //164
#define clk RC6

#define A0 RA3    //138
#define A1 RA4
#define A2 RA5

#define  _nop_()  asm("nop")

#define uchar unsigned char
#define uint unsigned int

uchar dis_7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x67,0x7f,0x6f};

char A[4],ww,qw,bw,sw,gw;
unsigned int x;

void DISP_FOUR(char *A);
void DISP_ONE(char *A);
void BCD(unsigned int r1);
void DELAY(unsigned int n);

main(void)
{
  TRISA=0b00111000;
  TRISC=0b00000000;
  PORTC=0;
  x=1234;
  while(1)
   {
    BCD(x);
    A[0]=gw;
    A[1]=sw;
    A[2]=bw;
    A[3]=qw;
    DISP_FOUR(A);
    x++;
    if(x>9999)
      x=0;
    DELAY(500);  
   }
}

void DISP_ONE(char *A)
{
  char i,j;
  j=dis_7[*A];
  for(i=0;i<8;i++)
   {
    clk=0;
    if((j&0x80)==0x80)
         data=1;
      else
         data=0;
     _nop_();
     clk=1;
     j=j<<1;
    }
  data=0;
}

void DISP_FOUR(char *A)
{
  DISP_ONE(A++);
  A0=1;
  A1=0;
  A2=0;
  DISP_ONE(A++);
  A0=0;
  A1=1;
  A2=0;
  DISP_ONE(A++);
  A0=1;
  A1=1;
  A2=0;
  DISP_ONE(A);  
  A0=0;
  A1=0;
  A2=1;
}



void BCD(unsigned int r1)
{
  ww=0;qw=0;bw=0;sw=0;gw=0;
while(r1>=10000)
   {r1-=10000; ww++;}
while(r1>=1000)
   {r1-=1000; qw++;}
while(r1>=100)
   {r1-=100; bw++;}
while(r1>=10)
   {r1-=10; sw++;}
gw=r1;
}



void DELAY(unsigned int n)
{
        unsigned int j;
        char k;
        for (j=0;j<n;j++)
                        for (k=246;k>0;k--) _nop_();
}
0条回答

一周热门 更多>