新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于PIC16F877A的簡易數字頻率計

        基于PIC16F877A的簡易數字頻率計

        作者: 時間:2010-12-28 來源:網絡 收藏

        //本程序利用CCP1模塊實現一個“計”的功能
          #include pic.h>
          #include stdio.h>
          #include math.h>
          const char table[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF};
          //不帶小數點的顯示段碼表
          const char table0[11]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF};
          //帶小數點的顯示段碼表
          bank3 int cp1z[11]; //定義一個數組,用于存放各次的捕捉值
          union cp1
          {int y1;
          unsigned char cp1e[2];
          }cp1u; //定義一個共用體
          unsigned char COUNTW,COUNT; //測量脈沖個數寄存器
          unsigned char COUNTER,data,k;
          unsigned char FLAG @ 0XEF;
          #define FLAGIT(adr,bit) ((unsigned)(adr)*8+(bit)) //絕對尋址位操作指令
          static bit FLAG1 @ FLAGIT(FLAG,0);
          static bit FLAG2 @ FLAGIT(FLAG,1);
          static bit FLAG3 @ FLAGIT(FLAG,2);
          unsigned char s[4]; //定義一個顯示緩沖數組
          int T5 ,uo;
          double RE5;
          double puad5;
          //spi方式顯示初始化子程序
          void SPIINIT()
          {
          PIR1=0;
          SSPCON=0x30;
          SSPSTAT=0xC0;
          //設置SPI的控制方式,允許SSP方式,并且時鐘下降沿發送,與74HC595,當其
          //SCLk從低到高跳變時,串行輸入寄存器的特點相對應
          TRISC=0xD7; //SDO引腳為輸出,SCK引腳為輸出
          TRISA5=0; //RA5引腳設置為輸出,以輸出顯示鎖存信號
          FLAG1=0 ;
          FLAG2=0 ;
          FLAG3=0 ;
          COUNTER=0X01;
          }
          //CCP模塊工作于捕捉方式初始化子程序
          void ccpint( )
          {
          CCP1CON=0X05; //首先設置CCP1捕捉每個脈沖的上升沿
          T1CON=0X00; //關閉TMR1震蕩器
          PEIE=1; //外圍中斷允許(此時總中斷關閉)
          CCP1IE=1; //允許CCP1中斷
          TRISC2=1; //設置RC2為輸入
          }
          //系統其它部分初始化子程序
          void initial( )
          {
          COUNT=0X0B; //為保證測試精度,測試5個脈沖的參數后
          //求平均值,每個脈沖都要捕捉其上升、下降沿,
          //故需要有11次中斷
          TRISB1=0;
          TRISB2=0;
          TRISB4=1;
          TRISB5=1; //設置與鍵盤有關的各口的輸入、輸出方式
          RB1=0;
          RB2=0; //建立鍵盤掃描的初始條件
          }
          //SPI傳送數據子程序
          void SPILED(data)
          {
          SSPBUF=data; //啟動發送
          do {
          ;
          }while(SSPIF==0);
          SSPIF=0;
          }
          //顯示子程序,顯示4位數


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 富裕县| 邓州市| 建始县| 禄劝| 西贡区| 敦煌市| 红安县| 永嘉县| 丁青县| 昂仁县| 临颍县| 乌恰县| 嫩江县| 宜黄县| 连平县| 龙胜| 玛纳斯县| 沁水县| 北票市| 朝阳市| 伊川县| 涪陵区| 花垣县| 浠水县| 苍南县| 逊克县| 轮台县| 大竹县| 怀宁县| 金山区| 镇雄县| 霍邱县| 吴忠市| 登封市| 卓尼县| 蓝山县| 隆德县| 宝应县| 钟祥市| 修文县| 绿春县|