pic单片机16f877a程序的问题

2019-07-16 02:37发布

我需要用单片机实现1khz,1V的幅值的正弦信号峰峰值的数码管显示,请问这个程序怎么编写啊!
这是我写的,有什么问题吗!~望高手们帮忙解决。谢谢~!
  1. #include <pic.h>
  2. #define UCHAR unsigned char
  3. #define UINT unsigned int
  4. __CONFIG(0X3B31);
  5. UINT aa;
  6. UINT max,min;

  7. const UCHAR table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  8.                     0x7f,0x6f,0x77,0x39,0x5e,0x79,0x71};//数码表

  9. void DELAY_ms(UINT x)
  10. {
  11.         UINT a,b;
  12.         for(a=x;a>0;a--)
  13.                 for(b=110;b>0;b--);
  14. }

  15. void Init()
  16. {
  17.         TRISA=0X01;
  18.         TRISD=0;
  19.         PORTA=0;
  20.         PORTD=0;
  21.         ADCON0=0X41;
  22.         ADCON1=0X8E;
  23.         DELAY_ms(10);
  24. }
  25. UINT AD_GET()
  26. {
  27.         UINT ADVAL,i=0;
  28.         GO=1;

  29.         ADVAL=ADRESH;
  30.         ADVAL=ADVAL<<8|ADRESL;
  31.         aa=ADVAL;
  32.         GO=0;
  33. }
  34. UINT JISUAN()
  35. {
  36.         UINT i,hh;
  37.         i=0;max=0;min=0;
  38.         while(i<2500)
  39.         {
  40.                 aa=AD_GET();
  41.                 if(aa>max) {max=aa;}
  42.                 if(aa<min) {min=aa;}
  43.                 i++;       
  44.         }
  45.         hh=max-min;
  46.         return hh;
  47. }


  48. void disp(UCHAR num1, UCHAR num2,UCHAR num3,UCHAR num4)
  49. {
  50.         PORTD=table[num1];
  51.         PORTA=0X20;
  52.         DELAY_ms(2);
  53.         PORTD=table[num2];
  54.         PORTA=0X10;
  55.         DELAY_ms(2);
  56.         PORTD=table[num3];
  57.         PORTA=0X08;
  58.         DELAY_ms(2);
  59.         PORTD=table[num4];
  60.         PORTA=0X04;
  61.         DELAY_ms(2);
  62. }


  63. void main()
  64. {
  65.         UCHAR a1,a2,a3,a4;
  66.         UINT lednum;
  67.         Init();
  68.         while(1)
  69.         {
  70.                 lednum=JISUAN();
  71.                 a1=lednum/1000;
  72.                 a2=lednum%1000/100;
  73.                 a3=lednum%100/10;
  74.                 a4=lednum%10;
  75.                 disp(a1,a2,a3,a4);
  76.         }
  77. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。