- #include <pic.h>
- #include <math.h>
- //#include <myfuncs1.h>
- //#include <seg74.h>
- #include <htc.h>
- #define SEG_BITSEL_PORT PORTD //位選端口
- #define SEG_BITSEL_PORT_DIR TRISD //位選端口的方向寄存器
- #define SEG_FONT_PORT PORTC //字形輸出端口
- #define SEG_FONT_PORT_DIR TRISC //字形輸出端口的方向寄存器
- #define DLY_MS 67
- const char Seg7TableN[]={0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000};
- //__CONFIG(FOSC_HS & WDTE_ON & PWRTE_OFF & BOREN_ON & LVP_ON & CPD_OFF & WRT_OFF & CP_OFF);
- //__CONFIG (XT & WDTDIS & LVPDIS);
- unsigned int g_ADRTable[12] = {0,0,0,0,0,0,0,0,0,0,0 };
- unsigned char g_Count=0;
- bit OverFlag = 0;//12位轉換次數完成標志位清零;
- void delayms (int ms);
- void DisplayData (unsigned int iData);
- void interrupt ISR (void)
- {
- if ( ADIE && ADIF )
- {
- ADIF = 0;
- g_ADRTable[g_Count]=(((unsigned int)ADRESH)<<8)+ADRESL;
- g_Count++;
- if(g_Count==12)
- {
- g_Count =0;
- OverFlag=1;//
- }
- else
- {
- GO_DONE = 1;//啟動AD
- }
- }
- else
- {
- while(1);
- }
- }
- void main(void)
- {
- //void DisplayData();
- char i=0,j=0;
- int tmp = 0;//
- int adc_v = 0;
- TRISA0 = 1;
- SEG_BITSEL_PORT_DIR = 0;//位選端口的方向寄存器,確定輸出端口
- SEG_FONT_PORT_DIR = 0;//字形輸出端口的方向寄存器,確定輸出端口
- ADFM = 1;
- PCFG3:PCFG0 = 0000;
- ADCON0 = 0B11000001;
- ADIE = 1;
- ADIF = 0;
- PEIE = 1;
- GIE = 1;
- for(i=0;i<15;i++)
- {
- ;
- }
- GO_DONE = 1;
- while(GO_DONE)
- {
- if(OverFlag==1)
- {
- for(i=0;i<12;i++)//冒泡法排序
- {
- for(j=i+1;j<12;j++)
- {
- if(g_ADRTable[i] > g_ADRTable[j])
- {
- tmp = g_ADRTable[i];
- g_ADRTable[i] = g_ADRTable[j];
- g_ADRTable[j] = tmp;
- }
- }
- }
- tmp = 0;
- for(i=2;i<10;i++)
- {
- tmp = tmp + g_ADRTable[i];
- }
- tmp = tmp >>3;//將數按照 2進制像右移動.每向右移動一位,相當于 除2的n次冪
- adc_v = tmp;
- adc_v = ((long)adc_v*5000/1023);
- OverFlag = 0;
- GO_DONE = 1;
- }
- DisplayData(adc_v);
- }
- }
- void DisplayData (unsigned int iData )
- {
- char i=0,j=0;//
- char k = 0,NumStr[ 5 ]={0,0,0,0,0};
- NumStr[1]=iData / 1000;//取整
- NumStr[2]=iData % 1000/100;
- NumStr[3]=iData % 100/10;
- NumStr[4]=iData % 10;
- for(i=0;i<10;i++)
- {
- SEG_BITSEL_PORT = k =0X01;
- for(j=0;j<=4;j++)
- {
- SEG_BITSEL_PORT = k;
- if(j==1)
- {
- SEG_FONT_PORT = Seg7TableN[NumStr[j]]&0b01111111;
- }
- else
- {
- SEG_FONT_PORT = Seg7TableN[NumStr[j]];
-
- }
- delayms(5);
- k = k <<1;//把1向左移1為顯示
- }
- }
- }
- void delayms (int ms)
- {
- int i=0,j =0;
- for(i=0;i < ms;i++)
- for(j =0; j < DLY_MS;j++)
- {;}
- }
復制代碼
能幫我看看這個程序問題出在哪里嗎 |